0
我有一個類Consignments
在這個類我有一個Sims
類的關係:如何插入帶有多對多關係的記錄?
class Consignments(Base):
__tablename__ = "consignments"
id = Column(
Integer,
Sequence('consignments_id', optional=True),
primary_key=True
)
consignment_agents_id = Column(Integer, ForeignKey(Agents.id))
consignment_agent = relationship(
Agents,
primaryjoin=Agents.id == consignment_agents_id,
uselist=False,
backref="consignments"
)
consignment_teamleader_id = Column(Integer, ForeignKey(Agents.id))
consignment_teamlead = relationship(
Agents,
primaryjoin=Agents.id == consignment_teamleader_id,
uselist=False,
backref="team_consignments"
)
consignment_timestamp = Column(DateTime, index=True)
created_by_agent_id = Column(Integer, ForeignKey(Agents.id))
created_by_agent = relationship(
Agents,
primaryjoin=Agents.id == created_by_agent_id,
uselist=False,
backref="created_consignments"
)
transactions_id = Column(Integer, ForeignKey(Transactions.id))
transaction = relationship(Transactions, backref="consignments", uselist=False)
status = Column(Unicode(40), index=True)
complete_stamp = Column(DateTime, index=True)
sims = relationship(Sims, secondary=consignment_to_sim, backref="consignments")
注意:sims
的關係consignment_to_sim
這是一個表:
consignment_to_sim = Table(
"consignment_to_sim",
Base.metadata,
Column("sims_iccid", Unicode(40), ForeignKey("sims.iccid"), primary_key=True, onupdate="cascade"),
Column(
"consignments_id",
Integer,
ForeignKey("consignments.id"),
primary_key=True
)
)
現在我綁添加一種貨物如:
@task
def do_consignment_task(store):
s = sqlahelper.get_session()
consign = store.gen_consignment()
ca = Agents.by_id(store.consignment_agents_id)
consign.consignment_agents_id = store.consignment_agents_id
consign.consignment_teamleader_id = ca.ou[0].lead_agents_id
consign.consignment_timestamp = func.now()
consign.created_by_agent_id = store.consignment_agents_id
consign.complete_stamp = func.now()
consign.status = "SUCCESS"
for sim in store.sims:
consign.sims.append(sim)
s.add(consign)
transaction.savepoint()
store.sims
是一個模擬列表。
上面的代碼給我下面的錯誤:
IntegrityError: (IntegrityError) (1062, "Duplicate entry '1302-37050' for key 'PRIMARY'", None)
我都試過,沒有運氣從這個question建議。我也看過這個question
1 -我在做什麼錯在我的實例?
2 -如何插入多對多表格?我可以使用sqlalchemy.sql.expression.insert插入多對多嗎?
只是爲了以防萬一,這裏是全traceback
這是一個奇怪的錯誤消息。多對多表的主鍵應該是複合的,我認爲你做了,但它只顯示重複條目的單個值? – TheSoundDefense
這對我來說也是奇怪的,我無法弄清楚......如果你看看追溯,37050應該是第二個值。 – Renier
你有沒有想過這個? – TheSoundDefense