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'), )