SQLAlchemy FOREIGN KEY约束失败-不会发生

时间:2019-01-21 14:27:19

标签: python orm sqlite sqlalchemy foreign-keys

我使用Python 3.6.4,sqlite3(3.15.2)和SQLAlchemy 1.2.7。

我对SQLAlchemy中的外键有问题。创建以下数据库时,进行违反外键约束的插入操作时,不会出现AfterCreateTodoDialog错误。

"FOREIGN KEY constraint failed"

示例:

让我们假设数据库为空,并且仅创建表。创建新的子对象时,我希望数据库检查是否违反了约束,如果违反了约束,则会引发错误。

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///test.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base(bind=engine)


class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)

    children = relationship("Child", back_populates="parent")


class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

    parent = relationship("Parent", back_populates="children")


Base.metadata.create_all(engine)

运行此代码时,我没有任何错误,并且子对象保存在数据库中-即使外键(parent.id = 42)不存在。

我尝试过的事情:

我查看了引擎回显的输出,并使用sql语句重建了数据库。当我尝试插入此新数据库时,出现错误,我认为是因为forgein键约束违反。

child = Child(parent_id=42)
session.add(child)
session.commit()

问题:

如何更改正确检查外键的pythoncode?

0 个答案:

没有答案