我使用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? p>