python - Django MySQL 原始查询不返回结果
问题描述
我正在尝试在 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 = [] 在执行查询后,我确信该查询应该返回结果。
解决方案
LIKE
在将字符串与通配符进行比较时使用而不是 =
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 LIKE %s OR a.detail_ref_gen LIKE %s) AND c.gen_type BETWEEN 1 AND 5 ORDER BY a.gen_name;", ('{}%'.format(variant),'{}%'.format(variant),))
推荐阅读
- r - 如何将多个 data.frames 与 Reduce 合并并获得有序输出?
- javascript - 嵌套 for 循环中断父循环
- python - 如何在神经网络中实现流式学习?
- python - 如何在 kivy PYTHON 中按下按钮来更新图像
- java - sinch 视频通话摄像头权限问题与安卓裴(9)
- vba - 在 Word VBA 中另存为后创建/更新页脚
- python - 如何根据另一个数据帧计算一个数据帧中的类别?
- javascript - Javascript:for循环没有按预期工作
- html - 为什么我的盒子的背景没有显示?
- firebase - 板级 NodeMCU 1.0(ESP-12 模块)编译时出错