十二:在Django中使用sql
 
关键字:

connection     connections       transaction
insert/create/update/delete/select/drop
 
如果在models没有定义数据表名,将以app名加下划线加上定义的表名(自动转化为小写)
 
查询时可以直接使用raws函数进行sql查询
 
comment = Comment.objects.raw(select * from blog_comment)
 

Django提供两种方式执行(performing)原始的SQL查询:

(1)Manager.raw():执行原始查询并返回模型实例

(2)、Executing custom SQL directly:直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句。

raw() 方法自动通过查询字段映射到 model字段,并且是通过名称来匹配,这意味着我们可以使用SQL子句(clause)

注意当输入查询字段的时候,不要漏了主键(id),否则会出错

导入 form django.db import connection,transaction

django.db.connection:代表默认的数据库连接
django.db.transaction:代表默认数据库事务(transaction)
connection.cursor(): 获得一个游标(cursor)对象
cursor.execute(sql, [params]):执行SQL
cursor.fetchone() 或者 cursor.fetchall():返回结果行

如果执行修改操作,则调用transaction.commit_unless_managed()来保证你的更改提交到数据库。

def sql(request):
"""
----------------------------------------------
Function: 执行原始的SQL
DateTime: 2013/x/xx
----------------------------------------------
"""
from django.db import connection,transaction
cursor = connection.cursor()#获得一个游标(cursor)对象
#更新操作
cursor.execute('update other_other2 set name ="李四" where id=%s',[3])#执行sql语句
transaction.commit_unless_managed()#提交到数据库
#查询操作
cursor.execute('select * from other_other2 where id>%s',[1])
raw = cursor.fetchone()#返回结果行 或使用 #raw = cursor.fetchall()
 
#如果连接多个数据库则使用django.db.connections
from django.db import connections
_cursor = connections['other_database'].cursor()
#如果执行了更新、删除等操作
transaction.commit_unless_managed(using='other_databases')
return render_to_response('other/sql.html',{'raw':raw})
 

Django当中的sql查询的更多相关文章

  1. django原生sql查询如何返回字典格式

    django原生sql查询,默认返回的是元祖.如果想返回字典格式,需要自行封装: http://www.360doc.com/content/17/0802/11/9200790_676042880. ...

  2. Django文档阅读之执行原始SQL查询

    Django提供了两种执行原始SQL查询的方法:可以使用Manager.raw()来执行原始查询并返回模型实例,或者可以完全避免模型层直接执行自定义SQL. 每次编写原始SQL时都要关注防止SQL注入 ...

  3. Django框架08 /聚合查询、分组、F/Q查询、原生sql相关

    Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...

  4. Django学习——图书相关表关系建立、基于双下划线的跨表查询、聚合查询、分组查询、F查询、Q查询、admin的使用、使用脚本调用Django、Django查看源生sql

    0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一 ...

  5. Hibernated的sql查询

    记录一下学习Hibernate的心得 1.为什么HIbernate会支持原生态的sql查询? HQL查询语句虽然方便我们查询,但是基于HQL的查询会将查询出来的对象保存到hibernate的缓存当中, ...

  6. Hibernate应用SQL查询返回实体类型

    Hibernate应用SQL查询返回实体类型 Hibernate使用SQL查询返回实体类型 以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中.Hibernate中,可以自动 ...

  7. django 执行原始SQL

    二.知识点总结 When the model query APIs don’t go far enough, you can fall back to writing raw SQL. go far ...

  8. 13.hibernate的native sql查询(转自xiaoluo501395377)

    hibernate的native sql查询   在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...

  9. Python web(Django)连接Sql server

    (开开心心每一天~ ---虫瘾师) Python Web(Django) 与SQL SERVRE的连接----Come QQ群:607021567(里面有很多开源代码和资料,并且python的游戏也有 ...

随机推荐

  1. Python内置函数之callable()

    callable()用来检测对象是否可调用的. callable()返回值为True或者False. 下面看看例子 : >>> callable() False >>&g ...

  2. 解决PHP编译cURL的reinstall the libcurl问题

    今天正好要用到PHP的curl功能,发现服务器上的PHP并没有配置curl,进而查询PHP官方文档,得知编译PHP时需要带上 –with-curl参数,才能把curl模块编译进去.我现在PHP已经编译 ...

  3. Bootstrap -- 标签属性

    @.aria-label和aria-labelledby 用于屏幕阅读器 原文:https://blog.csdn.net/liuyan19891230/article/details/5045283 ...

  4. 利用Lucene将被索引文件目录中的所有文件建立索引

    1.新建两个文件夹htm和index,其中htm中存放被索引的文件,index文件中存放建立的索引文件. 2.新建解析目录中所有文件的类,用来解析指定目录下的所有文件. import java.io. ...

  5. jsx编译器 atom

    开始学习react es6 觉得没有合适的编译器.于是找到了个Atom. 官网 https://atom.io/ 下载安装. 双击运行即可完成安装. 安装后点击 file>setting> ...

  6. Android无线测试之—UiAutomator UiSelector API介绍之三

    节点关系介绍 每一个布局文件都是一个严格的层次结构布局文件,只有对层次结构非常的了解,才能更好的搜索定位我们需要的主键元素 一.XML文档节点关系介绍 备注:查看节点关系主要使用UiAutomatro ...

  7. xpath与css基本使用方法

    path使用方法 1.工具Firefox50版本以下,安装插件firebug.firepath

  8. CodeIgniter框架——CI组件间信息流走向

    组件间信息流的走向图: 实线表示直接函数调用. 这些信息流可以从控制器到视图,也可以从控制器到类库或模型.(模型也能调用视图,但理论上这样做不合适.)相反方向就不能调用,如:视图不能调用控制器.然而, ...

  9. 【BZOJ2064】分裂 状压DP

    [BZOJ2064]分裂 Description 背景:和久必分,分久必和...题目描述:中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力.同时经常搞OI的他把这个变成了一个 ...

  10. A - 士兵队列训练问题

    A - 士兵队列训练问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...