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

时间:2010-03-13 16:20:21

标签: python sql quotes

我正在使用python访问MySQL数据库并且因为引号不在变量周围而在字段中获取未知列。

以下代码:

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

如何在s的值周围手动插入双引号或单引号? 我尝试使用str()并手动连接s周围的引号,但它仍然不起作用。 sql语句工作正常iv双重和三重检查我的SQL查询。

3 个答案:

答案 0 :(得分:10)

您不应该使用Python的字符串函数来构建SQL语句。您冒着留下SQL注入漏洞的风险。你应该这样做:

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

请注意逗号。

答案 1 :(得分:5)

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

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

使用DB API意味着python将确定是否使用引号,并且还意味着您不必担心SQL注入攻击,以防您的s变量恰好包含,比方说,

value'); drop database; '

答案 2 :(得分:-5)

如果这纯粹是一个字符串处理问题,答案就是将它们放在字符串中:

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

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

然而,正如其他答案&评论指出,在这种情况下存在与SQL相关的问题。