我正在使用python访问MySQL数据库并且因为引号不在变量周围而在字段中获取未知列。
以下代码:
cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s);' % (s))
rows = cur.fetchall()
如何在s的值周围手动插入双引号或单引号?
我尝试使用str()
并手动连接s
周围的引号,但它仍然不起作用。
sql语句工作正常iv双重和三重检查我的SQL查询。
答案 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相关的问题。