我正在使用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'))
但是,我在other_model
属性中添加的内容似乎并不重要,即使没有Model1
实例也没有,它似乎非常乐意将其提交到数据库中Name
。
答案 0 :(得分:3)
看起来答案是在我使用的数据库(SQLite)中,而不是SQLAlchemy。 SQLite版本< 3.6.1(AFAIK)不支持外键约束。
因此答案与this answer on foreign keys and SQLAlchemy非常相似。
当我使用Windows时,我能够转到the pysqlite2 page,打包的安装程序具有版本3.7.6.2 sqlite,然后最终实现由this SQLAlchemy page on sqlite engines and dialects辅助。此SO question也与升级过程相关。
最后,在决定是否强制执行外键约束时,SQLite引擎有点气质,this SO question在强制执行外键时非常有用。