繁体   English   中英

Python3:使用变量处理sqlite3 SELECT

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM