【发布时间】:2021-06-16 00:18:25
【问题描述】:
我正在尝试在 Django 中运行原始查询。我不允许使用 ORM。
我使用 Django MySQL 后端。
如果我进行基本查询,没有参数化,数据库返回结果没有问题。
我要运行的查询(不返回任何结果):
from django.db import connection
def get_data(variant):
results = []
cursor = connection.cursor()
cursor.execute("SELECT b.spec_id, b.h_loss, c.gen_type FROM `db-dummy`.spec_gen_data c JOIN `db-dummy`.gen_info a ON a.record_id = c.gen_id JOIN `db-dummy`.spec_data b ON b.record_id = c.spec_id WHERE b.h_loss = 1 AND (a.ref_gen = %s OR a.detail_ref_gen = %s) AND c.gen_type BETWEEN 1 AND 5 ORDER BY a.gen_name;", ('{}%'.format(variant),'{}%'.format(variant),))
columns = [column[0] for column in cursor.description]
results = []
for row in cursor.fetchall():
results.append(dict(zip(columns, row)))
return results
语法有问题吗?
我没有收到任何错误,执行查询后只是 results = [],我确信该查询应该返回结果。
【问题讨论】:
-
tryx Like 用于与字符串和通配符进行比较。如果失败,请立即启用常规日志并查看您获得的查询并对其进行测试
-
你的意思是使用 LIKE %s 而不是 something = %s ?
-
是的,试试看
-
就是这样,如果您添加答案,我会将其标记为解决方案:)