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都放在一个事务中执行(要么所有都成功,要么所有都失败)。
        
        '''
  • 相关阅读:
    ARM Linux 3.x的设备树(Device Tree)
    ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决
    Device Tree Usage( DTS文件语法)
    Ubuntu 14.04中gedit打开文件出现中文乱码问题
    Jenkins中集成jmeter-maven插件
    Linux(centos6.5)下安装jenkins
    IM系统架构设计之浅见
    一些常用软件的网络端口协议分类介绍
    Jenkins执行批处理文件失败
    八大持续集成工具
  • 原文地址:https://www.cnblogs.com/guojieying/p/13814903.html
Copyright © 2011-2022 走看看