-
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。
- ORM是“对象-关系-映射”的简称。
翻译成相应的sql语句:
-
缺点: 消耗一定的时间
-
优点:可以更换引擎来翻译成不同的数据库语法
单表操作
-
ORM不能直接创建数据库,只能创建表
1. 创建模型
在models.py中创建模型:
from django.db import models class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) state = models.BooleanField() pub_date = models.DateField() price = models.DecimalField(max_digits=8, decimal_places=2) publish = models.CharField(max_length=32)
每个字段有一些特有的参数,还有一些适用于所有字段的通用参数:
2.setting配置
若想将模型转为mysql数据库中的表,需要在settings中配置:
DATABASES = { 'default':{ 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db1', # 要连接的数据库名称 'USER': 'root', # 连接数据库的用户名 'PASSWORD':'', # 连接数据库的密码 'HOST': '127.0.0.1', # 连接主机, 默认本地 'POST': 3306 # 端口 默认 3306 } }
-
NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库的用户名和密码。设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的init,在里面写入:
配置pymyqdb:(这个是默认py2中的链接方式)
migrations——>
__init__.py
:import pymysql pymysql.install_as_MySQLdb()
-
确保配置文件中的INSTALLED_APPS中写入我们创建的app名称
-
如果报错如下:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None
MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:
通过查找路径Python36-32Libsite-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql
这个路径里的文件把目标注释掉就可以了:
if version < (1, 3, 3): raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level': 'DEBUG', },
结果: 会生成django自带表(settings中的INSTALLED_APPS)
如果不加主键,django会默认加名叫id的主键
数据库迁移
-
django会把settings中的INSTALLED_APPS中的每一个应用中的modeles类创建成数据库中的表
创建数据库(models)
-
python manage.py makemigrations
python manage.py makemigrations
python manage.py migrate
与SQL的映射关系
-
类 ———— 表 名
-
类属性 ———— 表字段
-