ORM
对象关系映射表(Object Relation Mapping),基于ORM Python类操作数据库的表。
Django的ORM只能在Django使用,这里ORM是Django中独有的ORM。
Django通过类操作数据库的表,一个类相当于一张表。一个实例相当于一条记录
实例
1 | class Emp(): |
Django数据库配置
Django支持sqlite,mysql,oracle,postgresql数据库
Django默认使用sqlite数据库,默认自带sqlite数据库驱动,引擎名称
django.db.backends.sqlite3
如果使用mysql需要修改引擎名称
django.db.backends.mysql
在python2中使用MySQLdb,在python3中使用PyMySQL
1 | #在django项目中默认使用sqlite数据库,在setting里面有如下配置: |
Django创建表
实例
1 | #1.创建app下的models.py文件 |
ORM优点:
如果项目后期更换数据库时,直接改下驱动,而不需要修改SQL语句
如果是源生SQL语句,后期更换数据库还需要转换语法等信息
但是源生SQL语句效率比ORM高,ORM需要转化源生SQL
原生SQL使用
1 | pip install PyMySQL |
Django数据库操作日志
1 | 方法1: |
ORM操作
表记录添加数据,一个类对应一张表,如何对表进行修改呢?通过实例化来修改,实例化一个对象就是一条记录
增
1 | class Book(models.Model): |
删
1 | def delbook(request): |
改
1 | 比如修改某本书价格 |
查
1 | filter(**kwargs) |
查询结果过滤
1 | values(*field) |
示例
1 | book_list = Book.objects.all() |
模糊查询
1 | book_list = Book.objects.filter(price__gt=150).value("book_name","price"); |
ORM多表操作
表与表的之间的关系
一对多,一个表与另外一个表关联,另一个表可以对应这个表的多条记录
多对多,需要三张表,其中一个表记录 表A 和 表B 的两个关系。
一对一,通常用作详细页,自关联
一对多
ForeignKey
1 | class Book(models.Model): |