ORM介绍
全称Object Relational Mapping,中文名叫对象关系映射,通过ORM可以通过类去操作数据库,而不用使用原生SQL语句。通过把表映射成类,把字段映射成属性,最终还是会转化为原生SQL语句。
Navicat与MySql8.0建立连接时报错
创建和映射
- 在app下的models中创建models.Model的子类,添加需要的属性。
- 在虚拟环境下执行python manage.py makemigrations,生成迁移脚本文件。
- 使用python manage.py migrate将生成的迁移脚本文件映射到数据库中。
简单的增删改查
-
添加:创建一个要添加数据的实例,实例命.save()。
-
查询:
模型名.objects.get(pk=主键值),根据主键获取一条信息。
模型名.objects.filter(筛选条件),选取满足所有条件的信息,如果使用.first()则是查询第一个满足条件的数据。 -
删除:实例命.delete()。
-
修改数据:先查询,修改对应值,再使用.save()。
模型常用字段
- AutoField:映射到数据库中是一个int类型,又自增长的性质,一般用做主键,在参数里写入primary_key=True。
- BigAutoField:64位整形,类似于AutoField。
- BooleanField:在模型层面接受的是True/False。在数据库层面是tinyint类型。如果没有指定默认值,默认值是None。
- CharField:在数据库层面是varchar,在python层面就是普通的字符串,定义时必须指定最大长度,也就是传入参数max_length。字符长度超过254个建议使用TextField。
- DateField:在python中是datetime.date类型,可记录年月日。映射到数据库中是date类型。auto_now=True参数保存当前时间;auto_now_add参数,记录数据被第一次添加的时间。
- DateTimeField:类似于DateField,但可以存储时间,也可使用上述两个参数。
- TimeField:时间类型,在数据库中是time类型,在Python中是datetime.time类型。
- EmailField:类似于CharField,在数据库也是varchar类型,默认最大长度是254。
- FloatField,IntegerField,BigIntegerField,PositiveIntegerField,SmallIntegerField,PositiveSmallIntegerField。
- TextField: 在数据库中是longtext,可以存储任意长度的数据。
- UUIDField:只能存储UUID格式的字符串,一般用作主键。
- URLField:类似于CharField,只能用来存储url格式的字符串,默认长度200。
- 选中一个字段类型,Ctrl+b,可以查看所有类型。
Field中常用的参数
- null:如果设置为True,Django将会在映射的时候指定是否为空,默认为False,在使用字符串型的Field时尽量不要使用这个参数。
- blank:标识这个字段在表单验证时是否可以为空,默认为False,null是数据库级别的,blank是表单验证级别的。
- db_column:可以改变映射到数据库时的名字。
- default:指定初始值。
- primary_key:是否为主键,默认为False。
- unique:在表中这个字段是否为唯一的,一般是设置手机号或者邮箱。