在Django中使用原生Sql

摘要:
在Django中使用本机Sql有几种主要方法:1.extra:结果集修饰符,一种提供额外查询参数的机制2.raw:执行原始Sql并返回模型实例3.直接执行用户定义的Sql(此方法完全不依赖于模型,前两个也依赖于模型)实例:use extra:1.Book。物体。filter(publisher_name='广东人民出版社')。extra(其中=['price˃50
在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")

免责声明:文章转载自《在Django中使用原生Sql》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关系数据库设计方法前言 转录组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle sql*plus常用命令

一、sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1)、sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install(2)、system用户是管理操作员,权限也很大。具有sysoper角色,没有create database的权...

MySQL集群搭建

MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。Cluster的汉语是“集群”的意思。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。 MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster...

Vba+access+Excel编程

学习目的是建立简易的管理系统 当前学习路线:excel的宏的简单了解→access数据库的了解→两者的结合 excel的宏的简单了解: 关于宏的使用,大部分文章都提到说Vba很难写,但是可以通过一段现成的代码,修改关键部分来为自己所用,现成代码的获得方式就是录制宏,在其自动生成的代码上添加循环等修改,达到自己想要的效果。 关于宏的录制与代码的修改运行如下:...

db2 sqlcode

DB2错误信息(按sqlcode排序)  sqlcode sqlstate 说明  000 00000 SQL语句成功完成  01xxx SQL语句成功完成,但是有警告  +012 01545 未限定的列名被解释为一个有相互关系的引用  +098 01568 动态SQL语句用分号结束  +100 02000 没有找到满足SQL语句的行  +110 0156...

SQL和NoSQL

SQL和NoSQL  目前的数据库系统非常多,有传统的关系型的数据库系统(又被称为SQL数据库系统),有最近几年流行起来的NoSQL数据库系统。其中NoSQL数据库系统又分为很多种不同的类型,根据各个系统所支持的数据模型的不同,可以分为很多类,下面做一个简单的分类,更多的分类请参见dbengines的排名。 1、SQL数据库系统 ============...

Oracle Dedicated server 和 Shared server(专用模式 和 共享模式) 说明

一.  官网说明        在DBCA 建库的时候,有提示让我们选择连接类型,这里有两种类型:专用服务器模式和共享服务器模式。默认使用专用模式。如下图: Oracle 官方文档对这两种文档的说明如下: About Dedicated andShared Server Processes http://download.oracle.com/d...