Python:在字符串周围插入双引号或单引号
我正在用Python访问一个MySQL数据库,但因为变量周围没有引号,导致出现了“未知列”的错误。
下面是我的代码:
cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s);' % (s))
rows = cur.fetchall()
我该如何手动在变量s的值周围加上双引号或单引号呢?我尝试过用str()
函数和手动在s
周围拼接引号,但还是不行。我的SQL语句没问题,我已经仔细检查过了。
3 个回答
-5
如果这只是一个处理字符串的问题,答案就是把它们放在字符串里:
cur.execute('insert into tempPDBcode (PDBcode) values ("%s");' % (s))
这就是为什么Python支持两种引号的经典用法。
不过,正如其他回答和评论所提到的,这里还有一些和SQL相关的特别问题需要考虑。
5
如果你使用数据库API,Python会自动帮你处理这些事情:
cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s)',s)
使用数据库API的好处是,Python会自动判断是否需要加引号。而且,这样你就不用担心SQL注入攻击了,假如你的s
变量里面恰好包含了,比如说,
value'); drop database; '
10
你不应该用Python的字符串函数来构建SQL语句。这样做可能会留下SQL注入的安全隐患。你应该这样做:
cur.execute('insert into tempPDBcode (PDBcode) values (%s);', s)
注意那个逗号。