【发布时间】:2015-09-24 12:37:57
【问题描述】:
使用SQLAlchemy,我想继承一个具有多个主键的模型,例如:
from sqlalchemy import (Column, Integer, create_engine, ForeignKey,
ForeignKeyConstraint, UniqueConstraint)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declared_attr
#engine = create_engine('sqlite:///memory')
engine = create_engine('postgres:///memory')
Base = declarative_base()
class Test(Base):
__tablename__ = 'test'
id = Column(Integer, primary_key=True)
id2 = Column(Integer, primary_key=True)
class Test2(Test):
__tablename__ = 'test2'
id = Column(Integer, ForeignKey('test.id'), primary_key=True)
id2 = Column(Integer, ForeignKey('test.id2'), primary_key=True)
@declared_attr
def __table_args__(cls):
return (
UniqueConstraint(cls.id, cls.id2),
ForeignKeyConstraint([cls.id, cls.id2],
[Test.id, Test.id2]),
)
@declared_attr
def __mapper_args__(cls):
return {
'inherit_condition': (cls.id == Test.id and cls.id2 == Test.id2),
}
Base.metadata.create_all(engine)
继承只使用一个主键列,这不是我的用例。我有两个字符串主键列,我使用SQLAlchemy 的多态模式。我没有写我所有的代码,不管有没有多态配置,问题都是一样的。
此代码适用于sqlite,但不适用于postgres,__table_args__ 在这里没用,我错过了什么?
问候
【问题讨论】:
标签: postgresql python-3.x sqlalchemy