背景
目前大多数的web页面需要与mysql进行交互,需要把后端的一些数据存放在数据库中,故本文讲解哈Django与mysql进行交互的一些操作步骤。
数据库层
1.视图逻辑需要与数据库进行交互,故需要用到Django的数据库层将数据库和视图逻辑进行分离,提高代码的可扩展性。
PS.Django本身有严格的约定,想要使用Django的数据库层(模型),必须创建Django应用,模型需要保存在应用中。
2.具体交互步骤
1)修改settings.py文件DATABASES的值
DATABASES =
{ 'default':
{ 'ENGINE': 'django.db.backends.mysql', # 指定数据库驱动
'NAME': 'XXXX', # 指定的数据库名
'USER': 'XXXX', # 数据库登录的用户名
'PASSWORD': 'XXXX', # 登录数据库的密码
'HOST': 'XXXX',
'PORT': '3306', # 数据库服务器端口,mysql默认为3306 } }
2)python 3.6之前的版本需安装第三方库MySQLdb,python3.6后的版本需安装pymysql
3)项目目录下创建polls应用,执行指令python manage.py startapp polls
4)poll应用中的models.py文件中创建class类,注:这些类都是models.Model的子类,一个模型对应于一个数据库表,模型中的各个属性分别对应于数据库表中的一列。【属性的名称对应于列的名称,字段的类型对应于数据库列的类型】
5)在INSTALLED_APPS中增加新增了poll应用 INSTALLED_APPS= ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'books', )
6)运行python manage.py check检查模型代码有无异常,返回System check identified no issues (0 silenced)代表成功
7)执行python manage.py makemigrations polls
8)执行python manage.py migrate就可以在mysql数据库中看见新建的表了
注:当前整个步骤针对的是新建数据库记录,但实际日常使用中还存在已有数据库的情况下,需要做好相关关联的场景,此时可调整哈一些步骤,具体实现见如下说明:
1)python manage.py inspectdb --database 已有数据库名 > polls/models.py
2)python manage.py makemigrations polls
3)python manage.py migrate
数据库增删改查
关于对数据库进行增删改查操作可类比mysql语句,不过需要借助get()和filter()方法来达到目标
汇总关联数据库的一些问题及解决方案
1.执行python manage.py makemigrations polls时出现错误提示说明:django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0002_logentry_remove_auto_add is applied before its dependency admin.0001_initial on database 'default'.
解决方案:
1)注释掉setting文件中INSTALLED_APPS中的 #'django.contrib.admin'
2)注释掉urls文件中urlpatterns中的 #url('admin/', admin.site.urls)
3)再去执行python manage.py makemigrations polls就不会报错了
4)建完数据库之后恢复步骤1&2的注释
2.新建一个应用,执行python manage.py migrate时,总是报错:xxx表已存在
解决方案:
1)执行python manage.py migrate polls --fake
2)再执行python manage.py makemigrations polls和python manage.py migrate即可