MySQL数据库

在网站开发中,数据库是网站的重要组成部分。只有提供数据库,数据才能够动态的展示,而不是在网页中显示一个静态的页面。数据库有很多,比如有SQL ServerOraclePostgreSQL以及MySQL等等。MySQL由于价格实惠、简单易用、不受平台限制、灵活度高等特性,目前已经取得了绝大多数的市场份额。因此我们在Django中,也是使用MySQL来作为数据存储。

关于如何安装MySQL,可以看以下教程:
https://www.bilibili.com/video/BV12q4y1477i

Navicat数据库操作软件:

安装完MySQL数据库以后,就可以使用MySQL提供的终端客户端软件来操作数据库。但这个软件所有的操作都是基于sql语言,对于想要熟练sql语言的同学来讲是非常合适的。

但是对于在企业中可能不是一款好用的工具。在企业中我们推荐使用mysql workbench以及navicat这种图形化操作的软件。而mysql workbenchmysql官方提供的一个免费的软件,正因为是免费,所以在一些功能上不及收费的navicat

Navicat官网:https://www.navicat.com.cn/products
破解教程:https://www.bilibili.com/video/BV1KU4y1F7r9

当然了,如果你是土豪,还请一定支持正版,每个公司都不容易。。。

MySQL驱动程序安装:

我们使用Django来操作MySQL,实际上底层还是通过Python来操作的。因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序。在Python3中,驱动程序有多种选择。比如有pymysql以及mysqlclient等。

常见MySQL驱动介绍:

  1. MySQL-python:也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2。但是只支持Python2,目前还不支持Python3
  2. mysqlclient:是MySQL-python的另外一个分支。支持Python3并且修复了一些bug
  3. pymysql:纯Python实现的一个驱动。因为是纯Python编写的,因此执行效率不如MySQL-python。并且也因为是纯Python编写的,因此可以和Python代码无缝衔接。
  4. MySQL Connector/PythonMySQL官方推出的使用纯Python连接MySQL的驱动。因为是纯Python开发的。效率不高。

这里我们就使用mysqlclient来操作。mysqlclient安装非常简单。只需要通过pip install mysqlclient即可安装:

  1. pip install mysqlclient

Django配置连接MySQL:

在操作数据库之前,首先先要连接数据库。这里我们以配置MySQL为例来讲解。Django连接数据库,不需要单独的创建一个连接对象。只需要在settings.py文件中做好数据库相关的配置就可以了。示例代码如下:

  1. # settings.py
  2. DATABASES = {
  3. 'default': {
  4. # 数据库引擎(是mysql还是oracle等)
  5. 'ENGINE': 'django.db.backends.mysql',
  6. # 数据库的名字
  7. 'NAME': 'dfz',
  8. # 连接mysql数据库的用户名(这里填你的用户名)
  9. 'USER': 'root',
  10. # 连接mysql数据库的密码(这里填你的密码)
  11. 'PASSWORD': 'root',
  12. # mysql数据库的主机地址
  13. 'HOST': '127.0.0.1',
  14. # mysql数据库的端口号
  15. 'PORT': '3306',
  16. }
  17. }

操作数据库-使用原生SQL

在Django中操作数据库:

Django中操作数据库有两种方式。第一种方式就是使用原生sql语句操作,第二种就是使用ORM模型来操作。这节课首先来讲下第一种。

Django中使用原生sql语句操作其实就是使用python db api的接口来操作。如果你的mysql驱动使用的是pymysql,那么你就是使用pymysql来操作的,只不过Django将数据库连接的这一部分封装好了,我们只要在settings.py中配置好了数据库连接信息后直接使用Django封装好的接口就可以操作了。示例代码如下:

  1. # 使用django封装好的connection对象,会自动读取settings.py中数据库的配置信息
  2. from django.db import connection
  3. # 获取游标对象
  4. cursor = connection.cursor()
  5. # 拿到游标对象后执行sql语句
  6. cursor.execute("select * from book")
  7. # 获取所有的数据
  8. rows = cursor.fetchall()
  9. # 遍历查询到的数据
  10. for row in rows:
  11. print(row)

以上的execute以及fetchall方法都是Python DB API规范中定义好的。任何使用Python来操作MySQL的驱动程序都应该遵循这个规范。所以不管是使用pymysql或者是mysqlclient或者是mysqldb,他们的接口都是一样的。更多规范请参考:https://peps.python.org/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参数。示例代码如下:
    1. cursor.execute("select * from article where id=%s",(1,))
  1. fetchone:在执行了查询操作以后,获取第一条数据。
  2. fetchmany(size):在执行查询操作以后,获取多条数据。具体是多少条要看传的size参数。如果不传size参数,那么默认是获取第一条数据。
  3. fetchall:获取所有满足sql语句的数据。