django使用raw()执行sql语句多表查询

本文介绍了在Python3.7和Django2.2.16环境下,如何使用raw()执行MySQL5.7的SQL语句进行多表查询。文章详细阐述了raw()函数的用法,强调返回结果需包含主键,并且所有查询字段必须来自关联表。通过一个未建立外键关系的product和model_replace表实例,展示了多表查询的实现。同时,讨论了在使用LIKE进行模糊查询时需要注意对百分号(%)进行转义的问题。
摘要由CSDN通过智能技术生成

1.环境

python3.7

django2.2.16

mysql5.7

2.raw()的用法

  • raw() 执行原始sql,并返回模型实例对象。

  • 可用于多表关联查询

  • 返回结果必须包含实例对象对应数据库表的主键

  • 虽然返回结果是实例对象,但是对于多表关联查询,返回结果可以包含非实例对象(关联查询表)的字段属性。

  • 如果最终查询结果中有的字段不存在于任何实例对象或关联查询对象中则会报错[Cannot resolve keyword ‘XXX’ into field. Choices are: app_label, id, model…],即最终查询的字段必须在关联查询的表中,不能凭空捏造。

3.实例

数据库表:product(产品表) model_replace(产品型号替换表),两个表并没有外键关联关系,只是通过一个product_unique_sign去关联

product

product_id product_name product_model product_unique_sign
1 产品1 model01 1001
2 产品2 model02 1002
3 产品3 model03 1003

model_replace

model_id product_model product_model_replace product_unique_sign
1 model02 model01 1002
2 model02 model03 1002
def search(request):	
	params = ""
	# 根据自己的业务逻辑可以在params添加where的查询条件,拼接到sql_str字符串中
	# 如果是字符串类型的参数,记得在{}的两侧加上单引号,否则会报错。
	# 因为生成的sql语句 会是  and p.product_model = model02 。这种SQL语句肯定是错误的。
	param_model = 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇洋葱头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值