python - 将字符串列表提供给 sql 查询 [Python]

标签 python mysql list

我在 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/

相关文章:

mysql - 唯一名称(第 1 列、第 2 列)

php - 从选项中显示错误答案

python - 循环结构中的加速

.net - 使用 MVC 使用列表作为查询字符串参数

python - Convolution2D + LSTM 与 ConvLSTM2D

python - Factory_boy 不创建不同的用户对象 Django

python - 使用 src/package 目录结构运行 unittest

python - Seaborn PairPlot 的正确对角线 Y 轴

mysql - sql查询案例示例

c++ - C++中的结构和模板类