Python全系列 教程
3567个小节阅读:5930.8k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
通过raw函数执行原始SQL语句进行查询,主键字段必须包含在查询的字段中,不然会引发错误 :
xxxxxxxxxx
# 定义个 Cook 模型
class Cook(models.Model):
"""
厨师
"""
name = models.CharField(max_length=32,verbose_name='厨师名')
level = models.IntegerField(verbose_name='厨艺等级')
age = models.IntegerField(verbose_name='年龄')
sect = models.CharField(max_length=32,verbose_name='厨艺派系')
class Meta:
db_table='t_cook'
# 执行 原始 SQL
# 表名前面必须加 应用名myapp,即在数据库中的真实表名,否则会抛出异常
for c in Cook.objects.raw('SELECT * FROM t_cook'):
print(c)
# 字段先后顺序没关系
Cook.objects.raw('SELECT id, name, level, age FROM t_cook')
# 等同于
Cook.objects.raw('SELECT name, level, age, id FROM t_cook')
# 可以从其他表格中查询出匹配 person 模型的记录集
# 总之最终的数据集的结构必须和 Person一样
Cook.objects.raw('SELECT name as n, level as l, age as a , id as i FROM t_cook')
# 返回的结果集一样可以执行切片
first_cook = Cook.objects.raw('SELECT * FROM t_cook')[0]
# 但是上述语句会返回所有结果,基于节省传输的需要,在数据库缩小结果集范围更正确
first_cook = Cook.objects.raw('SELECT * FROM t_cook LIMIT 1')[0]
# 传递参数
name = '黑暗之女'
Cook.objects.raw('SELECT * FROM t_cook WHERE name = %s', [name])
不应用模型,直接使用SQL语句进行增删改查
xxxxxxxxxx
from django.db import connection
cursor = connection.cursor()
cursor.execute("UPDATE t_cook SET level = 1 WHERE id = %s", [1])
cursor.execute("SELECT * FROM t_cook WHERE id = %s", [1])
row = cursor.fetchone()
实时效果反馈
1. 关于Django,执行原生SQL说法错误的是?
A Django执行SQL可以使用Model.objects.raw方法
B Model.objects.raw方法执行的SQL字段任意定义
C Django执行SQL可以使用django.db.connection.cursor方法
D django.db.connection.cursor方法执行的SQL字段任意定义
答案
1=>B