Django之ORM执行原生sql语句

本文介绍在Django框架中如何使用ORM执行原生SQL语句,包括使用raw()方法进行查询及直接执行自定义SQL的方法。同时,讨论了如何将查询字段映射到模型字段,以便更好地操作数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django之ORM执行原生sql语句

django中的ORM提供的操作功能有限,在模型提供的API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句。
Django提供两种方法使用原生SQL进行查询:一种是使用raw()方法,进行原生SQL查询并返回模型实例:另一种是完全避开模型层,直接咨询自定义的SQL语句。

raw()方法执行原生sql语句:

#raw()方法执行原生sql(调用的类名不区分是谁,只要存在均可执行)
    ret = model.Book.objects.raw('select * from app01_book')
    #ret =model.Publish.object.raw('select * from app01_book')
    for book in ret:
    	print(book.book_name)
    	#print(book.__dict__)

直接执行自定义原生sql语句

#直接执行自定义原生sql(完全避开模型层,类似 pymysql)
	from django.db import connection
	cursor = connection.cursor()
	cursor.execute('select * from app01_book')
	ret = cursor.fetchall()
	print(ret)     #((2, '小时光', Decimal('10.00'), 2), (3, '未来可期', Decimal('33.00'), 1), (4, '打破思维里的墙', Decimal('11.00'), 2), (5, '时光不散', Decimal('11.00'), 3))

将查询字段映射到模型字段

raw()自动将查询中的字段到模型上的字段。

#在serializers的序列化器中
	QuitanAllLive.objects.raw('SELECT stop_time FROM game')
	#上面代码的意思是在QuitanAllLive模型类加入game模型类的stop_time字段

匹配按名称完成。这意味着您可以使用SQL的AS子句将查询中的字段映射到模型字段。因此,如果您还有其他包含Person数据的表,则可以轻松地将其映射到Person实例中:

Person.objects.raw('''SELECT first AS first_name,
								last AS last_name,							
								FROM some_other_table''')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值