SQLAlchemy中的外键约束

mrm*_*oey 5 python sqlalchemy

我正在使用SQLAlchemy的ORM端,并且我已经定义了一个列与另一个模型具有外键关系,使用:

Base = declarative_base()
class Model1(Base):
    __tablename__ = 'm1'
    Name = Column(String, primary_key = True)
    info = Column(String)

class Model2(Base):
    __tablename__ = 'm2'
    Name = Column(String, primary_key = True)
    info = Column(String)
    other_model = Column(String, ForeignKey('m1.Name'))
Run Code Online (Sandbox Code Playgroud)

但是,我在other_model属性中放置的内容似乎并不重要,似乎非常乐意将它提交到数据库,即使没有Model1具有该实例的实例也是如此Name.

mrm*_*oey 4

看起来答案在我使用的数据库(SQLite)中,而不是 SQLAlchemy 中。SQLite 版本 <3.6.1 (AFAIK) 不支持外键约束。

因此,答案与外键和 SQLAlchemy 的答案非常相似。

由于我使用的是 Windows,我能够访问pysqlite2 页面,打包的安装程序具有版本 3.7.6.2 sqlite,然后最终的实现得到了有关sqlite 引擎和方言的 SQLAlchemy 页面的帮助。这个问题也与升级过程相关。

最后,SQLite 引擎在决定是否强制执行外键约束时有点不稳定,而这个 SO 问题在强制执行外键约束时非常有用。