在 Django 中操作数据库有两种方式。第一种方式就是使用原生sql语句操作,第二种就是使用 ORM模型来操作。这里介绍第一种。


Python 操作 MySQL 数据库

Python 标准数据库接口为Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。

不同的数据库需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。

Python DB-API使用流程:
  • 引入 API 模块。
  • 获取与数据库的连接。
  • 执行SQL语句和存储过程。
  • 关闭数据库连接。
什么是MySQLdb?

MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。安装MySQLdb? 参考: https://blog.csdn.net/jiduochou963/article/details/86767470

Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 
>>> import MySQLdb

# 打开数据库连接
>>> db = MySQLdb.connect("127.0.0.1", "root", "123456", "django_test", charset='utf8')

# 使用cursor()方法获取操作游标 
>>> cursor = db.cursor()

# 使用execute方法执行SQL语句
>>> cursor.execute("SELECT * FROM django_migrations")
15

# 使用 fetchone() 方法获取一条数据
>>> data = cursor.fetchone()
>>> print("data: ", data)
data:  (1, 'contenttypes', '0001_initial', datetime.datetime(2019, 2, 11, 1, 25, 32, 738504))

# 关闭数据库连接
>>> db.close()
>>> 

Django 操作 MySQL 数据库

在 Django 中使用原生 sql 语句操作其实就是使用Python DB-API的接口来操作。如果你的 mysql 驱动使用的是 mysqlclient,那么你就是使用mysqlclient 来操作的(这取决于你安装的驱动),只不过 Django 将数据库连接的这一部分封装好了,我们只要在 settings.py 中配置好了数据库连接信息后直接使用 Django 封装好的接口就可以操作了。

示例代码如下:

# 使用django封装好的connection对象,会自动读取settings.py中数据库的配置信息
from django.db import connection

# 获取游标对象
cursor = connection.cursor()

# 拿到游标对象后执行sql语句
cursor.execute("select * from book")

# 获取所有的数据
rows = cursor.fetchall()

# 遍历查询到的数据
for row in rows:
	print(row)

以上的 execute 以及 fetchall 方法都是 Python DB API 规范中定义好的。任何使用 Python 来操作 MySQL 的驱动程序都应该遵循这个规范。所以不管是使用 pymysql 或者是 mysqlclient 或者是 mysqldb ,他们的接口都是一样的。更多规范请参考: https://www.python.org/dev/peps/pep-0249/

Python DB API规范下cursor对象常用接口:

1、description: 如果 cursor 执行了查询的 sql 代码。那么读取 cursor.description 属性的时候,将返回一个列表,这个列表中装的是元组,元组中装的分别是 (name,type_code,display_size,internal_size,precision,scale,null_ok) ,其中 name 代表的是查找出来的数据的字段名称,其他参数暂时用处不大。

2、rowcount: 代表的是在执行了 sql 语句后受影响的行数。

3、close: 关闭游标。关闭游标以后就再也不能使用了,否则会抛出异常。

4、execute(sql[,parameters]): 执行某个 sql 语句。如果在执行 sql 语句的时候还需要传递参数,那么可以传给 parameters 参数。示例代码如下:

cursor.execute("select * from article where id=%s",(1,))

5、fetchone: 在执行了查询操作以后,获取第一条数据。

6、fetchmany(size): 在执行查询操作以后,获取多条数据。具体是多少条要看传的 size 参数。如果不传 size 参数,那么默认是获取第一条数据。

7、fetchall: 获取所有满足 sql 语句的数据。


参考:
Python 操作 MySQL 数据库 http://www.runoob.com/python/python-mysql.html