2013-06-22 125 views
2

我是sqlalchemy的新手。我想創建一個有兩個外鍵用於不同表的類。爲什麼我得到下一個錯誤?sqlalchemy,違反外鍵約束

sqlalchemy.exc.IntegrityError: (IntegrityError) insert or update on table "event" violates foreign key constraint "event_user_fkey" 
DETAIL: Key (user)=(U) is not present in table "user". 
'INSERT INTO event (id, "user", item) VALUES (%(id)s, %(user)s, %(item)s)' {'item': 'I', 'user': 'U', 'id': 'E'} 

我的代碼是未來:

class User(Base): 
    __tablename__ = 'user' 
    id = Column(String, primary_key=True) 

    def __init__(self, id): 
     self.id = id 

class Item(Base): 
    __tablename__ = 'item' 
    id = Column(String, primary_key=True) 

    def __init__(self, id): 
     self.id = id 

class Event(Base): 
    __tablename__ = 'event' 
    id = Column(String, primary_key=True) 
    user = Column(String, ForeignKey('user.id')) 
    item = Column(String, ForeignKey('item.id')) 

    def __init__(self, id, user_id, item_id): 
     self.id = id 
     self.user = user_id 
     self.item = item_id 

我使用PostgreSQL作爲後端。

Base.metadata.create_all(engine) 
Session = sessionmaker(bind=engine) 
session = Session() 
usr = User('U') 
it = Item('I') 
event = Event('E', usr.id, it.id) 
session.add(usr) 
session.add(it) 
session.add(event) 

回答

2

的錯誤似乎很清楚: Key (user)=(U) is not present in table "user".

所以它試圖插入事件行之前該用戶已被提交到數據庫,打破了ForeignKey的約束,導致該錯誤。在提交事件之前嘗試將用戶和項目提交給數據庫,這取決於他們,問題應該消失。