0

我正在使用 python 将 blogdata 保存为 sql 文件。

str = "INSERT INTO TABLENAME (id,name,con) VALUES ('%d','%s','%s')" %(id,nam,con)

这里,“con”是指包含单引号、双引号等各种内容的内容。所以文件变成了这样:

INSERT INTO TABLENAME (id,name,con) VALUES('1','first','Hi I'm XXX . "435"  'sdfsd' ')

请注意上述行的最后一部分,因为它包含不同的引号,如果我使用上述格式,则不会执行 sql 文件。解决方案是什么?如有必要,将提供更多信息。

谢谢

4

2 回答 2

1

psycopg2 具有将mogrify安全 SQL 查询输出为字符串的方法:

>>> print cur.mogrify("insert into table_name (id, name, con) values (%s, %s, %s)", ('1','first',"Hi I'm XXX"))

insert into table_name (id, name, con) values (E'1', E'first', E'Hi I''m XXX')

检查您的数据库模块以了解此方法。

于 2012-07-04T12:42:18.227 回答
1

您要做的是清理查询,以避免 sql 注入和有效查询。为此,您需要转义文字值,如字符串。有这方面的图书馆。在您的情况下,这是最不安全的选择,您可以使用repr字符串来完成这项工作。有更好的选择,不要使用这个,使用你的数据库驱动程序为你提供的东西。例如:

如果您使用的是 MySQL,您可以使用python-mysql( MySQLdb) 转义字符串,以便生成可以安全执行的 sql 文件。

>>> print a
Hi I'm XXX . "435"  'sdfsd' 
>>> import MySQLdb
>>> encoded_a = MySQLdb.escape_string(a)
>>> print encoded_a
Hi I\'m XXX . \"435\"  \'sdfsd\' 

使用时MySQLdb.escape_string,您确定字符是安全的,然后使用您正在使用的格式字符串。此外,请确保您为所有值执行此操作,而不仅仅是那些“有风险”的值。

如果您不使用 MySQL,请查看postgresql。

如果您不想直接通过 SQL 使用它,请查看 MySQLdb for MySQL 等库。

于 2012-07-04T12:46:55.500 回答