本文整理自网络,侵删。
目录
- 执行原生 SQL 查询
- 1、执行原生查询
- 1.1 普通查询
- 1.2 将查询字段映射为模型字段
- 1.3 索引查询
- 1.4 将参数传给 raw()
- 2、直接执行自定义 SQL
- 2.1 指定连接数据库
执行原生 SQL 查询
Django 允许你用两种方式执行原生 SQL 查询:
- 你可以使用 Manager.raw() 来 执行原生查询并返回模型实例。
- 或者完全不用模型层 直接执行自定义 SQL。
1、执行原生查询
管理器方法 raw() 能用于执行原生 SQL 查询,就会返回模型实例:
Manager.raw(raw_query, params=None, translations=None)
该方法接受一个原生 SQL 查询语句,执行它,并返回一个 django.db.models.query.RawQuerySet 实例。这个 RawQuerySet 能像普通的 QuerySet 一样被迭代获取对象实例。
1.1 普通查询
class Person(models.Model): first_name = models.CharField(...) last_name = models.CharField(...) birth_date = models.DateField(...)
然后你可以像这样执行自定义 SQL:
for p in Person.objects.raw('SELECT * FROM app_person'): # django默认的表名是app名加类名 print(p) # 没有查询到就报错
1.2 将查询字段映射为模型字段
raw() 字段将查询语句中的字段映射至模型中的字段。
查询语句中的字段排序并不重要。换而言之,以下两种查询是一致的:
Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM app_person') Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM app_person')
匹配是根据名字来的。这意味着你可以使用 SQL 的 AS 子句将查询语句中的字段映射至模型中的字段。所以,若你还有一些数据表包含了 Person 数据,你可以很方便的将其映射至 Person 实例:
>>> Person.objects.raw('''SELECT first AS first_name, ... last AS last_name, ... bd AS birth_date, ... pk AS id, ... FROM app_person''')
只要名字对上了,模型实例就会被正确创建。
相关阅读 >>
sqlserver使用 case when 解决多条件模糊查询问题
sql语句练习实例之五 wms系统中的关于lifo或fifo的问题分析
更多相关阅读请进入《sql》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » django执行原生SQL查询的实现
标签:sql
相关推荐
评论
管理员已关闭评论功能...