[英]Python3: dealing with sqlite3 SELECT using variables
我尝试使用LIKE
参数获取SQL选择,但是它仅提供了我的选择:
false,"error_code":400,"description":"Bad Request: Message text is empty"
这是我的代码:
textvar = message.text
c.execute("SELECT * FROM run WHERE act LIKE '+textvar+'")
res = c.fetchone()
bot.send_message(message.chat.id, res)
print textvar
给我一个预期的sting
,取自message.text
。 我试图在没有LIKE
情况下获取一些数据,而且看来其他一切工作都很好。
我究竟做错了什么?
您正在测试在act
列中是否存在字符串'+textvar+'
( 不是来自变量textvar
!的值)。 没有这样的列。
不要使用字符串插值法将变量插入SQL查询中,因为这样会使您更容易受到SQL注入攻击。 使用查询参数:
textvar = '%{}%'.format(message.text)
c.execute("SELECT * FROM run WHERE act LIKE ?", (textvar,))
请注意,我确实使用字符串插值将%
通配符添加到字符串中,以确保LIKE
在列中的任何位置搜索文本。 没有通配符, LIKE
只不过是一个相等性测试。 %
匹配0个或多个任意字符, _
恰好匹配1个任意字符。 请参阅LIKE
操作员文档 。
因此,对于您的示例文本'sting'
,上面的代码生成字符串'%sting%'
,然后数据库适配器负责正确的引用并执行SELECT * FROM run WHERE act LIKE '%sting%'
SQL查询您的数据库。 其中任何行act
列包含子sting
将匹配并返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.