postgresql – SQLAlchemy复合类型
SQLAlchemy是否支持PostgreSQL的复合类型(
http://www.postgresql.org/docs/devel/static/rowtypes.html)?我发现它有类似的东西(sqlalchemy.orm.composite),但据我所知,它对我的??目的来说还不够好.
我想创建一个单独的类型,例如具有值和货币的金额,然后能够重复引用它,并且可能多次从同一个类引用它: class Transfer(base): __tablename__ = "transfer" source_amount = Column(Amount) target_amount = Column(Amount) 我见过的所有例子(例如this one)都要求我指定列的名称,这使得上述方法不可能(列名称会发生??冲突). 此外,我宁愿每个Amount有一列而不是两个(因为没有货币,价值实际上没有多大意义,我宁愿数据库负责永远不要分离或混合它们).似乎Postgres可以做到这一点,我只需要一种方法向SQLAlchemy解释我需要什么.我试过阅读http://docs.sqlalchemy.org/en/latest/core/custom_types.html,但它似乎专注于扩充现有的类型,而不是创建新的复合材料(我不知道在impl下放什么). 也许我应该放弃SQLAlchemy并直接与psycopg2沟通?它有一个psycopg2.extras.register_composite函数,但是一旦我这样做,我仍然不知道如何说服SQLAlchemy识别注册.我可能不得不以某种方式将光标从psycopg2传递给SQLAlchemy,但我不知道该怎么做. 解决方法
sqlalchemy本身不支持postgresql复合类型.
但是,sqlalchemy_utils本机支持postgresql复合类型. 以下是他们的文档中的示例: from collections import OrderedDict import sqlalchemy as sa from sqlalchemy_utils import CompositeType,CurrencyType class Account(Base): __tablename__ = 'account' id = sa.Column(sa.Integer,primary_key=True) balance = sa.Column( CompositeType( 'money_type',[ sa.Column('currency',CurrencyType),sa.Column('amount',sa.Integer) ] ) ) 用法: session.query(Account).filter(Account.balance.amount > 5000) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |