1>ORM简介
ORM是“对象-关系-映射”的简称。它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的
数据库,通过简单的配置就可以轻松更换数据库。
一张图看下他们的对应关系
从上图就可以简要的看出来:数据库中的一个表,再Python这边就相当于一个类,表里面的一条条记录就是类实例出来的
对象,对象的属性对应的就是记录里面的数据,删除一条记录就等同于删除一个对象等。
2>表单操作
创建一个app,在app下面的models.py中创建模型。如下:
稍微看下字段和参数:
---> CharField: 用于较短的字符串.要求必须有一个参数 maxlength,限制该字段的最大字符数.
---> IntegerField :用于保存一个整数.
---> FloatField :一个浮点数. 必须 提供两个参数:max_digits 总位数,decimal_places 小数位数
--->AutoField: 一个 IntegerField, 添加记录时它会自动增长
--->BooleanField:A true/false field
---> DateField: 一个日期字段,额外的可选参数有auto_now(当对象被保存时,自动将该字段的值设置为当前时间)
其他还有
---> TextField: 一个容量很大的文本字段.
---> EmailField: 一个带有检查Email合法性的 CharField,不接受 maxlength 参数.
---> DateTimeField: 一个日期时间字段. 类似 DateField 支持同样的附加选项.
---> FileField:一个文件上传字段.要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径.
---> ImageField:类似 FileField, 不过要校验上传对象是否是一个合法图片.#它有两个可选参数:height_field和width_field,
如果提供这两个参数,则图片将按提供的高度和宽度规格保存.
---> URLField:用于保存 URL.
---> NullBooleanField:类似 BooleanField, 不过允许 NULL 作为其中一个选项.
---> XMLField:一个校验值是否为合法XML的 TextField,必须提供参数: schema_path,
---> IPAddressField:一个字符串形式的 IP 地址
等等,就不一一列名了, 以后碰到再详解
参数:
(1)null
如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
(2)blank
如果为True,该字段允许不填。默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。
(3)default
字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
(4)primary_key
如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
否则没必要设置任何一个字段的primary_key=True。
(5)unique
如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
(6)choices
由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单
将是一个选择框而不是标准的文本框,
而且这个选择框的选项就是choices 中的选项。
3>settings配置
若想将模型转为mysql数据库中的表,需要在settings中配置:
注意点1,启动项目,若是报少模块MySQLdb ,就在项目的init文件中,加入如下代码。
然后通过两条数据库迁移命令即可在指定的数据库中创建表,如下
python manage.py makemigrations
python manage.py migrate
查看数据库,创建了很多表,暂时不要管,那是Django创建的,我们先看我们自己创建的book表
注意2: 如果想打印orm转换过程中的sql,需要在settings中进行如下配置:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
4>记录的增/删/改/查
增加表记录
方法1:
方法2: