【问题标题】:Django MySQL raw query does not return resultsDjango MySQL 原始查询不返回结果
【发布时间】: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 ?
  • 是的,试试看
  • 就是这样,如果您添加答案,我会将其标记为解决方案:)

标签: python mysql django


【解决方案1】:

比较字符串和通配符时使用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),))

【讨论】:

    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2011-11-16
    • 2021-11-27
    • 2015-01-29
    相关资源
    最近更新 更多