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

3 投票
3 回答
8398 浏览
提问于 2025-04-15 20:23

我正在用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) 

注意那个逗号。

撰写回答