用Python生成SQL文件(适用于MySQL)

0 投票
1 回答
8163 浏览
提问于 2025-04-18 08:09

我需要把一些SQL语句写进一个txt文件里,里面的所有值都要进行转义,这样我才能把它们导入到mysql数据库中。

  • 一些背景信息: 我最近用Python写了一个程序,这个程序可以读取一个csv文件,然后把数据插入到一个远程的mysql数据库里。除了插入语句,这个程序还会执行一些查询语句,以便收集一些信息,比如主键、最大ID等等。

  • 我一般需要做的事情: 因为整个过程比较耗时,我希望能把所有的语句写进一个.sql文件里,这样我就可以通过PhpMyAdmin把它导入到mysql数据库中。

  • 我尝试过的和遇到的问题: 到目前为止,我可以通过拼接文本来生成SQL语句。但是我卡在了需要转义字符的地方。

在SQL Server中,我可以把任何文本放在N''之间,它就会按原样接受。MySQL中有没有类似的做法?

在SQL Server中的例子:N'My escaped text isn't affected by single quote ->' 或者双引号 " '

注意我把文本用N''包围起来了。

谢谢大家的帮助!

1 个回答

0

你需要学习如何使用预处理语句。这可以帮你解决几个问题,比如处理特殊字符和防止SQL注入攻击。下面是一个使用MySQLdb的例子:

myValues = (value1, value2)
sql = "INSERT INTO myTable (column1, column2) VALUES (%s, %s)"
cursor.execute(sql, myValues)

===

抱歉,我好像误解了你的问题。你并不是想写一个Python脚本来读取文件并将数据插入数据库。你是想用Python生成一个SQL文档,这样你就可以直接导入到数据库里。

我建议你使用Python来查询数据库,但如果你真的想制作一个SQL文档,所有的数据值都需要用单引号括起来。如果你的数据中有单引号,就要用两个单引号来转义:

INSERT INTO myTable (column1, column2) VALUES ('My data', 'John''s data');

其他特殊字符,比如分号(;),如果放在单引号里面就会被忽略。

如果你担心表名和列名中的特殊字符,可以在它们周围加上反引号:

INSERT INTO `myTable` (`column1`, `column2`) VALUES ('My data', 'John''s data');

撰写回答