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都放在一个事务中执行(要么所有都成功,要么所有都失败)。
        
        '''
  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/guojieying/p/13814903.html
Copyright © 2011-2022 走看看