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

SmC*_*lar 3 python sqlite json sqlalchemy

根据此答案, 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()
Run Code Online (Sandbox Code Playgroud)

失败,出现以下错误:

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'>

谢谢!

Sha*_*awn 5

使用文本列。Sqlite具有JSON扩展,其中包含一些用于处理JSON数据的功能,但没有专用的JSON类型。