我在 Windows 7 和 mysql 服务器上使用 Python2.7,通过 pymssql 连接。
我的问题:我有一个非常大的数据库,我喜欢从列表中选择与几个单词(字符串)之一匹配的对象的 ID,然后提供给我的程序。 在此查询中,我列表中的这些词也必须有一个 LIKE %...% 表达式。
到目前为止,我将我的 Python 脚本连接到我的数据库并定义了一个游标。 然后我用我正在搜索的词做了一个小列表,我稍后为我的查询创建了一些占位符:
wortliste = ['Bruch', 'Verwerfung']
placeholders = ','.join(['%s'] * len(wortliste))
这是我的查询:
query = """ SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE BO_BEMERKUNG IN ({})""".format(placeholders)
当我搜索单个词时,例如这里搜索词“Bruch”,我的查询将如下所示:
query = """ SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE BO_BEMERKUNG LIKE '%Bruch%'"""
这个针对单个词的查询与正确的 ID (=BO_INDEX) 相匹配。 带有占位符的查询不会崩溃,但它不匹配任何内容:(
但我喜欢在我的数据库中循环几个词,并为我的列表 (=wortliste) 中的每个词(字符串)追加匹配的 ID,并将其追加到新列表中。
我真的不知道怎么解决这个问题!
我很感激解决这一挑战的每一种新方法! 谢谢!
最佳答案
编辑 2:
如果您想遍历列表并附加到输出(使用您的示例):
words = ['ab', 'cd', 'ef']
abfrage_list = []
for w in words:
# Generate a query
query = """ SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE BO_BEMERKUNG LIKE '%%%s%%' """ % w
# Execute that query and get results
cur.execute(query)
result_all = cur.fetchall()
# Add those results to your final list
for i in result_all:
abfrage_list.append(i)
编辑:
对于具有多个 like
的示例:
query = """ SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE BO_BEMERKUNG LIKE '%ab%'
OR O_BEMERKUNG LIKE '%cd%'
OR O_BEMERKUNG LIKE '%ef%' """
query = """ SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE {params}""".format(
params=" OR ".join("BO_BEMERKUNG LIKE '%%%s%%' \n" % w for w in wortliste)
)
print(query)
打印:
SELECT BO_INDEX FROM GeoTest.dbo.Tabelle_Bohrung
WHERE BO_BEMERKUNG LIKE '%Bruch%'
OR BO_BEMERKUNG LIKE '%Verwerfung%'
您的占位符不包含单词列表中的任何项目,请使用:
placeholders = ','.join("'%s'" % w for w in wortliste)
例如:
wortliste = ['Bruch', 'Verwerfung']
print(','.join(['%s'] * len(wortliste)))
print(','.join("'%s'" % w for w in wortliste))
打印:
%s,%s
'Bruch','Verwerfung'
关于python - 将字符串列表提供给 sql 查询 [Python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36178409/