django事务、查询优化、MTV与MVC、多对多关系表新建字段方式

事务的开启

from django.db import transaction
with transaction:
	#在改代码块执行的orm操作必须符合事务特性
	………………

数据查询的优化

values(‘name’) 获得字典
only(‘name’) 只查询‘name’字段
defer(‘name’) 除了’name’字段都查询
查询出来的数据是一个个的对象。only查询出来后,再点这个对象不会再查询数据库了,如果点其他的属性的话会再次查询数据库。

res  = models.Book.objects.only('name','price')

choice字段优化查询

在models.py中

class User(models.Model):
	name = models.Charfield(max_length=32)
	choice = ((1,'男'),(1,'女'),(1,'其他'))
	gender = models.IntegerField(choice=choices)

在views.py视图函数中

user_obj  = models.User.objects.get('name = 'xxx'')
print( user_obj.get_gender_display())

get_gender_display()方法可以获得用choice方法设置的字段属性 男 女 其他

MTV与MVC

MTV(django):
M:models
T;templates
V:views

MVC:
M:models
V:views
C:controller(url+views)

区别:两个框架的本质是一样的,django非得这么称呼MVC和MTV

多对多建立关系的两种方式

class Book(models.Model):
	name = CharField(max_length=32)
	author = models.ManyToManyField(to='Author',through='Book2Author,'through_fields=	('book','author'))

class Author(models.Model);
	name = models.CharField(max_length=32)
	
class Book2Author(models.Model):
	book = models.ForeignKey(to='book')
	author = models.ForeignKey(to='Author')

对比用ManyToMany自动创建关系表,这种方式可以在新建的中间表中建立新的字段。

posted @ 2019-04-21 17:43  不会玩python  阅读(4)  评论(0编辑  收藏  举报