我的列表如下:
['1.0.176.20:14386', '1.0.179.115:20208', '1.0.218.241:14699', '1.0.242.3:27376', '1.1.218.165:24513']
来自:
sessions = [session[0].replace("'", '"') for session in sessions]
但是在mysql中:
cur.execute("""
SELECT *
FROM logs
WHERE logs.session IN %s
""", (
sessions,
))
它不返回任何内容,因为查询是:
SELECT *
FROM logs
WHERE logs.session IN ("'1.0.176.20:14386'", "'1.0.179.115:20208'")
如何在 mysql/list 中修复此问题?
最佳答案
当您格式化该字符串时,您将得到的是
... WHERE logs.session IN ['1.0.176.20:14386', '1.0.179.115:20208', (...)]
因为这是列表的字符串表示形式 ([...]
)。
你需要做这样的事情:
sessions_in = ",".join(map(lambda x: "'{0}'".format(x), sessions))
cur.execute("""
SELECT *
FROM logs
WHERE logs.session IN ( {0} )
""".format(sessions_in))
它将通过在所有列表项之间使用 ,
连接所有列表项来创建一个字符串。由于这只会创建一个包含所有元素的单个字符串 ("1,2,3,(...)"
),因此您需要在连接每个字符串之前将它们转换为带引号的字符串。这就是 map
的作用,为您提供:
"'1.0.176.20:14386','1.0.179.115:20208','1.0.218.241:14699','1.0.242.3:27376','1.1.218.165:24513'"
关于mysql - 如何在 mysql 的 python 列表中指定用于字符串的引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25016869/