<span>ORM字段操作</span>

django orm 建表字段

 在django modle 中,我们定义的类,他的对象就是数据库表中的一行数据!!!

               django orm 基础

一:modle的各个字段:

在python中以code first,所以在python中用类和对象,来调用底层数据库API来操作数据库。

1:创建数据库:

数据库配置写在:子应用的:modles.py配置文件中。

需要注意的时候app需要注册。在setting中。

默认情况下,使用的数据库是sqllite3.

创建类:

 
 1 from django.db import models  2  3 # Create your models here.  4 class Userinfo(models.Model):  5 '''  6  功能:该类主要功能是创建用户的信息表格。  7 '''  8 user=models.CharField(max_length=12)  9 password=models.CharField(max_length=40) 10 ipone_num=models.CharField(max_length=12) 11 12 13 class Hostinfo(models.Model): 14 ''' 15  功能:该类为用户录入主机数据表格。 16 ''' 17 host=models.CharField(max_length=32) 18 address=models.CharField(max_length=32,default="马驹桥机房") 19 ip=models.CharField(max_length=34) 20 stat=models.CharField(max_length=32) 21 prot=models.CharField(max_length=32) 22 service=models.CharField(max_length=32,default='商城业务') 23 department=models.CharField(max_length=32,default="应用运维") 24 mac_info=models.CharField(max_length=32,default="00-av-tv-cctv") 25 pingpai=models.CharField(max_length=32,default="IBM") 26 sn=models.CharField(max_length=32,default="dad13sda")
 

类中各个字段含义:

 
 1         1、models.AutoField  自增列 = int(11)  2   如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。  3 2、models.CharField  字符串字段  4    必须 max_length 参数  5 3、models.BooleanField  布尔类型=tinyint(1)  6   不能为空,Blank=True  7 4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar  8 input: 12,345,989871234 9 10    继承CharField,所以必须 max_lenght 参数 11 5、models.DateField  日期类型 date 12   对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。 13 6、models.DateTimeField  日期类型 datetime 14    同DateField的参数 15 7、models.Decimal  十进制小数类型 = decimal 16    必须指定整数位max_digits和小数位decimal_places 17 8、models.EmailField  字符串类型(正则表达式邮箱) =varchar 18    对字符串进行正则表达式 19 9、models.FloatField  浮点类型 = double 20 10、models.IntegerField  整形 21 11、models.BigIntegerField  长整形 22   integer_field_ranges = { 23     'SmallIntegerField': (-32768, 32767), 24     'IntegerField': (-2147483648, 2147483647), 25     'BigIntegerField': (-9223372036854775808, 9223372036854775807), 26     'PositiveSmallIntegerField': (0, 32767), 27     'PositiveIntegerField': (0, 2147483647), 28    } 29 12、models.IPAddressField  字符串类型(ip4正则表达式) 30 13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的) 31    参数protocol可以是:both、ipv4、ipv6 32    验证时,会根据设置报错 33 14、models.NullBooleanField  允许为空的布尔类型 34 15、models.PositiveIntegerFiel  正Integer 35 16、models.PositiveSmallIntegerField  正smallInteger 36 17、models.SlugField  减号、下划线、字母、数字 37 18、models.SmallIntegerField  数字 38   数据库中的字段有:tinyint、smallint、int、bigint 39 19、models.TextField  字符串=longtext 40 20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]] 41 21、models.URLField  字符串,地址正则表达式 42 22、models.BinaryField  二进制 43 44 23、models.ImageField 图片 字符串 45 24、models.FilePathField 文件 字符串
 

需要注意的是:

1 models.DateField  日期类型 date 对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。

 

根绝自己的需要来定义这个字段和使用相应的参数。

1 class Title(models.Model): 2 title=models.CharField(max_length=32) 3 add_date=models.DateField(auto_now=True)#表示该表进行数据的插入的时候时间,当前行的数据插入的时间。 4 update_date=models.DateField(auto_now_add=True)#表示该表的该行数据进行更新的时候,记录时间。

 

还有字段:models.ImageField  和、models.FilePathField在数据库中保存的是图片和文件的的路径。

默认情况下,如果我们不指定创建 自增列(主键)的话,在数据库中,默认会给我们创建一个名为:id的自增列。

更多参数:

 

 
 1 1、null=True  2   数据库中字段是否可以为空  3 2、blank=True  4   django的 Admin 中添加数据时是否可允许空值  5 3、primary_key = False  6   主键,对AutoField设置主键后,就会代替原来的自增 id 列  7 4、auto_now 和 auto_now_add  8   auto_now 自动创建---无论添加或修改,都是当前操作的时间  9   auto_now_add 自动创建---永远是创建时的时间 10 5、choices 11 GENDER_CHOICE = ( 12 (u'M', u'Male'), 13 (u'F', u'Female'), 14  ) 15 gender = models.CharField(max_length=2,choices = GENDER_CHOICE) 16 6、max_length 17 7、default  默认值 18 8、verbose_name  Admin中字段的显示名称 19 9、name|db_column  数据库中的字段名称 20 10、unique=True  不允许重复 21 11、db_index = True  数据库索引 22 12、editable=True  在Admin里是否可编辑 23 13、error_messages=None  错误提示 24 14、auto_created=False  自动创建 25 15、help_text  在Admin中提示帮助信息 26 16、validators=[] 27 17、upload-to 28 29 更多参数
 

 

 

 

可以给我们的列设置默认值。default=''

1 email = models.EmailField()            # string,帮助admin做输入验证,modelform

创建完,类,我们进行数据库的创建:执行如下2条命令!

1 python manage.py makemigrations 2 python manage.py migrate

choices:比如说性别:要么是男要么是女。如果有如下表:

 

 
1 class Gender(models.Model): 2 name=models.CharField(max_length=32) 3 4 class User_type(models.Model): 5 user_type=models.CharField(max_length=32) 6 nid=models.AutoField(primary_key=True) 7 phone_num=models.IntegerField() 8 phone_num_1=models.IntegerField() 9 gender=models.ForeignKey('Gender')
 

 

 

 

因为性别是不会改变的。如果按如上的操作,用户类型和性别表建立多对一的情况,那么在我们查询的时候,会给数据库增加压力,这时候我们可以考虑用choices。用元组来表示这个字段,用0、1来表示性别。用内存储存的元组的来

减少表的跨表查询。

 

 
 1 gender_choices=(  2 (0,''),  3 (1,''),  4 )  5  6 class User_type(models.Model):  7 user_type=models.CharField(max_length=32)  8 nid=models.AutoField(primary_key=True)  9 phone_num=models.IntegerField() 10 phone_num_1=models.IntegerField() 11 gender=models.IntegerField(choices=gender_choices)#前端页面显示的是男女,而实际上数据库记录的是:0和1,减少数据库的连表操作。
 

 

 

 

2:django中如果我们想修改,表结构,比如增加一个列,在之前的sqlalchemy中只能借助于第三的模块或者工具,但是在django中,不需要。只需要再执行如下命令既可修改表结构:

1 1 python manage.py makemigrations 2 2 python manage.py migrate

但是在执行如下的命令的时候,需要在对应的类(表)中设置相应的default的值。否则会报错。需要注意的是:报如下错误,前提是该数据库已经插入数据!!!否则不会报错。

解决方法:在相应的类中增加的列的中,填写默认数据:default="值",在运行命令的时候不会报错。

1 class Title(models.Model): 2 title=models.CharField(max_length=32) 3 add_date=models.DateField(auto_now_add=True)#表示该表进行数据的插入的时候时间,当前行的数据插入的时间。 4 update_date=models.DateField(auto_now=True)#表示该表的该行数据进行更新的时候,记录时间。 5 content=models.CharField(max_length=200,default="大话西游,永恒的经典!")

 

1 Hostinfo.objects.filter(id=val).values(id) 2 Hostinfo.objects.filter(id=val).value_list(id,email)

value:获取结果不是对象的列表的集合。内部小元素是字典,而是列表中嵌套字典。[{'id':2},{'id':1}]

valuelist:是获取元组的集合内嵌套元组,内部小元素是元组。((2,'1@qq.com'),(1,'2@qq.com'))              

 

学习是一种态度,坚持是质变的利器!
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务