8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么 SQLAlchemy 不使用 SQLite 强制执行外键约束?

user7336033 2月前

27 0

我对 SqlAlchemy ForeignKey 约束有些误解。我的理解是,下面插入 B 应该会引发 ForeignKeyConstraint 异常,因为没有带 \' 的 A

我对 SqlAlchemy ForeignKey 约束有些误解。我的理解是,下面的插入 B 应该会引发 ForeignKeyConstraint 异常,因为其名称中没有 A with "my_a" 。这不就是 ForeignKey 约束的作用吗?在更新受约束的表时,要求约束所映射的表列中的值存在?

from sqlalchemy import Column, create_engine, ForeignKey, Integer, VARCHAR
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()


class A(Base):
    __tablename__ = 'table_A'
    id = Column(Integer, primary_key=True)
    name = Column(VARCHAR(32))


class B(Base):
    __tablename__ = 'table_B'
    id = Column(Integer, primary_key=True)
    a_name = Column(VARCHAR(32), ForeignKey('table_A.name'), nullable=False)


engine = create_engine('sqlite:////tmp/AB.db.foo')
Base.metadata.create_all(engine)

Session = sessionmaker()
Session.configure(bind=engine)

b = B(a_name="my_a")

session = Session()
session.add(b)
session.commit()
session.close()
帖子版权声明 1、本帖标题:为什么 SQLAlchemy 不使用 SQLite 强制执行外键约束?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user7336033在本站《sqlite》版块原创发布, 转载请注明出处!
最新回复 (0)
  • SQLite – 即使是现代版本 – 默认也不强制执行外键。

    假设 [SQLite] 库在启用外键约束的情况下进行编译,则应用程序仍必须在运行时使用 PRAGMA foreign_keys 命令启用它。

    SQLite 文档

    SQLAlchemy 文档

  • 啊,谢谢戈登,就是这样。如果你把这作为答案而不是评论,我会接受并点赞。非常感谢!

返回
作者最近主题: