django之ORM数据操作

ORM创建表的时候,不创建主键的时候,自动创建一个主键id

浮点型:
DecimalField(max_digits=5,decimal_places=2) --> 一共五位数,两位小数
DoubleField(max_digits=5,decimal_places=2) --> 一共五位数,两位小数

创建外键:创建外键的时候,xxx不用加id,自动创建xxx_id
A与B关联,A中创建一下关系的时候
直接写表名,也可以,不用加to,要加引号
一对一:
xxx = models.OneToOneField(to="要关联的表",to_filed="要关联的字段")

一对多:
xxx = models.ForeignKey(to="要关联的表",to_filed="要关联的字段") 要关联的字段默认是要关联的表的id

多对多:表名是根据创建字段的表名和字段名拼接的,但是创建字段的表中不会增加字段
反向的多对多查询的时候,字段的拼接是表名+_set
xxx = models.ManyToManyField(to='要关联的表',to_filed="要关联的字段")  


添加数据,查询数据:
一对多:
xxx是和A中对象关联的B中对象,一对多的时候只能xxx是一个对象
方式1
赋值的时候,要先找到对应的B的models对象,然后把这个对象赋值给xxx,表中的xxx_id会自动赋值对应的models对象的id
方式2
赋值的时候,直接给xxx_id赋值

查询:
A.xxx --> 和A中对象关联的B中对象
A.xxx.id/name... --> 和A中对象关联的B中对象的信息


多对多:
A B,C是A,B的关联表(Django创建的,用ManyToManyField),xxx是在A中创建的多对多的字段,关联的是B
xxx是A的对象关联的B的对象的集合,可能有多个对象

--> 给C中添加数据,不能直接在C中插数据
a = A().objects().get(name="ss")
b = B().objects().get(name="dd")

绑定关系:
a.xxx.add(b) 只添加,不清空 --> 创建绑定关系:C中就会添加数据

一次绑定多个对象:
b_list = B().objects().all()
a.xxx.add(*b_list)

直接传id绑定:
a.xxx.add(1,2,3) --> 放id

a.xxx.remove(b) 删除C中的指定记录
a.xxx.clear() 清空所有的关联记录


查询:
a.xxx.all() --> 得到所有的A的对象关联的B的对象



在sqlite数据库中关系表插入没有的数据不会报错



__str__()方法
class Person():
def __init__(self,name):
self.name = name
def __str__(self):
return self.name

alex = Person("alex")
print(alex)

不加__str__()方法的时候,打印的是object对象
加上之后,但一定呢就是__str__()方法的返回值

posted @ 2017-12-10 18:30  chitalu  阅读(76)  评论(0)    收藏  举报