【发布时间】:2011-11-16 22:04:16
【问题描述】:
我在一个自定义 QuerySet 中有一个方法,可以对数据库执行原始 SQL 查询。
class QuerySet(models.query.QuerySet):
def get_short(self, language_code='en'):
"""Returns shortest name for given language"""
cursor = connection.cursor()
cursor.execute('''SELECT t.name FROM translation t, name n
WHERE n.id IN (%s)
AND t.link_id = n.id
AND t.lang_id = %s
ORDER BY CHAR_LENGTH(t.name)
LIMIT 1''', [','.join(["'%s'" % obj.pk for obj in self]), get_language(language_code).pk])
name = cursor.fetchone()
if name:
return name[0]
但它返回空结果。 cursor.fetchone() 返回 None 而不是值。当我在同一个数据库上执行原始 SQL 时:
SELECT t.name FROM translation t, name n
WHERE n.id IN ('166','167')
AND t.link_id = n.id
AND t.lang_id = 40
ORDER BY CHAR_LENGTH(t.name)
LIMIT 1
它返回正确的值。
我哪里错了?请帮忙!
【问题讨论】:
-
我会让 django 在执行之前打印出确切的 sql 语句,以便您可以将其与显式语句进行比较。
-
django 日志中的 SQL 语句与我在帖子中解释的完全相似。
标签: python sql django mysql-python