Sqlalchemy重复输入

时间:2015-06-02 06:35:13

标签: python mysql sqlalchemy

我有以下代码:

    purchased_offer = session.query(PurchasedOffer).filter_by(purchased_offer_id=purchased_offer_id).first()
    used_offer = UsedOffer(purchased_offer)
    session.add(used_offer)
    session.delete(purchased_offer)

我只是将purchased_offer转移到used_offer表格,然后删除purchased_offer

两个表格UsedOfferPurchasedOffer仅因名称不同而与内容相同。

class UsedOffer(Base):
__tablename__ = 'used_offer'

used_offer_id = Column(Integer, primary_key=True)
user_id = Column(ForeignKey(u'user.user_id'), nullable=False, index=True)
venue_id = Column(ForeignKey(u'venue.venue_id'), nullable=False, index=True)
offer_message = Column(String(1024), nullable=False)    

user = relationship(u'User')
venue = relationship(u'Venue')

def __init__(self, purchased_offer):
    self.user_id = purchased_offer.user_id
    self.venue_id = purchased_offer.venue_id
    self.offer_message = purchased_offer.offer_message

class PurchasedOffer(Base):
    __tablename__ = 'purchased_offer'

    purchased_offer_id = Column(Integer, primary_key=True)
    user_id = Column(ForeignKey(u'user.user_id'), nullable=False, index=True)
    venue_id = Column(ForeignKey(u'venue.venue_id'), nullable=False, index=True)
    offer_message = Column(String(1024), nullable=False)   

    user = relationship(u'User')
    venue = relationship(u'Venue')

    def __init__(self, user_id = None, venue_id = None, offer_message = None):
        self.user_id = user_id
        self.venue_id = venue_id
        self.offer_message = offer_message      

我的问题是,当我向used_offer添加database时,used_offer_id始终设置为0,因此当我完成此过程时{{1}时间,我得到一个2nd

任何人都有任何关于为什么会发生这种情况的想法?

2 个答案:

答案 0 :(得分:0)

您必须设置每个used_offer_id的唯一值(不应始终设置为0),因为您已将其声明为主键。

答案 1 :(得分:0)

您的used_offer_id是主键,因此无法复制。在创建UsedOffer对象之前删除此属性(使用del关键字)。 SQLAlchemy将自动创建一个