在SQL中搜索字段以查看它是否包含python变量

时间:2016-07-05 09:52:00

标签: python mysql python-2.7

我正在使用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变量,但我不能让它返回除完全匹配之外的任何东西。

1 个答案:

答案 0 :(得分:0)

SQL LIKE运算符在值之前和/或之后需要特殊的“通配符”标记(MySQL中的“%”)(取决于您是否需要“starts with”,“endswith”或“contains”搜索)。您必须在参数周围添加这些通配符,即:

cursor.execute(statement, {'tq': "%{}%".format(target)})

另请注意,cursor.fetchall()会将整个结果集加载到内存中,这需要MemoryErrorcursor个对象是可迭代的,以这种方式使用它们更安全:

cursor.execute(statement, {'tq': "%{}%".format(target)})
for row in cursor:
    do_something_with(row)