SQLAlchemy中的外键约束

5 投票
1 回答
4633 浏览
提问于 2025-04-16 18:09

我正在使用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问题在强制执行外键约束方面非常有用。

撰写回答