【发布时间】:2020-02-01 01:29:32
【问题描述】:
我们正在尝试使用 sqlalchemy 将大表(大于本地内存空间)从 postgresql 数据库迁移到本地 sqlite3 数据库,但是在尝试在 sqlite3 数据库中创建表时遇到语法错误。阅读其他帖子,建议的修复似乎不适用于此错误。我们在这里遗漏了一些使用细节吗?
# reflect table from remote postgresql database
read_engine = create_engine('postgresql://dbusername:dbuserpassword@server/dbname')
meta = MetaData()
raw = Table('db_table', meta, autoload=True, autoload_with=read_engine)
# write table to local sqlite3 database
write_engine = create_engine('sqlite:///db_local.sqlite3')
table.create(write_engine)
这是我们得到的错误:
OperationalError: (sqlite3.OperationalError) near "(": syntax error
[SQL:
CREATE TABLE db_table (
id INTEGER DEFAULT nextval('db_table_id_seq'::regclass) NOT NULL,
created_at TIMESTAMP,
updated_at TIMESTAMP,
data TEXT,
device_key TEXT,
format TEXT,
uuid TEXT,
CONSTRAINT db_table_pkey PRIMARY KEY (id)
)
]
【问题讨论】:
-
我想 SQLite 无法解析
nextval(因为它不支持序列。您可以在执行table.create()之前调整表架构;在许多情况下,可以将 Postgres 模式适应 SQLite。 -
谢谢@9000。我找到了关于覆盖反射列docs.sqlalchemy.org/en/13/core/reflection.html 的文档,并且有效!
-
很好奇,为什么要将超过内存容量的数据从企业服务器 RDBMS Postgres 迁移到文件级(非服务器)RDBMS SQLite?
标签: python postgresql sqlite sqlalchemy