在djangomodle中,我们定义的类,他的对象就是数据库表中的一行数据!!!
djangoorm基础
一:modle的各个字段:
在python中以codefirst,所以在python中用类和对象,来调用底层数据库API来操作数据库。
1:创建数据库:
数据库配置写在:子应用的:modles.py配置文件中。
需要注意的时候app需要注册。在setting中。
默认情况下,使用的数据库是sqllite3.
创建类:
1fromdjango.dbimportmodels23#Createyourmodelshere.4classUserinfo(models.Model):5'''6功能:该类主要功能是创建用户的信息表格。7'''8user=models.CharField(max_length=12)9password=models.CharField(max_length=40)10ipone_num=models.CharField(max_length=12)111213classHostinfo(models.Model):14'''15功能:该类为用户录入主机数据表格。16'''17host=models.CharField(max_length=32)18address=models.CharField(max_length=32,default="马驹桥机房")19ip=models.CharField(max_length=34)20stat=models.CharField(max_length=32)21prot=models.CharField(max_length=32)22service=models.CharField(max_length=32,default='商城业务')23department=models.CharField(max_length=32,default="应用运维")24mac_info=models.CharField(max_length=32,default="00-av-tv-cctv")25pingpai=models.CharField(max_length=32,default="IBM")26sn=models.CharField(max_length=32,default="dad13sda")类中各个字段含义:
根绝自己的需要来定义这个字段和使用相应的参数。
还有字段:models.ImageField和、models.FilePathField在数据库中保存的是图片和文件的的路径。
默认情况下,如果我们不指定创建自增列(主键)的话,在数据库中,默认会给我们创建一个名为:id的自增列。
更多参数:
可以给我们的列设置默认值。default=''
1email=models.EmailField()#string,帮助admin做输入验证,modelform创建完,类,我们进行数据库的创建:执行如下2条命令!
1pythonmanage.pymakemigrations2pythonmanage.pymigratechoices:比如说性别:要么是男要么是女。如果有如下表:
1classGender(models.Model):2name=models.CharField(max_length=32)34classUser_type(models.Model):5user_type=models.CharField(max_length=32)6nid=models.AutoField(primary_key=True)7phone_num=models.IntegerField()8phone_num_1=models.IntegerField()9gender=models.ForeignKey('Gender')
因为性别是不会改变的。如果按如上的操作,用户类型和性别表建立多对一的情况,那么在我们查询的时候,会给数据库增加压力,这时候我们可以考虑用choices。用元组来表示这个字段,用0、1来表示性别。用内存储存的元组的来
减少表的跨表查询。
1gender_choices=(2(0,'男'),3(1,'女'),4)56classUser_type(models.Model):7user_type=models.CharField(max_length=32)8nid=models.AutoField(primary_key=True)9phone_num=models.IntegerField()10phone_num_1=models.IntegerField()11gender=models.IntegerField(choices=gender_choices)#前端页面显示的是男女,而实际上数据库记录的是:0和1,减少数据库的连表操作。
2:django中如果我们想修改,表结构,比如增加一个列,在之前的sqlalchemy中只能借助于第三的模块或者工具,但是在django中,不需要。只需要再执行如下命令既可修改表结构:
11pythonmanage.pymakemigrations22pythonmanage.pymigrate但是在执行如下的命令的时候,需要在对应的类(表)中设置相应的default的值。否则会报错。需要注意的是:报如下错误,前提是该数据库已经插入数据!!!否则不会报错。
解决方法:在相应的类中增加的列的中,填写默认数据:default="值",在运行命令的时候不会报错。
1Hostinfo.objects.filter(id=val).values(id)2Hostinfo.objects.filter(id=val).value_list(id,email)value:获取结果不是对象的列表的集合。内部小元素是字典,而是列表中嵌套字典。[{'id':2},{'id':1}]
valuelist:是获取元组的集合内嵌套元组,内部小元素是元组。((2,'1@qq.com'),(1,'2@qq.com'))