import pypyodbc as pyodbc
model_name = 'test'
model_name1 = Master_Cursor.execute("select col1,col2,col3 from tablename where col3 like '%s' order by col3" %(model_name)).fetchall()
上面的代码返回一条匹配model_name = test
的记录。
我如何找回model_name=123test123,abctestabc,ABCtestABC
等其他记录?
基本上,寻找
select col1,col2,col3 from tablename where col3 like '%test%'.
答案 0 :(得分:2)
不使用字符串格式将变量插入到查询中,这会让您面临SQL注入的风险(请参阅例如What is SQL injection?)而不是the documentation ,您应该使用?
来表示查询中的变量,并让库转义并适当地插入它们。
接下来,如果你想要更宽松的匹配,你需要实际包含通配符和model_name
。目前你正在创建:
select col1,col2,col3 from tablename where col3 like 'test' order by col3
在将传递给查询之前,您需要使用通配符围绕model_name
,例如使用'%%%s%%' % model_name
(请注意,您需要重复每个%
以在printf
-style formatting中)或其中一个更现代的字符串格式选项。
在这种情况下,例如(使用str.format
):
model_name1 = Master_Cursor.execute(
"select col1, col2, col3 from tablename where col3 like ? order by col3",
("%{}%".format(model_name),)
).fetchall()
答案 1 :(得分:0)
pattern = "%"+model_name+"%"
db.execute("select col1,col2,col3 from tablename where col3 like :s order by col3" ,{"s":pattern}).fetchall()
答案 2 :(得分:-3)
model_name1 = Master_Cursor.execute("select col1,col2,col3 from tablename where col3 like '%%%s%%' order by col3" %(model_name)).fetchall()
使用2%来表示真实的百分比字符