2013-06-22 2 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 ограничения, в результате чего этой ошибки. Попробуйте зафиксировать пользователя и элемент в базе данных, прежде чем совершать событие, которое зависит от них, и проблема должна испариться.

Смежные вопросы