Python Django 数据库查询优化 事务

一 数据库优化查询

1.惰性查询:orm内的所有语句操作,只有你真正需要数据的时候才会对数据库进行操作,如果只是单单写orm语句不会走数据库。这样的好处是减轻数据库压力。

2.only

res = models.Book.objects.only(‘title‘)
print(res)
 for r in res:
     print(r.title)  # 只走一次数据库查询
         print(r.price)  # 当你点击一个不是only括号内指定的字段的时候 不会报错 而是会频繁的走数据库查询

3.defer

res1 = models.Book.objects.defer(‘title‘)  # defer与only是相反的
for r in res1:  # defer会将不是括号内的所有的字段信息 全部查询出来封装对象中
            #     # 一旦你点击了括号内的字段  那么会频繁的走数据库查询
     print(r.price)

4.select_related:一对一,一对多

select_related帮你直接连表操作 查询数据   括号内只能放外键字段
 res = models.Book.objects.all().select_related(‘publish‘)
for r in res:
   print(r.publish.name)
res = models.Book.objects.all().select_related(‘publish__xxx__yyy__ttt‘)
 print(res)
 res = models.Book.objects.all()

"""
select_related:会将括号内外键字段所关联的那张表  直接全部拿过来(可以一次性拿多张表)跟当前表拼接操作
从而降低你跨表查询 数据库的压力

注意select_related括号只能放外键字段(一对一和一对多)
res = models.Book.objects.all().select_related(‘外键字段1__外键字段2__外键字段3__外键字段4‘)总结:直接查连表

5.prefetch_related :不主动连表

res = models.Book.objects.prefetch_related(‘publish‘)

"""
不主动连表操作(但是内部给你的感觉像是连表操作了)  而是将book表中的publish全部拿出来  在取publish表中将id对应的所有的数据取出
res = models.Book.objects.prefetch_related(‘publish‘)
括号内有几个外键字段 就会走几次数据库查询操作    

for r in res:
    print(r.publish.name)总结:先查一张表,在查另一张表

6.事务:它会自动回滚

        from django.db import transaction

        with transaction.atomic():
            """数据库操作
            在该代码块中书写的操作 同属于一个事务
            """
            models.Book.objects.create()
            models.Publish.objects.create()
            # 添加书籍和出版社 就是同一个事务 要么一起成功要么一起失败
        print(‘出了 代码块 事务就结束‘)

原文地址:https://www.cnblogs.com/tfzz/p/11560155.html

时间: 2024-08-29 04:46:32

Python Django 数据库查询优化 事务的相关文章

八、Python Django数据库添加查询

Python Django数据库添加查询 对数据进行操作 一.创建记录 # pwd /root/csvt03 # ipython manage.py shell In [1]: from blog.models import Employee #(第一种方法) In [2]: Employee Out[2]: blog.models.Employee In [3]: emp = Employee() In [4]: emp.name = 'Alen' In [5]: emp.save() #(第

Django 数据库查询优化

Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后期会省不少的工作量. 一 利用标准数据库优化技术: 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的.在这里算是题外话,挑两点通用的说说: 索 引,给关键的字段添加索引,性能能更上一层楼,如给表的关联字段,搜索频率高的字段加上索引等.Django建立实体的时候,支持给字段

Python Django 数据库操作

1. 建立app 在自己的工程项目目录下输入: python manage.py startapp myapp(你想建立的app名称) 建立一个叫myapp的app 这样,在你的工程项目目录下会出现一个叫myapp的目录 2. 创建Model 在app目录下进入models.py 输入类似下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Publisher(models.Model):     name = models.CharField(

Django 数据库事务

管理数据库事务 Django框架提供了好几种方式来控制和管理数据库事务.(以下Django框架会简化为Django,读者可自行脑补框架两字) Django框架默认的事务行为 自动提交作为Django默认的事务行为,它表现形式为:每次数据库操作会立即被提交到数据库中,除非这个事务仍然处于激活状态. 那么,更多详细内容见下文. Django使用事务或者保存点来保证多个ORM操作的完整性,尤其是针对delete()和update()操作. 另外因为某些性能原因,Django提供的TestCase类就将

django数据库事务

数据库原子操作 举个例子: 一个消费者在一个商户里刷信用卡消费,交易正常时,银行在消费者的账户里减去相应的款项,在商户的帐户加上相应的款项.但是如果银行从消费者的账户里扣完钱之后,还未在商户的帐户里加上相应的款项时,由于某些原因,系统或者数据库出现异常了,那么此时钱已经从消费者的账户里扣除了,但是商户的账户里却没有加上相应的款项,这种情况下,最好的解决办法就是使用数据库的原子性操作,也就是数据库的事务.保证要么同时成功,要么同时失败,然后才向数据库commit. Django默认向数据库的提交方

python——django使用mysql数据库(一)

之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有些有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经拥有一个django项目.已安装MySQLdb,进入mysql创建一个新的库(注意,这里必须是新的库,如果库里已经有表,就会出问题.) 修改配置项:打开已经创建好的django项目,在INSTALLED_APPS添加自己的工程名称.修改DATABASES项中配置的内容. INSTALLED_APPS

Python+Django+SAE系列教程12-----配置MySQL数据库

因为SAE上支持的是Mysql,首先我们要在本地配置一个Mysql的环境 ,我在网上找到MySQL-python-1.2.4b4.win32-py2.7.exe,并双击 安装 选择典型安装 安装结束后,会弹出配置数据库的界面 : 然后输数据管理员密码: 最后是运行服务. 这个过程并不复杂,安装完成Mysql以后,系统会启动数据库服务,由于Mysql是用命令行控制的,想我这样懒的 人还是需要借助一个可视化 工具来管理,我选择MySQL-Front. 在网上找到MySQL_Front_Setup.1

python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用. 本节的代码:(Django 1.6, Python 2.7 测试环境) 大

python django 与数据库的交互

下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活app的方法: 编辑 settings.py 文件, 找到 INSTALLED_APPS 设置. INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状 态.缺省情况下如下所示 INSTALLED_APPS = ( #'django.contrib.auth', #'djang