我们尝试使用 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不支持DEFAULT nextval(...)
-nextval()
是一个特定于Postgres的函数,不是SQLite数据库的一部分。
我相信,您需要重写CREATE TABLE
语句才能使用AUTOINCREMENT
。
披露:我是企业数据库(EDB(员工