SQLAlchemy中的外键约束

时间:2011-05-23 06:17:10

标签: 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'))

但是,我在other_model属性中添加的内容似乎并不重要,即使没有Model1实例也没有,它似乎非常乐意将其提交到数据库中Name

1 个答案:

答案 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在强制执行外键时非常有用。