【问题标题】:generate sql file with python (for mysql)用python生成sql文件(用于mysql)
【发布时间】:2014-05-31 21:56:28
【问题描述】:

我需要在 txt 文件中写入所有值的 sql 语句,以便稍后将其导入 mysql 数据库。

  • 一些背景信息: 我最近在 python 中创建了一个程序,它读取一个 csv 文件并将数据插入到远程 mysql 数据库中。 该程序除了插入语句外,还执行了几个选择语句,以收集一些信息,如主键、最大 id 等。

  • 我一般需要做的事情: 由于整个过程非常耗时,我希望有一种方法可以将所有语句写入 .sql 文件中,这样我就可以通过 PhpMyAdmin 将其导入 mysql 数据库。

  • 我尝试了什么以及我卡在哪里: 到目前为止,我可以通过连接文本来生成 sql 语句。 但我被困在需要转义字符的地步。

在 SQL Server 中,我可以在 N'' 之间包含任何文本,它会按原样接受它。在 MySQL 中是否有类似的东西?

SQL server 中的示例:N'我的转义文本不受单引号 ->' 或双引号“'”的影响

请注意,我用 N'' 包围了文本。

提前致谢!

【问题讨论】:

  • 手动执行这些查询有什么意义? 显然这将比您当前的设置花费更多时间。你的问题背后有什么逻辑吗?
  • 你为什么玩文字游戏?丝毫没有改变意思。
  • 抱歉,说“通过 PhpMyAdmin 导入”而不是“通过 PhpMyAdmin 手动执行”会更正确。我只想创建 sql 文件,这样我就可以把它交给另一个只知道如何将 sql 文件导入数据库的用户。
  • 正如我所说,我查询数据库数千次,然后选择或插入记录。这让我慢了很多。有时连接被中断,这会破坏整个过程..我必须重新开始。这就是为什么我需要在本地创建 .sql 文件,然后将其上传到 PhpMyAdmin。

标签: python mysql sql escaping character


【解决方案1】:

您将想要学习如何使用准备好的语句。它们为您解决了几个问题,包括转义字符和防止 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');

【讨论】:

  • 感谢rootbeer277的回答。如何将其写入文本文件?我假设“执行”会尝试将语句执行到数据库,对吗?
  • 您不要将 SQL 语句放在文本文件中,而是将它们放在 Python 脚本中。然后 Python 脚本读取文本文件,准备好的语句自行处理转义。你使用什么库来让 Python 与你的 MySQL 数据库通信? MySQLdb 很流行。
  • 我想我误解了你的问题。我已经编辑了我的答案。
猜你喜欢
  • 2012-02-22
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多