博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
model 补充二
阅读量:5306 次
发布时间:2019-06-14

本文共 2293 字,大约阅读时间需要 7 分钟。

1:Diango提供的现成功能:

models.tb.objects....

 

性能相关:

  a:select_related('跨表字段')

def select_related(self, *fields)     性能相关:表之间进行join连表操作,一次性获取关联的数据。     model.tb.objects.all().select_related()  #连表查询性能低   b:prefetch_related
def prefetch_related(self, *lookups)    性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。            # 获取所有用户表            # 获取用户类型表where id in (用户表中的查到的所有用户ID)            models.UserInfo.objects.prefetch_related('外键字段')

2:自己写SQL语句:

################### 原生SQL ###################    from django.db import connection, connections    cursor = connection.cursor()  # cursor = connections['default'].cursor()    cursor.execute("""SELECT * from auth_user where id = %s""", [1])    row = cursor.fetchone() # fetchall()/fetchmany(..)
# 指定数据库    models.UserInfo.objects.raw('select * from userinfo', using="default")
def extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None)    # 构造额外的查询条件或者映射,如:子查询    Entry.objects.extra(select={
'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))

3:

def aggregate(self, *args, **kwargs):   # 聚合函数,获取字典类型聚合结果   from django.db.models import Count, Avg, Max, Min, Sum   result = models.UserInfo.objects.aggregate(k=Count('u_id', distinct=True), n=Count('nid'))   ===> {
'k': 3, 'n': 4}#去重后得到聚合结果(个数)

4:

def bulk_create(self, objs, batch_size=None):    # 批量插入    # batch_size表示一次插入的个数    objs = [        models.DDD(name='r11'),        models.DDD(name='r22')    ]    models.DDD.objects.bulk_create(objs, 10)#10是最多插入数

5:

def get_or_create(self, defaults=None, **kwargs):    # 如果存在,则获取,否则,创建    # defaults 指定创建时,其他字段的值    obj, created = models.UserInfo.objects.get_or_create(username='root1', defaults={
'email': '1111111','u_id': 2, 't_id': 2})def update_or_create(self, defaults=None, **kwargs): # 如果存在,则更新,否则,创建 # defaults 指定创建时或更新时的其他字段 obj, created = models.UserInfo.objects.update_or_create(username='root1', defaults={
'email': '1111111','u_id': 2, 't_id': 1})

6:

def first(self):   # 获取第一个def last(self):   # 获取最后一个def in_bulk(self, id_list=None):   # 根据主键ID进行查找   id_list = [11,21,31]   models.DDD.objects.in_bulk(id_list)def delete(self):   # 删除def update(self, **kwargs):    # 更新def exists(self):   # 是否有结果

 

转载于:https://www.cnblogs.com/xyd134/p/6886398.html

你可能感兴趣的文章
eclipse,python
查看>>
深入理解java集合框架(jdk1.6源码)
查看>>
php截取后台登陆密码的代码
查看>>
选假球的故事
查看>>
ul li剧中对齐
查看>>
关于 linux 的 limit 的设置
查看>>
模块搜索路径
查看>>
Tarjan LCA
查看>>
【CV论文阅读】Image Captioning 总结
查看>>
Ubuntu使用adb连接android手机失败unknown的解决的方法
查看>>
测试开发基本面试知识
查看>>
const和volatile
查看>>
匈牙利算法 cogs 886. [USACO 4.2] 完美的牛栏
查看>>
Fragment之一:Fragment入门
查看>>
服务器启动完成执行定时任务Timer,TimerTask
查看>>
windows下编译安装BOOST
查看>>
Cookie安全测试
查看>>
数据结构C语言版车牌号的查询与排序
查看>>
Centos 5 忘记root密码,可以使用单用户模式修改密码
查看>>
WIN7 64位系统安装JDK并配置环境变量
查看>>