ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## ORM django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM) django中遵循 `Code Frist` 的原则,即:根据代码中定义的类来自动生成数据库表。 需要使用`django.db`中的`models`模块 ``` from django.db import models class userinfo(models.Model): name = models.CharField(max_length=30) email = models.EmailField() memo = models.TextField() user_group = models.ForeignKey(to='UserGroup', to_field='id', default=1) class UserGroup(models.Model): # id列,默认创建自增 # 用户名 字符串 长度 id = models.AutoField(primary_key=True) groupname = models.CharField(max_length=32) ``` >[danger]外键 user_group = models.ForeignKey(to='', to_field=''),此处外键的字段名为user_group,实际上在数据库生成的字段名为user_group_id,以后数据更新时,可以直接操作这个字段。 外键会自动生成索引,便于查询,其他字段字段使用db_index=True创建索引。 ## 可定义的数据类型 ### 数字型 ``` models.AutoField   # 自增列<==>int() 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。 models.BooleanField   # 布尔类型=tinyint(1) 不能为空,blank=True models.NullBooleanField # 允许为空的布尔类型 models.Decimal  十进制小数类型 = decimal 必须指定整数位max_digits和小数位decimal_places models.FloatField   # 浮点类型 = double models.IntegerField   # 整形 models.BigIntegerField  # 长整形 integer_field_ranges = { 'SmallIntegerField': (-32768, 32767), 'PositiveSmallIntegerField': (0, 32767), 'IntegerField': (-2147483648, 2147483647), 'PositiveIntegerField': (0, 2147483647), 'BigIntegerField': (-9223372036854775808, 9223372036854775807), } ``` ### 时间日期型 ``` models.DateField   # 日期类型 date auto_now = True 则每次更新都会更新这个时间; auto_now_add 则只是第一次创建添加,之后的更新不再改变。 models.DateTimeField  # 日期类型 datetime 同DateField的参数 models.TimeField   # 时间 HH:MM[:ss[.uuuuuu]] ``` ### 文本型 ``` models.CharField  # 字符串字段 models.TextField  # 字符串=longtext models.ComaSeparatedIntegerField  用逗号分割的数字=varchar 继承CharField,所以必须 max_lenght 参数 ``` ### 特殊类型 ``` models.EmailField  字符串类型(正则表达式邮箱) =varchar 对字符串进行正则表达式 models.URLField  字符串,地址正则表达式 models.IPAddressField   # 字符串类型(ip4正则表达式) models.GenericIPAddressField   # 字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 models.ImageField # 图片 models.FilePathField # 文件 models.SlugField   # 减号、下划线、字母、数字 models.BinaryField   # 二进制 ``` ### 更多字段参数 ~~~ # 常用 null=True # 数据库中字段是否可以为空 primary_key = False # 主键,对AutoField设置主键后,就会代替原来的自增 id 列 unique=True   # 不允许重复 db_index = True   # 数据库索引 max_length # 最大字符长度 default   # 默认值 # 日期相关 auto_now 和 auto_now_add auto_now # 自动创建---无论添加或修改,都是当前操作的时间 auto_now_add # 自动创建---永远是创建时的时间 # choices 用于不会变动的信息,如性别,经常变动的如改变需要重启服务 GENDER_CHOICE = ( (u'M', u'Male'), (u'F', u'Female'), ) gender = models.CharField(max_length=2,choices = GENDER_CHOICE) name|db_column   # 数据库中的字段名称 # 帮助相关 auto_created=False   # 自动创建 validators=[] upload-to ~~~ ### admin相关 ~~~ blank=True # Admin 中添加数据时是否可允许空值 help_text   # 在Admin中提示帮助信息 error_messages=None   # 错误提示 verbose_name   # 在Admin中字段的显示名称 editable=True   # 在Admin里是否可编辑 ~~~