【问题标题】:Is there an easy way to migrate database data from SQLite to Postgres table by table in Python?有没有一种简单的方法可以在 Python 中逐个表地将数据库数据从 SQLite 迁移到 Postgres?
【发布时间】:2021-09-19 23:45:23
【问题描述】:

在 Python 中是否有一种简单的方法可以逐表从 SQLite 迁移到 Postgres?我正在使用 Peewee,可以生成 SQLite 转储,但没有可用于导入 Postgres 的 psql。 Python中有一个包吗?我也使用 Peewee 作为 ORM 并且涵盖了生成模式位,问题是数据。

数据库有点大,1.3gb

【问题讨论】:

  • Python 有全局模块sqlite3 可以直接使用Sqlite。对于 Postgres 方面,有 psycopog2。您可以使用第一个退出 SQLite 并转移到第二个以进入 Postgres。还有pgloader 特别是Sqlite->Postgres

标签: python postgresql sqlite peewee


【解决方案1】:

你有很多选择。最简单的可能是使用 Sqlite 的“.dump” shell 命令来生成 SQL。有许多选项或方法可以做到这一点。您可以使用“.dump”转储所有架构和数据,然后对转储文件进行任何修改,然后将其加载到 postgres 中。

只是将表“my_table”的行数据转储为 CSV,您可以使用:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output model_data.csv
sqlite> SELECT * FROM my_table;

然后您可以使用 Postgres 批量加载 CSV:

COPY table_name(col1, ...)
FROM 'model_data.csv'
DELIMITER ','
CSV HEADER;

Peewee 可以以多种格式转储数据,这是一种选择:

models = [User, Tweet]
for model in models:
    outfile = '%s.csv' % model._meta.table_name
    with open(outfile, 'w', newline='') as f:
        writer = csv.writer(f)
        row_iter = model.select().tuples().iterator()
        writer.writerows(row_iter)

另一种选择是使用 Postgres 外部数据包装器。然后连接到 psql db,使用 fdw 附加 sqlite 数据库,并使用 psql shell 从一个直接复制到另一个。

https://github.com/pgspider/sqlite_fdw

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 2015-04-17
    • 2021-09-21
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多