sqlalchemy'((sqlite3.OperationalError)附近“(”:语法错误'

时间:2019-10-02 18:13:37

标签: python postgresql sqlite sqlalchemy

我们正在尝试使用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)
)

]

1 个答案:

答案 0 :(得分:0)

我认为问题在于SQLite不支持DEFAULT nextval(...)nextval()是Postgres特定的函数,不属于SQLite数据库。

我相信,您需要重写CREATE TABLE语句才能使用AUTOINCREMENT

披露:我是一名EnterpriseDB (EDB)员工