SQLAlchemy,违反外键约束

4
我是新手 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)

如果你想要实现一个事务块,那么在每个 session.add() 后面加上 session.flush() 应该可以帮助你。 - Gokul
1个回答

5
错误信息非常明确:Key (user)=(U) is not present in table "user". 因此,在将用户提交到数据库之前,它正在尝试插入事件行,这会破坏ForeignKey约束,导致此错误。请在提交依赖于它们的用户和项目之前将其提交到数据库中,然后再提交事件,问题就应该消失了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接