我正在动态地生成python元组。
x = (1, 3)所以我可以在python中使用MySql查询,如下所示,
f"SELECT * FROM table_name WHERE col_name IN {x}"而且没有问题。
但是,当我使用空元组作为x( x = ())时,我希望查询返回表的所有值(只需忽略条件)
我知道,只有当x不是null时,我才能在python中使用if并将筛选器传递给sql。但是我想在sql中使用它,这样就更容易了,因为实际的查询字符串太长了,而且在许多地方也有相同的问题。
所以我的问题是,
在MYSQL中有一种方式像下面这样,
SELECT * FROM table_name WHERE col_name IN (%)就像我们用
SELECT * FROM table_name WHERE col_name LIKE "%"发布于 2021-05-05 04:56:56
def sql_escape(s, replace_all=False):
if replace_all:
s = s.replace("_", "\\_").replace("%", "\\%")
return s.replace("\\", "\\\\") \
.replace("\'", "\\\'") \
.replace("\"", "\\\"")
def sql_in(col, values, default="TRUE"):
if values is None:
return default
values = set(values) - {""}
if len(values):
values = ",".join("\'" + sql_escape(str(v).strip()).replace("%", "\\%").replace("_", "\\_") + "\'"
for v in values)
return f"{col} IN ({values})"
else:
return default发布于 2021-01-21 15:08:45
想出了一条蟒蛇的路。定义如下函数:
def queryfriendly(value):
if isinstance(value, str):
return f'"{value}"'
return str(value)
def tuple_to_condition(col_name, tup):
if len(tup):
return f'{col_name} IN (' + ', '.join(list(map(queryfriendly, tup))) + ')'
return 'TRUE'现在,在查询字符串中执行以下操作:
f"SELECT * FROM table_name WHERE {tuple_to_condition('col_name', x)}"该函数只返回“TRUE”,这样就不会抛出错误。
发布于 2021-01-21 15:00:17
在试用了一些密码之后,我找到了答案。
x = [value1, value 2] # a list,, not a tuple
x.append("some value that does not in table")
x = tuple(x)所以元组不会是空的。现在我们可以从伊莎瓦纳的回答中得到帮助
SELECT * FROM table_name WHERE col_name IN {x} OR {len(x) > 1}https://stackoverflow.com/questions/65829569
复制相似问题