这一部分算是一个过渡的部分,内容相比于前三部分来说,会少一些,主要是讲讲数据库的安装以及基本的有关数据库的操作。
1. MySQL驱动程序安装
我们使用Django来操作MySQL,实际上底层还是通过Python来操作的。因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序。
在Python3中,驱动程序有多种选择:
- pymysql
纯Python实现的一个驱动。因为是纯Python编写的,因此执行效率不如MySQL-python。并且也因为是纯Python编写的,因此可以和Python代码无缝衔接。 - mysqlclient
是MySQL-python的另外一个分支。支持Python3 并且修复了一些bug。 - MySQL-python
也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2
但是只支持Python2,目前还不支持Python3。 - MySQL Connector/Python
MySQL官方推出的使用纯Python连接MySQL的驱动。因为是纯Python开发的。效率不高。
这里我们就使用mysqlclient来操作
mysqlclient安装非常简单,只需要通过pip install mysqlclient即可安装:
这里需要注意的是,我们要在虚拟环境中安装:
2. Django配置连接数据库
在操作数据库之前,首先先要连接数据库。这里我们以配置MySQL为例来讲解。
Django连接数据库,不需要单独的创建一个连接对象。只需要在settings.py文件中做好数据库相关的配置就可以了:
这是默认的配置,ENGINE是数据库引擎,我们可以在以下目录找到Django支持的数据库引擎:
因为这里我们使用的是MySQL,所以这里改成:
'ENGINE': 'django.db.backends.mysql'
下面我们需要根据自己的数据库来配置,在这之前,我们打开MySQL,并创建一个数据库
启动phpStudy:
如果是第一次使用,需要配置连接:
测试连接成功即可进入界面:
新建数据库:
因此name的配置如下:
'NAME': 'django_db'
当然还有一些数据库的密码、端口什么的也需要进行配置,配置如下:
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
'default': {
# 数据库引擎(是mysql还是oracle等)
'ENGINE': 'django.db.backends.mysql',
# 数据库的名字
'NAME': 'django_db',
# 连接mysql数据库的用户名
'USER': 'root',
# 连接mysql数据库的密码
'PASSWORD': 'root',
# mysql数据库的主机地址
'HOST': '127.0.0.1',
# mysql数据库的端口号
'PORT': '3306',
}
}
配置好后,运行manage.py,如果配置错误,是不会报错的,只有在操作数据库时才会报错
3. 在Django中操作数据库
下面新建一个名为book的app,我们在book里操作数据库:
在项目下的urls.py文件里做映射:
接着在book里新建urls.py并补充映射的代码:
在book\views.py里补充对应得方法:
运行的时候,这里报了一个错:
可以查看这篇文章:
https://blog.csdn.net/linhai1028/article/details/80300241
处理好后便可以运行了:
在Django中操作数据库有两种方式。第一种方式就是使用原生sql语句操作,第二种就是使用ORM模型来操作。
在Django中使用原生sql语句操作其实就是使用python db api的接口来操作。如果你的mysql驱动使用的是pymysql,那么你就是使用pymysql来操作的,只不过Django将数据库连接的这一部分封装好了,我们只要在settings.py中配置好了数据库连接信息后直接使用Django封装好的接口就可以操作了
为了操作数据库,这里我们还需要新建一张数据表:
然后我们手动创建几条数据:
下面我们回到views.py:
from django.shortcuts import render
from django.http import HttpResponse
# 使用django封装好的connection对象,会自动读取settings.py中数据库的配置信息
from django.db import connection
# Create your views here.
def book(request):
# 获取游标对象
cursor = connection.cursor()
# 拿到游标对象后执行sql语句
cursor.execute("select * from book")
# 获取所有的数据
rows = cursor.fetchall()
# 遍历查询到的数据
for row in rows:
print(row)
return HttpResponse(