Python:在字符串周围插入双引号或单引号

3

我正在使用Python访问MySQL数据库,由于变量周围没有引号,所以出现了“在字段中未知的列”错误。

以下是代码:

cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s);' % (s)) 
rows = cur.fetchall()

我该如何在字符串的值周围手动插入双引号或单引号? 我尝试使用 str() 并手动将引号连接到 s 周围,但仍然无法正常工作。 SQL 语句可以正常工作,我已经多次检查过我的 SQL 查询。

3个回答

10

不应该使用Python的字符串函数来构建SQL语句,这样会存在SQL注入漏洞的风险。您应该采用以下方法:

cur.execute('insert into tempPDBcode (PDBcode) values (%s);', s) 

注意逗号的使用。


5

如果您使用数据库API,Python将自动为您执行此操作:

cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s)',s) 

使用DB API意味着Python会自动判断是否需要使用引号,这也意味着您不必担心SQL注入攻击,万一您的变量包含了某些字符。
value'); drop database; '

-5
如果这只是一个字符串处理问题,答案就是将它们放入字符串中:
cur.execute('insert into tempPDBcode (PDBcode) values ("%s");' % (s)) 

这是Python支持两种引号的经典用例。

然而,正如其他答案和评论所指出的那样,在这种情况下有一些与SQL相关的问题需要考虑。


虽然 SQL 指定字符串使用单引号,但是那里的单引号和双引号应该互换。 - Ian Clelland
@Ian - 谢谢,我不知道SQL的这一点。显然我理解有误!我已经进行了编辑。 - Vicki Laidler
如果你在意SO徽章,我相信将此回答删除到-3,最终你将获得“同侪压力”徽章。 - tzot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接