如何使用SQLAlchemy创建带有JSON列的SQLite表?

时间:2018-07-15 20:58:22

标签: python json sqlite sqlalchemy

根据this answer,SQLite自3.9版开始支持JSON数据。我将3.24版与SQLALchemy(1.2.8)和Python 3.6结合使用,但无法创建任何包含JSON列的表。

我缺少什么或做错了什么?下面给出了一个最小的(不可行的)示例:

import sqlalchemy as sa
import os
import tempfile

metadata = sa.MetaData()

foo = sa.Table(
    'foo',
    metadata,
    sa.Column('bar', sa.JSON)
)

tmp_dir = tempfile.mkdtemp()
dbname = os.path.join(tmp_dir, 'foo.db')

engine = sa.create_engine('sqlite:////' + dbname)

metadata.bind = engine

metadata.create_all()

此操作失败,出现以下错误:

sqlalchemy.exc.CompileError: (in table 'foo', column 'bar'): Compiler <sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler object at 0x7f1eae1dab70> can't render element of type <class 'sqlalchemy.sql.sqltypes.JSON'>

谢谢!

1 个答案:

答案 0 :(得分:3)

使用TEXT列。 Sqlite的JSON extension具有一些用于处理JSON数据的功能,但没有专用的JSON类型。