【发布时间】:2021-02-24 22:16:46
【问题描述】:
我对 SqlAlchemy ForeignKey 约束有一些误解。我的理解是在下面插入B 应该会引发ForeignKeyConstraint 异常,因为没有A 名称为"my_a"。这不是 ForeignKey 约束的作用吗?约束表更新时,要求约束映射的表列中存在值?
from sqlalchemy import Column, create_engine, ForeignKey, Integer, VARCHAR
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(32))
class B(Base):
__tablename__ = 'table_B'
id = Column(Integer, primary_key=True)
a_name = Column(VARCHAR(32), ForeignKey('table_A.name'), nullable=False)
engine = create_engine('sqlite:////tmp/AB.db.foo')
Base.metadata.create_all(engine)
Session = sessionmaker()
Session.configure(bind=engine)
b = B(a_name="my_a")
session = Session()
session.add(b)
session.commit()
session.close()
【问题讨论】:
-
默认情况下,SQLite 不强制执行外键。 SQLAlchemy 特定细节here.
-
啊,谢谢戈德,就是这样。如果您将此作为答案而不是评论,我将接受并投票。非常感谢!
标签: python sqlite sqlalchemy foreign-keys