Python:在字符串周围插入双引号或单引号
问题描述:
使用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查询。
答
您不应该使用Python的字符串函数来构建SQL语句。您可能会面临留下SQL注入漏洞的风险。您应该这样做:
cur.execute('insert into tempPDBcode (PDBcode) values (%s);', s)
请注意逗号。
答
如果这纯粹是一个字符串处理的问题,答案是tojust把它们串在:
cur.execute('insert into tempPDBcode (PDBcode) values ("%s");' % (s))
这是典型的用例为什么Python支持两种类型的引号。
但是,正如其他答案&评论指出的那样,在这种情况下,与SQL有关的问题是相关的。
答
Python会自动为你做这个,如果你使用的数据库API:
cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s)',s)
使用DB API,这意味着Python会弄清楚是否使用引号或没有了,也意味着你不吨有担心SQL注入攻击,在您的s
变量恰好包含,比如说情况下,
value'); drop database; '
虽然SQL指定字串,单引号,因此单引号和双引号有也应该是交换 – 2010-03-13 16:29:57
,这个代码引入了非常不必要的安全性h OLE。 – 2010-03-13 17:37:55
@Ian - 谢谢,不知道关于SQL。显然我不明白!我已经编辑过。 – 2010-03-13 20:53:02