如何在python中将包含单引号或双引号的数据插入数据库?

时间:2019-02-24 19:46:09

标签: python mysql sql web-scraping

我有一个python程序,我想将数据插入表中(使用insert into语句)。我从网络(网络抓取)接收数据,并且数据包含单引号和双引号。众所周知,MySQL允许在表中插入单引号和双引号,因此错误并非来自数据库。当我在python中使用该数据时出现问题,并出现错误。 不管我在python的字符串中使用单引号还是双引号(插入语句值),由于数据(包含单引号或双引号)两种方式都会出现错误。我在脚本中使用MySQL和Connector / python我导入mysql。希望您能收到,对不起英语不好。

1 个答案:

答案 0 :(得分:0)

有关此行为的最可能解释是SQL注入漏洞。 (这只是一个猜测,因为我们正在猜测未见的代码;仅是对行为的描述。)

简短的答案是将准备好的语句绑定占位符

一起使用

https://pynative.com/python-mysql-execute-parameterized-query-using-prepared-statement/

如果由于某些原因而无法实现,那么至少要对SQL文本中包含的任何潜在不安全值进行适当的转义,以使其安全地包含在其中

(小鲍比表https://xkcd.com/327/中的单引号不会转义。)

例如,此SQL将引发错误,因为第二个单引号引起了字符串文字,并且在字符串文字“ s wrong”之后的内容在SQL方面是胡言乱语的:

INSERT INTO mytab (mycol) VALUES ( 'It's wrong' )  
                                      ^

但这会起作用:

INSERT INTO mytab (mycol) VALUES ( 'It''ll work' )  
                                      ^^

因为在字符串文字中的单引号被转义了,所以在它前面加上了另一个单引号。


OWASP项目很好地概述了SQL注入。

https://www.owasp.org/index.php/SQL_Injection

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet