【问题标题】:How should I import my legacy MYSQL db into my new Django project which will use Postgres?我应该如何将我的旧 MYSQL 数据库导入我将使用 Postgres 的新 Django 项目?
【发布时间】:2011-01-24 10:04:30
【问题描述】:

我目前有一个使用 MySQL 4.x 架构的站点,该站点使用 PHP 作为后端。我目前在 Django 领域,到目前为止我喜欢 Postgres(这意味着我对两者都是菜鸟)。

将表中的数据(整个数据库的转储文件约为 200 MB)导入我的新项目中的最简单方法是什么?我目前在我的新站点上没有任何设置,我即将在我的服务器上安装 postgres。

需要注意的一点是,目前 MySQL 设置不正确,因此数据存储为 LATIN1,我需要在进行任何导入之前使用 iconv 将其转换为真正的 Cyrillic/UTF-8,这很难想象出来,这是下一步。

【问题讨论】:

    标签: mysql django postgresql


    【解决方案1】:

    Fixtures 是您最好的选择。从 mysql 转储数据,然后将其加载到 postgres 中。

    【讨论】:

    • 我的项目根目录中有一个应用程序articles。该模型已经创建,我在该模型中有一个 Category 类。我在articlesINSERT INTO articles_category ( title, slug ) VALUES ('foo, 'bar' ) 中创建了sql/category.sql,在syncdb 之后似乎没有插入它。这仅在表不存在时运行吗?
    • 是的,文档说“Django 提供了一个钩子,用于传递数据库任意 SQL,当你运行 syncdb 时,它会在 CREATE TABLE 语句之后执行”。
    【解决方案2】:

    这是一些工作,但可能:

    1. 制作一个 PostgreSQL 兼容的转储:

      mysqldump --compatible=postgresql --databases db1 > dump.sql

    2. 使用创建 PostgreSQL 数据库 UTF8

    3. 告诉数据库你即将 导入 latin1 内容:

      将 CLIENT_ENCODING 设置为“LATIN1”;

    4. 导入转储并进行一些测试。

    祝你好运!

    【讨论】:

      【解决方案3】:

      我要扔掉一些疯狂的东西。运行您的同步数据库以在 Postgres 数据库中创建您的表。然后使用 Storm ORM (storm.canonical.com),它支持多数据库,可以在一个数据库中打开并将其保存到另一个数据库。我很想知道这是否有效。

      注意:您可以通过 Django 1.2 中的多数据库支持来做到这一点。可能在 SQLAlchemy 中也是可能的。

      【讨论】:

        猜你喜欢
        • 2013-10-24
        • 2013-05-17
        • 2022-09-23
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多