6DjangoORM模型类总的基础字段及字段选项
from pymysql impore install_as_MYSQLdb install_as_MYSQKdb()
或:
import pymysql
pymysql.install_as_MySQLdb()
练习:
1创建数据库:
mysql> create database mysite3 default character set utf8mb4 default collate utf8mb4_general_ci;
2在Django中配置数据库:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite3', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306' } }
ORM中,一个模型类就代表数据库中的一张表,模型类中的每一个类属性就是数据表里的每一个字段,
下面通过一个模型示例了解ORM与数据库的对应关系:
1添加一个bookstore的app
python manage.py startapp bookstore
2注册app:
INSTALLED_APPS = [ 'bookstore', ]
3在django中编写模型类:
解释:
书名:定义此注释后,DjangoAdmin后台会显示这个名字,不定义则会显示字段名:
DecimalField:和小数相关用到的类型,它有2个必须定义的参数,max_digits表示精度,decimal_places表示保留几位小数,例如:max_digits=7就表示总精度7个0,即:0000000
decimal_places=2就表示两位小数,即:00000.00
而00000.00就表示万元级别的,最高就是99999.99
class Book(models.Model): title = models.CharField("书名",max_length=50,default='') price = models.DecimalField('定价', max_digits=7,decimal_places=2,default=0.0)
4同步数据库:
python manage.py makemigrations #生成迁移文件 python manage.py migrate #执行迁移脚本
二,ORM基础字段:
BooleanField()布尔型:对应mysql数据库类型tinyint(1),在数据库中用1或0来表示True和False
CharField()字符串类型:对应数据库类型varchar,注意必须要指定max_length参数值
DateField()日期类型:对应数据库date表示日期,它有三个参数(只能有一个参数)分别是:
auto_now:每次保存对象时,自动设置该字段值为当前时间(取值True/False)
auto_now_add:当对象第一次被创建时,自动设置值为当前时间(取值True/False)
default:设置当前时间(取值:字符串格式时间例如:‘2021-11-27’)
理论上每张表都应该设置创建时间和更新时间,如下:
创建时间create_time:auto_now_add=True
更新时间update_time:auto_now=True
DateTimeField():对应数据库datetime(6),表示日期和时间,参数同DateField一样。
FloatField()浮点:对应的数据库类型时double,在编程语言中和数据库中都使用小数表示
DecimalField():对应数据库decimal(x,y)类型,凡是和钱相关的都使用这个类型,该字段有两个必须参数:
max_digits:位数总数,包括小数点后的位数,该值必须要大于等于decimal_places
decimal_places:小数点后的数字有多少位
EmailField():对应数据库类型varchar,存邮箱地址用的字段,编程语言和数据库使用字符串
IntegerField():对用数据库int类型
ImageField():对应数据库类型varchar(100),属于字符串类型,在数据库中用于保存图片路径
TextField():对应数据库longtext类型,表示不定长的字符数据
以上为常用的模型类字段,还有好多,请参阅官方文档:
https://docs.djangoproject.com/zh-hans/3.2/ref/models/fields/#field-types
三ORM模型字段选项:
primary_key:如果为True则表示该列设置成主键
blank:设置为True时,字段可以为空,如果设置为False,建议添加默认值default。
default:设置所在列的默认值,一般在新增字段的时候一定要给个默认值,否则程序可能会报错。如果字符选项出现null等于False的时候,建议都要设置一个默认值,但dajngo官方建议我们不要轻易使用null选项,因为这个选项在数据库中有特殊意义,容易为开发中增添很多坑。
db_index:普通索引,声明当前的字段是不是要添加索引,如果设置为True表示该列增加索引。
unique:表示唯一索引,如果为True则表示该字段在数据库中的值必须唯一
db_column:自定义字段名
verbose_name:设置此字段在admin界面上显示的名称
示例:
sender_phone = models.CharField(max_length=255, blank=False, null=True, db_index=True, verbose_name='寄件人电话') null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空,那么在新建一个model对象的时候是不会报错的!! blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填 db_index是建立普通索引
Meta类(控制表的相关属性):
使用内部Meta类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制。
1修改表名:
class Booke(models.Model): class Meta: db_table = 'book'

浙公网安备 33010602011771号