0

我正在使用 PyMYSQL 从 MySQL 数据库中查询数据。我要使用的示例查询是:

SELECT count(*) AS count
FROM example
WHERE item = %s
LIMTI 1

这将使用

query = "SELECT COUNT(*) as count FROM example WHERE item = %s LIMIT 1"
cur.execute(query,(None))

或者

cur.execute(query,(10))

问题是 item 可以具有 NULL 值,这会导致

WHERE item = NULL

这在 MySQL 中不起作用。相反,它应该阅读

WHERE item IS NULL

然而,该值也可以是整数。如何让 PyMySQL 调整查询以处理这两种情况?

4

1 回答 1

0

你可以做一个简单的函数来捕捉这种None情况:

def null_for_sql(a):
  return "is NULL" if not a else "= " + str(a)

然后像这样调用查询:

query = "SELECT COUNT(*) as count FROM example WHERE item %s LIMIT 1"
cur.execute(query,null_for_sql(None))

注意查询中的“item”后面没有“=”

评论后编辑:

def sql_none_safe_generator(query,parameter):
  if parameter: 
    return query.replace(%param, "= " + str(parameter))
  else:
    return query.replace(%param, is NULL)

query = "SELECT COUNT(*) as count FROM example WHERE item %param LIMIT 1"
cur.execute(sql_none_safe_generator(query,a))
于 2014-12-03T11:50:53.210 回答