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'))
但是,不管我在other_model
属性中放什么,它似乎都很乐意把它提交到数据库,即使没有任何Model1
实例具有那个Name
。
1 个回答
4
看起来问题出在我使用的数据库(SQLite)上,而不是SQLAlchemy。根据我所知,SQLite版本低于3.6.1的并不支持外键约束。
所以这个问题的答案和关于外键和SQLAlchemy的这个回答非常相似。
因为我在使用Windows,我可以去pysqlite2的页面,那里的安装包有3.7.6.2版本的sqlite,最后的实现得到了这个关于sqlite引擎和方言的SQLAlchemy页面的帮助。这个SO问题也和升级过程有关。
最后,SQLite引擎在决定是否强制执行外键约束时有点不稳定,而这个SO问题在强制执行外键约束方面非常有用。