2010-03-13 306 views
3

使用python访问MySQL数据库,并且由于引号不在变量周围,即时通讯中获取未知列。下面Python:在字符串周围插入双引号或单引号

代码:

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

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

回答

10

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

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

请注意逗号。

-4

如果这纯粹是一个字符串处理的问题,答案是tojust把它们串在:

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

这是典型的用例为什么Python支持两种类型的引号。

但是,正如其他答案&评论指出的那样,在这种情况下,与SQL有关的问题是相关的。

+0

虽然SQL指定字串,单引号,因此单引号和双引号有也应该是交换 – 2010-03-13 16:29:57

+1

,这个代码引入了非常不必要的安全性h OLE。 – 2010-03-13 17:37:55

+0

@Ian - 谢谢,不知道关于SQL。显然我不明白!我已经编辑过。 – 2010-03-13 20:53:02

5

Python会自动为你做这个,如果你使用的数据库API:

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

使用DB API,这意味着Python会弄清楚是否使用引号或没有了,也意味着你不吨有担心SQL注入攻击,在您的s变量恰好包含,比如说情况下,

value'); drop database; ' 
相关问题