windows系统下,django1.8+python3.5使用pymysql链接 mysql数据库

本教程搜集了网上各种能搜集到的资源,整合而成,为了后续方便自己和大家查阅,写的有些简陋,见谅,后续完善。
介绍:由于python3.5 不能使用MySQLdb,上网搜寻一番后,决定使用pymysq。
以下文章假设已经安装好了python,不再讲解如何安装python

1、第一步安装pymysql
在python官网中去下载ez_setup.py文件。
此工具是python管理包工具,通过它可以下载很多服务。
请根据系统下载相关文件。
下载ez_setup.py

在python中执行python ez_setup.py文件,如果没有配置环境变量,可以在python安装路径中找到python.exe,在此目录中执行上面命令:
安装
命令执行成功后,会在python安装目录下easy_install.exe工具包

在CMD命令行执行:easy_install.exe pymysql3
如果找不到该命令,切换服务到python安装目录/Scripts/下执行。如果此目录下没有easy_install.exe,证明上一步没有安装成功。
安装pymysql3服务如下:

这里写图片描述
pymysql3服务安装成功后,开始写python程序连接mysql服务。
mysql数据库安装在此省略,到mysql官方网站下载,下一步安装就可以了。

2、使用python
代码:

#导入pymysql的包
import pymysql
try:
#获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
  conn=pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,charset='utf8')
  cur=conn.cursor()                              #获取一个游标对象
  cur.execute("CREATE DATABASE test15")          #执行对应的SQL语句
  cur.execute("USE test15")
  cur.execute("CREATE TABLE users (id INT, name VARCHAR(18))")
  cur.execute("INSERT INTO users VALUES(1, 'blog'),(2, 'csdn'),(3, 'net'),(4, 'a359680405')")

  cur.execute("SELECT * FROM users")
  data=cur.fetchall()

  for row in data: 
      print('%s\t%s' %row)                       



  cur.close()                                    #关闭游标
  conn.commit()                                  #向数据库中提交任何未解决的事务,对不支持事务的数据库不进行任何操作
  conn.close()                                   #关闭到数据库的连接,释放数据库资源
except  Exception :print("发生异常")

NOTE: 这里我在测试连接的时候报了一个错误:
可能会报找不到Module ‘MySQLdb’
因为我们这里使用的是PyMySQL,而django1.8(我当前的版本)默认是使用MySQLdb。
我们找到使用的地方:
在Python安装目录Lib/site-packages/Django-1.8-py3.5.egg/django/db/backends/mysql对应的文件夹下有一个base.py这里是连接数据库具体的代码。我们可以将这个模块里边的MySQLdb全部替换为pymysql。

然后重新运行,又报错:

ImportError: cannot import name Thing2Literal

自己查看了一下代码,也百度了一下,发现是因为MySQLdb里面有一个Thing2Literal方法,在pymysql里没有,所以导致报错,然后我们将以下代码放到pymysql.converters (路径Lib\site-packages\pymysql3-0.5-py3.5.egg使用360压缩打开编辑里面的converters .py文件,然后替换掉包里的文件 即可)里面,错误就消失了,代码:

def _Thing2Literal(o,d):
    """
    Implemented for compatibility with Django.
    This function is overriden by the connection's escape method when one is available.
    """
    raise NotImplementedError('Thing2Literal is only implemented through the Connection object.')

Thing2Literal = _Thing2Literal

编辑仓促,如有错误地方,请指出,谢谢,共同进步。

发布了11 篇原创文章 · 获赞 6 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/rao356/article/details/48975617
今日推荐