python+Django(3)—mysql数据库

背景

目前大多数的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即可

你可能感兴趣的:(python+Django(3)—mysql数据库)