SQLAlchemy,添加一列ARRAY类型抛出我“无法渲染类型为<class”的元素sqlalchemy.dialects.postgresql.base.array'=“”>“

时间:2016-04-11 15:41:00

标签: python flask sqlalchemy

我正在尝试在我的sqlAlchemy Base类中添加一个简单的字符串/整数数组类型列,但没有运气。每次它给我一个异常,它无法呈现数组类型。我不明白为什么。我错过了什么?

这是我的班级:

class Item_detail(Base):
    __tablename__  = 'item_detail'
    id             = Column(Integer, primary_key=True)
    detail_label   = Column(String)
    images_link    = Column(ARRAY(String()), default=[])

engine = create_engine('sqlite:///bifi.db')

from sqlalchemy.orm import sessionmaker
session = sessionmaker()
session.configure(bind=engine)
Base.metadata.create_all(engine)

然而,sqlalchemy告诉我:

File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 79, in _compiler_dispatch
    raise exc.UnsupportedCompilationError(visitor, cls)
sqlalchemy.exc.CompileError: (in table 'item_detail', column 'images_link'): Compiler <sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler object at 0x10f9aa210> can't render element of type <class 'sqlalchemy.dialects.postgresql.base.ARRAY'>

我不明白为什么我无法渲染它。我尝试了不同的数组类型而没有运气。

1 个答案:

答案 0 :(得分:0)

SQLAlchemy的ARRAY当前可以在PostageSQL后端(SQLAlchemy 1.3.18)中使用。在“ sqlalchemy / sql / sqltypes.py”上写的关于ARRAY的描述说:

此类型用作所有ARRAY操作的基础。 但是,当前仅PostgreSQL后端支持 用于SQLAlchemy中的SQL数组

因此,如果要使用SQLAlchemy的ARRAY,则应安装PostageSQL和psycopg2。然后按如下所示创建引擎。

DATABASE = 'postgresql'
USER = 'postgres'
PASSWORD = 'your password'
HOST = 'localhost'
PORT = '5432'
DB_NAME = 'postgres'
engine = create_engine(f'postgresql://{USER}:{PASSWORD}@{HOST}:{PORT}/{DB_NAME }')