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都放在一个事务中执行(要么所有都成功,要么所有都失败)。
        
        '''
  • 相关阅读:
    flask总结02
    flask总结01
    恩智浦Freescale Cortex-A9 迅为IMX6开发板平台初体验
    [分享] IMX6嵌入式开发板linux QT挂载U盘及TF卡
    迅为4412嵌入式安卓开发板兼容3G网络|4G网络
    迅为嵌入式4412平台兼容3G/4G模块的安卓开发板
    飞思卡尔开发板-迅为IMX6开兼容单核 双核 四核Plus开发板
    物联网初学者智能家居必备迅为iTOP-4412开发板
    【分享】4412开发板POP烧写ubuntu出错,如何挂载emmc分区解决方法
    [安卓开发板]迅为IMX6 四核Android开发板
  • 原文地址:https://www.cnblogs.com/guojieying/p/13814903.html
Copyright © 2011-2022 走看看