MySQL驱动程序
使用Django来操作MySQL,实际上底层还是通过Python来操作的。因此想要用Django来操作MySQL,首先还是需要安装一个驱动程序。在Python3中,驱动程序有多种选择,比如有pymysql以及mysqlclient等。
常见MySQL驱动:
- MySQL-python:也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2
但是只支持Python2,目前还不支持Python3。 - mysqlclient:是MySQL-python的另外一个分支,支持Python3 并且修复了一些bug。
- pymysql:纯Python实现的一个驱动。因为是纯Python编写的,因此执行效率不如MySQL-python,但可以和Python代码无缝衔接。
- MySQL Connector/Python:MySQL官方推出的使用纯Python连接MySQL的驱动。因为是纯Python开发的。效率不高。
安装 mysqlclient
$ pip install mysqlclient
$ pip install pymysql
Django配置数据库信息
在操作数据库之前,首先要连接数据库。Django连接数据库,不需要单独的创建一个连接对象,只需要在 settings.py
进行如下配置:
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# 数据库引擎(是mysql还是oracle等)
'ENGINE': 'django.db.backends.mysql',
# 数据库的名字
'NAME': 'django',
# 连接mysql数据库的用户名
'USER': 'root',
# 连接mysql数据库的密码
'PASSWORD': 'qweqwe',
# mysql数据库的主机地址
'HOST': '127.0.0.1',
# mysql数据库的端口号
'PORT': '3306'
}
}
Django操作数据库
在Django中操作数据库有两种方式,一种是使用原生sql语句操作,另一种就是使用ORM模型来操作。
执行原生SQL
在Django中使用原生sql语句操作,其实就是使用python db api的接口来操作。如果mysql驱动用的是pymysql,那么就是用pymysql来操作的。只不过Django将数据库连接的这一部分封装好了,我们只要在settings.py中配置好数据库连接信息后,直接使用Django封装好的接口就可以操作了。
# 使用django封装好的connection对象,会自动读取settings.py中数据库的配置信息
from django.http import HttpResponse
from django.db import connection
from pymysql import *
def index(request):
"""pymysql连接数据库方式"""
# con = connect(host='127.0.0.1', user='root', password='qweqwe', port=3306, database='django', charset='utf8')
"""Django中的connection连接数据库方式"""
# 获取游标对象
cursor = connection.cursor()
cursor.execute('select * from books')
# rows = cursor.fetchall() # 返回一个元组,((1, 'Python'), (2, 'Java'))
row = cursor.fetchone()
# rows = cursor.description
print(row)
print(cursor.rowcount)
# for row in rows:
# print(row)
return HttpResponse('测试数据库连接')
以上的execute以及fetchall方法,都是Python DB API规范中定义好的。任何使用Python来操作MySQL的驱动程序都应该遵循这个规范,所以不管是使用pymysql或者是mysqlclient或者是mysqldb,他们的接口都是一样的。
Python DB API规范cursor对象常用接口
- description:如果cursor执行了查询的sql代码。那么读取cursor.description属性的时候,将返回一个列表,这个列表中装的是元组,元组中装的分别是(name,type_code,display_size,internal_size,precision,scale,null_ok),其中name代表的是查找出来的数据的字段名称,其他参数暂时用处不大。
- rowcount:代表的是在执行了sql语句后受影响的行数。
- close:关闭游标。关闭游标以后就再也不能使用了,否则会抛出异常。
- execute(sql[,parameters]):执行某个sql语句。如果在执行sql语句的时候还需要传递参数,那么可以传给parameters参数。
- fetchone:在执行了查询操作以后,获取第一条数据。
- fetchmany(size):在执行查询操作以后,获取多条数据。具体是多少条要看传的size参数。如果不传size参数,那么默认是获取第一条数据。
- fetchall:获取所有满足sql语句的数据。