我正在使用Canari Framework在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变量,但我不能让它返回除完全匹配之外的任何东西。
答案 0 :(得分:0)
SQL LIKE运算符在值之前和/或之后需要特殊的“通配符”标记(MySQL中的“%”)(取决于您是否需要“starts with”,“endswith”或“contains”搜索)。您必须在参数周围添加这些通配符,即:
cursor.execute(statement, {'tq': "%{}%".format(target)})
另请注意,cursor.fetchall()
会将整个结果集加载到内存中,这需要MemoryError
。 cursor
个对象是可迭代的,以这种方式使用它们更安全:
cursor.execute(statement, {'tq': "%{}%".format(target)})
for row in cursor:
do_something_with(row)