【问题标题】:How can I load a sql "dump" file into sql alchemy如何将 sql“转储”文件加载到 sql alchemy
【发布时间】:2010-05-13 03:23:29
【问题描述】:

我有一个大的 sql 转储文件 ... 有多个 CREATE TABLEINSERT INTO 语句。有没有办法一次将这些全部加载到 SQLAlchemy sqlite 数据库中。我计划在创建表之后使用来自sqlsoup 的内省 ORM。但是,当我使用 engine.execute() 方法时,它会抱怨:sqlite3.Warning: You can only execute one statement at a time.

有没有办法解决这个问题。也许用正则表达式或某种解析器拆分文件,但我不知道足够的 SQL 来获取正则表达式的所有情况。

任何帮助将不胜感激。

编辑: 因为这看起来很重要......转储文件是使用 MySQL 数据库创建的,因此它有很多命令/语法 sqlite3 无法正确理解。

【问题讨论】:

  • 你为什么要通过 sqlalchemy?只需将转储文件直接加载到数据库中即可。
  • 我希望使用 sqlalchemy/sqlite3 的 'in-memory' 功能
  • 在内存中,在swap中,在scratch DB文件中,有什么区别吗?
  • 转储语法的示例将提供更具体的答案。

标签: python sql sqlalchemy


【解决方案1】:

“或某种解析器”
我发现 MySQL 是 MySQL 转储文件的出色解析器 :)
你自己说过:“所以它有很多 sqlite3 无法正确理解的命令/语法。”显然,SQLite 不是完成这项任务的工具。
至于您的特定错误:没有上下文(即回溯),我无话可说。 Martelli 或 Skeet 可能会跨越时空,读懂你翻译的想法,但我,没那么多。

【讨论】:

  • 尽管你讽刺这实际上是我最终做的。我将它加载到一个新的 MySQL 数据库中,然后将数据转储为 SQLite 数据库更容易读取的格式。
【解决方案2】:

MySQL 识别的 SQL 和 SQLite 中的 SQL相当不同。我建议单独转储每个表的数据,然后将数据加载到 SQLite 中的等效表中。

使用原始转储文件中给出的“CREATE TABLE”命令的子集在 SQLite 中手动创建表。

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 2011-11-16
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2012-08-01
    • 2019-03-06
    相关资源
    最近更新 更多