代码之家  ›  专栏  ›  技术社区  ›  SmCaterpillar

如何使用sqlacalchemy创建带有json列的sqlite表?

  •  2
  • SmCaterpillar  · 技术社区  · 6 年前

    根据 this answer sqlite支持3.9版以后的JSON数据。我将3.24版本与sqlacalchemy(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 回复  |  直到 6 年前
        1
  •  3
  •   Shawn    6 年前

    使用文本列。sqlite有一个 JSON extension 有一些用于处理JSON数据的函数,但没有专用的JSON类型。