【问题标题】:Migrate a SQLite3 database table to MySQL with Python without dump files使用 Python 将 SQLite3 数据库表迁移到 MySQL,无需转储文件
【发布时间】:2011-01-20 21:58:34
【问题描述】:

我需要将我在 SQLite3 中创建的信息迁移到我网站上的 MySQL 数据库。该网站位于托管服务器上。我可以远程访问 MySQL 数据库。我最初认为这很容易,但我没有找到任何好的信息,而且我读到的所有内容似乎都暗示您需要转储 SQLite3 文件,使用凌乱的脚本将其转换为 MySQL 转储文件,然后导入它进入 MySQL。

(例如:Quick easy way to migrate SQLite3 to MySQL?

我的问题:阅读它并将其直接从脚本导入 MySQL 不是更好吗?我根本没有将 MySQL 与 Python 一起使用,但看起来很直观的是,最好少一些步骤来防止误读。我还试图通过不必了解 MySQL 转储文件的工作方式来节省一点时间。

如果你有一个脚本(如果可能的话是 Python)、工具或链接可以帮助我,那就太好了,但我首先关心的是如何去做。我无法实际检查所有内容(否则我只会复制和粘贴),所以我想确保我以正确的方式进行。

我正在使用 Django,也许有一个 Django 特定的方法,但我一直找不到。

【问题讨论】:

    标签: python mysql django sqlite


    【解决方案1】:

    之所以需要“凌乱”的脚本,是因为它通常是一个难以解决的问题。

    如果幸运的话,数据库之间不会出现太多架构不兼容问题。

    这些可能会有所帮助

    db_dump.py
    dbpickle.py
    What is your favorite solution for managing database migrations in django?

    【讨论】:

    • “需要“凌乱”脚本的原因是它通常是一个难以解决的问题。”...这就是我想完全跳过它的原因。如果我打开sqlite3,遍历表并逐行更新mysql表,这似乎并不混乱,但似乎没有人这样做。我的问题是为什么?
    • @Vernon,做对你来说最简单的事情。许多人似乎通过数据库转储进行迁移。您可能会找到比以往任何人都更好的方法。如果它不起作用,您可以随时返回并尝试转储:)
    • @Vernon:可能是因为您需要确保架构匹配。获取松散类型的数据并将其插入到更强类型的模式中可能会引发一些问题,并且每个应用程序可能有不同的策略来处理它们。
    • 我明白了。我正在让它为我的目的工作,但我已经可以看到模式匹配的问题。我想我只是认为已经编写了一个模块来处理它会非常“像 Python”。
    【解决方案2】:

    你试过使用 django-admin 的 dumpdata 和 loaddata 吗?

    例如转储 sqllite3 数据库

    manage.py dumpdata
    

    将 db 更改为 mysql,重新创建表并加载

    manage.py loaddata mydata.json
    

    dumpdata 默认转储 json,但您也可以将格式设置为 xml。

    或者,您可以使用 python db api 或 sqlalchemy 或 django ORM 读取整个 sqlite3 db 并将其转储到 MySQL db。

    【讨论】:

    • 我忽略了转储数据将其作为 json 格式输出的事实。这肯定会让事情变得容易得多。我试图避免将每个表作为文件加载(我不想上传整个数据库,只上传某些文件)我仍然不确定为什么不编写一个读取 sqlite3 数据库并将其上传到 mysql 的脚本。由于 sqlite3 数据库在我的计算机上,而 mysql 在托管服务器上,如果我可以一次完成所有操作,那就容易多了。如果没有,我会按照你建议的方法一一做表。
    • @vermon,是的,你可以写一个脚本,如果这很容易的话,你只需要加载一些数据
    猜你喜欢
    • 2018-10-11
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2012-02-17
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多