Sqlalchemy 无限制唯一匹配列类型错误

Sqlalchemy 无限制唯一匹配列类型错误,sqlalchemy,Sqlalchemy,我有这个问题,我知道这可能是更多的数据库相关,我不确定。除此之外,创建的所有模型表都很好: class OrderXPerformerxShow(MyMixin, Base): __tablename__ = 'order_x_performers_x_show' order_id = Column(Integer, ForeignKey('orders.id'), primary_key=True) performerXShow_id = Column(Integer,

我有这个问题,我知道这可能是更多的数据库相关,我不确定。除此之外,创建的所有模型表都很好:

class OrderXPerformerxShow(MyMixin, Base):
    __tablename__ = 'order_x_performers_x_show'
    order_id = Column(Integer, ForeignKey('orders.id'), primary_key=True)
    performerXShow_id = Column(Integer, ForeignKey('performer_x_show.id'), primary_key=True)
    amount = Column(Unicode(50))
    performer = relationship('PerformerXShow')
出现以下错误:

创建表格顺序\u x\u表演者\u x\u显示( 序列号不为空, 创建了没有时区的时间戳, 不带时区的修改时间戳, order_id整数不为空, “performerXShow_id”整数不为空, VARCHAR金额(50), 主键(id、订单id、performerXShow id), 外键(订单id)引用订单(id), 外键(“performerXShow_id”)引用performer_x_show(id) ) 2014-01-25 20:03:57801信息[sqlalchemy.engine.base.engine][MainThread]{} 2014-01-25 20:03:57874信息[sqlalchemy.engine.base.engine][MainThread]回滚 回溯(最近一次呼叫最后一次): 布拉布拉。。。。 sqlalchemy.exc.ProgrammingError:(ProgrammingError)没有关于“表演者x秀”的唯一专栏数据的限制

这是与…有关的

class PerformerXShow(MyMixin, Base):
    __tablename__ = 'performer_x_show'
    performer_id = Column(Integer, ForeignKey('performers.id'), primary_key=True)
    show_id = Column(Integer, ForeignKey('shows.id'), primary_key=True)
    show = relationship('Show')
    price = Column(Numeric(8, 2), nullable=False)


class Order(MyMixin, Base):
    __tablename__ = 'orders'
    customer_id = Column(Integer, ForeignKey('customers.id'), nullable=False)
    relationship('OrderXPerformerxShow')
混合是这样的:

class MyMixin(object):
    id = Column(Integer, primary_key=True, autoincrement=True)
    created = Column(DateTime())
    modified = Column(DateTime())

    __mapper_args__ = {'extension': BaseExtension()}

我认为错误描述非常详细:

“没有任何限制,你可以在专栏上发表自己的观点 表1《表演者秀》

问题是,为了使
OrderXPerformerxShow.performerXShow_id
成为
ForeighKey
,它必须引用另一个表的
unique
列(隐式唯一的PrimaryKey或具有
unique
约束的列)

原因是
performer\u x\u show
表的
PrimaryKey
是多列的,由三列组成:

  • performer\u id
  • show\u id
  • id
解决方案:仅设置
id
列a
主键
(我假设默认设置),并为其他两列创建
唯一约束

class PerformerXShow(MyMixin, Base):
    __tablename__ = 'performer_x_show'
    performer_id = Column(Integer, ForeignKey('performers.id'))
    show_id = Column(Integer, ForeignKey('shows.id'))
    show = relationship('Show')
    price = Column(Numeric(8, 2), nullable=False)

    __table_args__ = ( UniqueConstraint('performer_id', 'show_id'), )