zoukankan      html  css  js  c++  java
  • 在Django中使用原生Sql

    在Django中使用原生Sql主要有以下几种方式:
    一:extra:结果集修改器,一种提供额外查询参数的机制
    二:raw:执行原始sql并返回模型实例
    三:直接执行自定义Sql(这种方式完全不依赖model,前两种还是要依赖于model)
    实例:
    使用extra:
      1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50'])
      Book.objects.filter(publisher__name='广东人员出版社',price__gt=50)
     
      2:Book.objects.extra(select={'count':'select count(*) from hello_Book'})
        在Book表中增加了count字段可被调用
    使用raw:
      Book.objects.raw('select * from hello_Book')
     
      自定义sql:
      Book.objects.raw("insert into hello_author(name) values('测试')")
      rawQuerySet为惰性查询,只有在使用时生会真正执行
     
    执行自定义sql:
    django.db.connection:代表默认的数据库连接 
    django.db.transaction :代表默认数据库事务(transaction) 
    用database connection调用 connection.cursor() 得到一个游标(cursor)对象。 
    然后调用 cursor.execute(sql, [params]) 执行SQL 
    cursor.fetchone() 或者 cursor.fetchall(): 返回结果行
      from django.db import connection
      cursor=connection.cursor()
     #插入操作
      cursor.execute("insert into hello_author(name) values('张三')")
     #更新操作
      cursor.execute('update hello_author set name='abc' where name='bcd'')
     #删除操作
      cursor.execute('delete from hello_author where name='abc'')
     #查询操作
      cursor.execute('select * from hello_author')
      raw=cursor.fetchone() #返回结果行游标直读向前,读取一条
      cursor.fetchall() #读取所有

    2. 在Django的ORM中,想使用事务操作时,要先导入一个Django的内置模块

       from django.db import transaction
      def index(request):
            from django.db import transaction
            try:
                with transaction.atomic():
                    models.Userinfo.objects.create(username="python001",email="python001@qq.com")
                    models.Group.objects.create(title="python002")
            except Exception as e:
                return HttpResponse("出现错误....")
            return HttpResponse("ok")
  • 相关阅读:
    mysql常用命令
    怎么在cmd中输入mysql就可以进去mysql控制台
    ORA-01659: 无法分配超出 7 的 MINEXTENTS
    Oracle修改表空间自增长
    整理下.net分布式系统架构的思路
    Net分布式系统之一:系统整体框架介绍
    QT QTreeWidget 的一个例子 显示文件(夹)的树形结构
    待读 QT 博客
    如何为 QT5 装上 QT4 才有的库
    Python 获取文件夹里所有 log 的起止时间戳
  • 原文地址:https://www.cnblogs.com/l-jie-n/p/9941865.html
Copyright © 2011-2022 走看看