6DjangoORM模型类总的基础字段及字段选项

一,熟悉DjangoORM模型层:

django使用mysql数据库首先需要安装pymysql驱动和mysqlclient,然后还需在django工程同名的子目录init.py文件中添加如下语句,即:让pymysql以MYSQLdb的运行模式和django的ORM对接运行

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'

 

 

posted @ 2021-11-27 14:28  linuxTang  阅读(100)  评论(0)    收藏  举报