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

Posted

技术标签:

【中文标题】Python:在字符串周围插入双引号或单引号【英文标题】:Python: inserting double or single quotes around a string 【发布时间】:2011-01-27 04:44:06 【问题描述】:

我正在使用 python 访问 mysql 数据库,并且由于变量周围没有引号,我在字段中得到了一个未知列。

代码如下:

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

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

【问题讨论】:

【参考方案1】:

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

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

这就是 Python 支持这两种引号的经典用例。

但是,正如其他答案和 cmets 所指出的那样,在这种情况下存在与 SQL 相关的特定问题。

【讨论】:

虽然SQL在字符串周围指定了单引号,所以这里的单引号和双引号应该互换 @Ian - 谢谢,不知道 SQL。显然我没有正确理解!我已经进行了相应的编辑。 如果您关心 SO 徽章,我相信通过在 -3 处删除此答案,您最终会获得“同行压力”徽章。【参考方案2】:

如果您使用数据库 API,Python 会自动为您执行此操作:

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

使用 DB API 意味着 python 将判断是否使用引号,也意味着您不必担心 SQL 注入攻击,以防您的 s 变量恰好包含,例如,

value'); drop database; '

【讨论】:

【参考方案3】:

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

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

注意逗号。

【讨论】:

以上是关于Python:在字符串周围插入双引号或单引号的主要内容,如果未能解决你的问题,请参考以下文章

python基础

python基础

用双引号或单引号打印 HTML 和 PHP 代码

Python中的单引号与双引号[关闭]

perl中的单引号和双引号

数据库插入语句单引号和双引号区别