sqlalchemy:创建关系但在数据库中没有外键约束?

2024-04-23

Since sqlalchemy.orm.relationship()已经暗示了这种关系,我不想在数据库中创建约束。我应该怎么办?

目前,我在 alembic 迁移后手动删除这些约束。


而不是定义“模式”级别ForeignKey http://docs.sqlalchemy.org/en/latest/core/constraints.html#sqlalchemy.schema.ForeignKey约束创造了一个定制国外条件 http://docs.sqlalchemy.org/en/latest/orm/join_conditions.html#creating-custom-foreign-conditions;传递您想要用作“外键”的列以及primaryjoin http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship.params.primaryjoin to relationship http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship。您必须手动定义primaryjoin http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship.params.primaryjoin因为:

默认情况下,该值是根据父表和子表(或关联表)的外键关系计算的。

In [2]: class A(Base):
   ...:     a_id = Column(Integer, primary_key=True)
   ...:     __tablename__ = 'a'
   ...:     

In [3]: class C(Base):
   ...:     c_id = Column(Integer, primary_key=True)
   ...:     a_id = Column(Integer)
   ...:     __tablename__ = 'c'
   ...:     a = relationship('A', foreign_keys=[a_id],
   ...:                      primaryjoin='A.a_id == C.a_id')
   ...:     

外键也可以在primaryjoin http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship.params.primaryjoin using foreign() http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.foreign:

a = relationship('A', primaryjoin='foreign(C.a_id) == A.a_id')

您可以验证一下,没有FOREIGN KEY为表发出约束c:

In [4]: from sqlalchemy.schema import CreateTable

In [5]: print(CreateTable(A.__table__))

CREATE TABLE a (
        a_id INTEGER NOT NULL, 
        PRIMARY KEY (a_id)
)



In [6]: print(CreateTable(C.__table__))

CREATE TABLE c (
        c_id INTEGER NOT NULL, 
        a_id INTEGER, 
        PRIMARY KEY (c_id)
)

Warning:

请注意,如果没有FOREIGN KEY在数据库端施加约束,您可以以任何您想要的方式将引用完整性破坏成碎片。 ORM/应用程序级别存在关系,但无法在数据库中强制执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlalchemy:创建关系但在数据库中没有外键约束? 的相关文章

  • 在 Django 中定义视图和 url。为什么调用函数时不使用括号?

    我已经在经历 Python速成课程 目前正在进行 Django Web应用程序项目 学习日志 阶段 有些东西与我已经学到的相矛盾 views py file from django shortcuts import render def i
  • 将 pandas 数据框中的列减去其第一个值

    我需要将 pandas 数据帧的一列中的所有元素减去其第一个值 在这段代码中 pandas 抱怨 self inferred type 我猜这是循环引用 df Time df Time df Time 0 在这段代码中 pandas 抱怨为
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 1:1 关系中的双向外键约束

    我正在使用 MySQL 数据库 在我的关系数据模型中 我有两个相互 1 1 关联的实体 在我的架构中 通过将 FK 字段放入两个表之一中来建立 1 1 关系 该字段与另一个表的 PK 相关 两个表都有 PK 并且都是自动递增的 BIGINT
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 字典中列表中仅有的几个索引的总和

    如果我有这种类型的字典 a dictionary dog white 3 5 black 6 7 Brown 23 1 cat gray 5 6 brown 4 9 bird blue 3 5 green 1 2 yellow 4 9 mo
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们

随机推荐

  • 在 Angular X 的子模块中使用 AppModule 中的组件(X 代表 2+)

    我创建了一个小组件 LoadingComponent 在我的应用程序的根目录中并在我的应用程序中 显然 声明了它AppModule 该组件在我的应用程序加载时使用 并且应该显示一些精美的加载动画 现在我想在保存某些内容时在子模块中使用它 但
  • 在 vm 脚本上下文中传递函数

    假设我有一个如下所示的库模块 module exports increment function count 我想在动态生成的脚本中使用它 如下所示 function lib increment 通过将其传递到沙箱中 var sandbox
  • 如何在 MKMapView 中保持图钉和地图在移动叠加层上方居中

    当我在地图上垂直移动 通过平移手势 另一个视图时 如何使图钉保持在地图的中心 以便图钉保持在覆盖层 而不是实际的 MapKit 覆盖层 上方 请参阅随附的第一个和最终状态的屏幕截图 当用户向上 向下平移时 我得到了覆盖层和屏幕顶部之间的空间
  • 如何将 WPF 复选框置于其可点击区域的中心?

    如果我在 WPF 中创建一个 CheckBox 控件 没有内容 我只需要选中 取消选中部分 它会放置 框 视觉对象 其中有或没有复选标记的 3D 矩形 位于控件的左上角 我可以将 盒子 视觉效果放在center而是使用 CheckBox 控
  • Emacs Windows 拼写检查 - aspell 或 hunspell

    我在Windows XP操作系统上使用emacs 23 1 50版本 我无法使用 emacs wiki 提供的示例将 hunspell 或 aspell 设置为 emacs 的一部分 任何人都有 Windows XP 的工作配置 请帮助我
  • 条件 DataGridView 格式设置

    我有一个 DataGridView 我将其 DataSource 属性设置为我自己的对象的 BindingList BindingList
  • 合并数据框,保留所有项目熊猫

    如何合并两个不同的数据帧 保留每个数据帧的所有行 同时填充空白 DF1 Name Addr Num Parent Parent Addr Matt 123H 8 James 543F Adam 213H 9 James 543F James
  • “Docker 子网”有什么用?

    docker desktop 中有一个选项允许更改 Docker 子网 我没有看到这个默认子网192 168 65 0 28被用在任何地方 我尝试过了docker network inspect在每个 Docker 内部网络上 检查了 do
  • Cordova config.xml 文件被重写

    我设置了一个基本的 Cordova 项目 每当我运行 cordova build 时 IOS 中的 config xml 文件都会被重写为默认值 并且我在项目文件夹的 config xml 中添加的任何首选项都会简单地附加到配置中 IOS平
  • SQL Server Management Studio 无法连接到 Sql Server

    我已经使用 MS Web Platform Installer 2 0 安装了 Visual Web Developer 2010 SQL Server 2008 R2 和 SQL Management Studio 2008 但每当我想登
  • Java 泛型(通配符)

    我有几个关于 Java 中通用通配符的问题 有什么区别List 基本上意味着
  • Symfony2:如何在FormType中调用实体的存储库

    我尝试调用我的实体的存储库Category以我的实体的类形 式BonCommande 但是出现了这个错误 注意 未定义的属性 C wamp www Symfony test src Application VehiculeBundle Fo
  • 如何在 Spring 加载应用程序上下文后立即执行作业?

    我想在加载 Spring 上下文后运行一些作业 但我不知道该怎么做 你知道该怎么做吗 另一种可能性是注册应用程序上下文事件的侦听器 基本上与skaffman的解决方案相同 只需实现 org springframework context A
  • 更改textNode值

    有什么方法可以更改 Web 浏览器中 DOM textNode 的值吗 我特别想看看能不能change现有节点 而不是creating一个新的 为了澄清这一点 我需要使用 Javascript 来完成此操作 浏览器中的所有文本都存储在 te
  • 旋转轴标签放置不正确(matplotlib)

    我想绘制带有旋转标签的相关矩阵 但是 标签放错了位置 如下所示 我试着看看Matplotlib Python 条形图 xtick 标签的位置彼此之间有不规则的空间 https stackoverflow com questions 2147
  • 如何阻止 LogCat 输出在 Eclipse 中自动滚动?

    UPDATE 事实证明 这是 SDK 工具 R14 中的一个错误 该问题已在 2013 年 10 月 27 日发布的 R15 中得到修复 更新到最新版本可以解决已接受答案中建议的问题 我使用 Eclipse 调试视图中的 LogCat 窗口
  • int 和 uint 使用的区别以及何时使用

    使用 int 和 uint 有什么区别 到目前为止我看到的所有示例都使用 int 表示整数 使用 uint 有什么好处吗 谢谢 uint means unsignedint 您可以将其用于 0 4G 范围其中正常 有符号 int的范围是 2
  • SignalR 不能与 .Net Core 一起使用

    我正在尝试安装SignalR在我的中使用 NuGet 包管理器C Asp Net 核心项目 但我收到此错误 称 SignalR 与 net core 不兼容 它真的还不支持吗 或者我可以做些什么来让它发挥作用吗 如果有必要提及的话 我正在使
  • tkinter root.mainloop 与 While True 循环

    我正在使用 tkinter 根据我正在读取的电压显示一些标签 但是 它会在一次读取后停止执行 我发现这是由于 root mainloop 造成的 但我无法修复它 我已经包含了我的代码 root mainloop 位于 while True
  • sqlalchemy:创建关系但在数据库中没有外键约束?

    Since sqlalchemy orm relationship 已经暗示了这种关系 我不想在数据库中创建约束 我应该怎么办 目前 我在 alembic 迁移后手动删除这些约束 而不是定义 模式 级别ForeignKey http doc