我必须进行一个查询,该查询包含带有通配符'%'的SQL LIKE
子句。它还具有用户输入数据。
查询的形式:
SELECT * FROM my_table
WHERE x = <user_input>
AND y NOT LIKE '%abc%'
如何在Python的psycopg2
模块中做到这一点?
以下代码不起作用:
cur.execute(
"""SELECT * FROM my_table
WHERE x = %s
AND y NOT LIKE '%abc%'
""", (user_input,)
)
可能是由于LIKE
子句中的通配符。
关于我应该如何做的任何建议?预先感谢。
答案 0 :(得分:1)
您可以简单地通过变量传递模式,例如:
MyModel.db['CALL get_info("arg")').first
# => {col: val, col2: val}
MyModel.db['CALL get_info("arg")').first
# => Sequel::DatabaseDisconnectError: Mysql2::Error: Commands out of sync; you can't run this command now
from /usr/local/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/lib/mysql2/client.rb:120:in `_query'
或者,通过将模式中的pattern = '%abc%'
cursor.execute(
"""SELECT * FROM my_table
WHERE x = %s
AND y NOT LIKE %s
""", (user_input, pattern)
)
字符加倍来对其进行转义(因此该函数不会将它们视为占位符):
%