zoukankan      html  css  js  c++  java
  • Django——模型层之原生sql,事务(请求,装饰器,局部)

    一、原生sql

     # 原生sql(有些sql用orm写不出来)
        # 两种方案
        # 第一种:用的比较少
    
        # from django.db import connection
        #
        # cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)
        #
        # cursor.execute("""SELECT * from app01_book where id = %s""", [1])
        #
        # # row = cursor.fetchone()
        # row = cursor.fetchall()
        # print(row)
    
        # 第二种,用的多
        # books=models.Book.objects.raw('select * from app01_book where id >3')
        # print(books)#RawQuerySet对象
        # for book in books:
        #     print(book.name)
    
        # books=models.Book.objects.raw('select * from app01_publish')
        # for book in books:
        #     print(book.__dict__)
            # print(book.name)
            # print(book.addr)
            # print(book.email)
            # print(book.price)
    
        # authors = models.Author.objects.raw('SELECT app01_author.id,app01_author. NAME,app01_authordetail.sex FROM app01_author JOIN app01_authordetail ON app01_author.author_detail_id = app01_authordetail.id WHERE app01_authordetail.sex = 1')
        # 
        # for author in authors:
        #     print(author.name)
        #     print(author.__dict__)

    二、事务(请求,装饰器,局部)

    # 事物:ACID,事物的隔离级别(搜),锁, 行级锁,表级锁
    
        # djanog orm中使用事物:原子性操作,要么都成功,要么都失败
    
        # 新增一个作者详情,新增一个作者
    
        # 事物的三个粒度
        # 1 局部使用
        from django.db import transaction
        with transaction.atomic(): # 都在事物中,要么都成功,要么都失败
            author_detail=models.AuthorDetail.objects.create(addr='xxx',phone='123',sex=1)
            # raise Exception('抛了异常')
            author=models.Author.objects.create(name='llqz',age=19,author_detail=author_detail)
        # 2 视图函数装饰器,这一个视图函数都在一个事物中
        # @transaction.atomic
        # def index(request):
        #     return HttpResponse('ok')
    
    
        # 3 整个http请求,在事物中,在setting.py中配置
        '''
        DATABASES = {
            'default': {
                ...
                'PORT': 3306,
                'ATOMIC_REQUEST': True,
           
            }
        }
    
        'ATOMIC_REQUEST': True,
    设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
        
        '''
  • 相关阅读:
    反思二
    安装Electron时卡在install.js不动的解决方案
    解决npm 下载速度慢的问题
    覆盖第三方jar包中的某一个类。妙!!
    关于拦截器是用注解方便,还是用配置文件写死方便的总结。
    yapi 启动后,老是自动关闭的问题。
    BaseResponse公共响应类,与我的设计一模一样,靠、ApiResponse
    HashMap 的 7 种遍历方式与性能分析!(强烈推荐)、forEach
    Jackson objectMapper.readValue 方法 详解
    yapi tag的问题,暂时只保留一个tag
  • 原文地址:https://www.cnblogs.com/guojieying/p/13814903.html
Copyright © 2011-2022 走看看