有没有一种简单的方法可以在Python中逐表地将数据库数据从SQLite迁移到Postgres



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

数据库有点大,有1.3gb

您有很多选择。最简单的可能是使用Sqlite的";。转储";shell命令生成SQL。有很多选择或方法可以做到这一点。你可以使用";。转储";它转储所有的模式和数据,然后对转储文件进行任何修改,然后将其加载到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外部数据包装器。然后连接到psqldb,使用fdw连接sqlite数据库,并使用psqlshell从一个数据库直接复制到另一个数据库。

https://github.com/pgspider/sqlite_fdw

最新更新