我正在使用 Canari 框架在 Malteog 中构建一系列转换,扫描 MySQL 数据库并将结果作为实体返回。
除了 SQL 语句中的 LIKE 运算符,我已经得到了所有的东西。这是代码:
#===========================================================================
# Request and set target from graph
target = (request.entity.value)
#===========================================================================
# Extract message column and check against target entity
statement = (
"SELECT * FROM tableT.TTO WHERE Text LIKE %(tq)s"
)
cursor.execute(statement, { 'tq': target })
results = cursor.fetchall()
#===========================================================================
# Create response entities based on SQL output
for r in results:
e = getTTO(target)
e.From = r[0]
e.Text = r[1]
e.date = r[2]
e.iconurl = 'http://local.paterva.com/phrase.png'
response += e
它有效,但它只返回完全匹配的结果。我需要它来检查 TEXT 列以查看条目是否包含变量“target”的任何提及。我花了一天的大部分时间来获取传入的 python 变量,但我无法让它返回除完全匹配之外的任何内容。
最佳答案
SQL LIKE 运算符在值之前和/或之后需要特殊的“通配符”标记(MySQL 中的“%”)(取决于您是否想要“开始于”、“结束于”或“包含”搜索)。你必须在你的论点周围添加这些通配符,即:
cursor.execute(statement, {'tq': "%{}%".format(target)})
另请注意,cursor.fetchall()
会将您的整个结果集加载到内存中,这会请求 MemoryError
。 cursor
对象是可迭代对象,这样使用它们更安全:
cursor.execute(statement, {'tq': "%{}%".format(target)})
for row in cursor:
do_something_with(row)
关于python - 在 SQL 中搜索一个字段以查看它是否包含 python 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38200291/