首页 > 解决方案 > 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 = [] 在执行查询后,我确信该查询应该返回结果。

标签: pythonmysqldjango

解决方案


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),))

推荐阅读