首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySql从table_name中选择*,其中col_name IN (任意值)

MySql从table_name中选择*,其中col_name IN (任意值)
EN

Stack Overflow用户
提问于 2021-01-21 14:28:23
回答 3查看 142关注 0票数 1

我正在动态地生成python元组。

代码语言:javascript
运行
复制
x = (1, 3)

所以我可以在python中使用MySql查询,如下所示,

代码语言:javascript
运行
复制
f"SELECT * FROM table_name WHERE col_name IN {x}"

而且没有问题。

但是,当我使用空元组作为x( x = ())时,我希望查询返回表的所有值(只需忽略条件)

我知道,只有当x不是null时,我才能在python中使用if并将筛选器传递给sql。但是我想在sql中使用它,这样就更容易了,因为实际的查询字符串太长了,而且在许多地方也有相同的问题。

所以我的问题是,

在MYSQL中有一种方式像下面这样,

代码语言:javascript
运行
复制
SELECT * FROM table_name WHERE col_name IN (%)

就像我们用

代码语言:javascript
运行
复制
SELECT * FROM table_name WHERE col_name LIKE "%"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-05 04:56:56

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-01-21 15:08:45

想出了一条蟒蛇的路。定义如下函数:

代码语言:javascript
运行
复制
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'

现在,在查询字符串中执行以下操作:

代码语言:javascript
运行
复制
f"SELECT * FROM table_name WHERE {tuple_to_condition('col_name', x)}"

该函数只返回“TRUE”,这样就不会抛出错误。

票数 2
EN

Stack Overflow用户

发布于 2021-01-21 15:00:17

在试用了一些密码之后,我找到了答案。

代码语言:javascript
运行
复制
x = [value1, value 2] # a list,, not a tuple
x.append("some value that does not in table")
x = tuple(x)

所以元组不会是空的。现在我们可以从伊莎瓦纳的回答中得到帮助

代码语言:javascript
运行
复制
SELECT * FROM table_name WHERE col_name IN {x} OR {len(x) > 1}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65829569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档