背景
Django框架功能齐全自带数据库操作功能,由于工作中设计巨量的api接口,需要一个很好的web后端服务框架,Django给了莫大的帮助。本文主要介绍Django的ORM框架
我们一般对数据库的使用的认识是:
- 创建数据库,设计表结构和字段
- 使用 MySQLdb 来连接数据库,并编写数据访问层代码
- 业务逻辑层去调用数据访问层执行数据库操作
ORM是什么?
ORM:Object Relational Mapping(关系对象映射),在django中,根据代码中的类自动生成数据库的表也叫--code first。
- 类名对应------》数据库中的表名
- 类属性对应---------》数据库里的字段
- 类实例对应---------》数据库表里的一行数据
- obj.id obj.name.....类实例对象的属性
Django ORM的优势:
Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可。
总的来说,Django的ORM 在设计初已经考虑了大量web设计中数据库操作的共有需求,配置好数据库后,就可以像使用变量模型一样操作数据库中数据。
一、数据库配置(MySQL)
1、创建数据库 (注意设置 数据的字符编码)
由于Django自带的orm是data_first类型的ORM,使用前必须先创建数据库
2、修改project中的settings.py文件中设置 连接 MySQL数据库(Django默认使用的是sqllite数据库)
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME':'you mysql db name ','USER': 'user name','PASSWORD': 'password','HOST': 'your mydql db host','PORT': 'your mysql db port',}
}
扩展:查看orm操作执行的原生SQL语句,在project中的settings.py文件增加。
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},}
}
3、由于Django2.X后只支持python3,而目前MySQLdb对python3没有支持,所以需要使用pymysql,在django项目中修改project 中的__init__py 文件设置 Django默认连接MySQL的方式
import pymysql
pymysql.install_as_MySQLdb()
4、setings文件注册APP
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config',]
注册APP后,Django会根据APP的名称等生成并使用表/库。Django中数据库必须有非空主键,而且如果没有声明,所有的字段都会默认设计成非空。
- 按照规则在models.py模块中设计表。
- 数据迁移操作。
python manage.py makemigrations #根据app下的migrations目录中的记录,检测当前model层代码是否发生变化?
python manage.py migrate #把orm代码转换成sql语句去数据库执行
python manage.py migrate --fake #只记录变化,不提交数据库操作
注:由于所有字段都默认是非空,所以在增加字段时会报错,
解决办法是增加:null=Ture,声明。