SQLAlchemy - 在 postgresql 中执行批量更新插入(如果存在,则更新,否则插入)

2023-12-06

我正在尝试使用 SQLAlchemy 模块(而不是 SQL!)在 python 中编写批量更新插入。

我在 SQLAlchemy 添加中收到以下错误:

sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates unique constraint "posts_pkey"
DETAIL:  Key (id)=(TEST1234) already exists.

我有一张桌子叫posts上有一个主键id column.

在这个例子中,我已经在数据库中有一行id=TEST1234。当我尝试db.session.add()一个新的 posts 对象id set to TEST1234,我收到上面的错误。我的印象是,如果主键已经存在,记录就会更新。

如何仅基于主键使用 Flask-SQLAlchemy 更新插入?有一个简单的解决方案吗?

如果没有,我总是可以检查并删除具有匹配 id 的任何记录,然后插入新记录,但这对于我的情况来说似乎很昂贵,我不希望有很多更新。


SQLAlchemy 中有一个 upsert 式的操作:

db.session.merge()

找到这个命令后,我能够执行更新插入,但值得一提的是,对于批量“更新插入”来说,此操作很慢。

另一种方法是获取您想要更新插入的主键列表,并在数据库中查询任何匹配的 id:

# Imagine that post1, post5, and post1000 are posts objects with ids 1, 5 and 1000 respectively
# The goal is to "upsert" these posts.
# we initialize a dict which maps id to the post object

my_new_posts = {1: post1, 5: post5, 1000: post1000} 

for each in posts.query.filter(posts.id.in_(my_new_posts.keys())).all():
    # Only merge those posts which already exist in the database
    db.session.merge(my_new_posts.pop(each.id))

# Only add those posts which did not exist in the database 
db.session.add_all(my_new_posts.values())

# Now we commit our modifications (merges) and inserts (adds) to the database!
db.session.commit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy - 在 postgresql 中执行批量更新插入(如果存在,则更新,否则插入) 的相关文章

随机推荐

  • 为什么我在 python 中得到 httplib.BadStatusLine ?

    if theurl startswith http theurl theurl 7 head theurl theurl find tail theurl theurl find response code 0 import httplib
  • 为什么 GCM 不在 Android 设备中提供推送通知?

    我是 android 新手 正在为 gcm 推送通知做一个演示应用程序 我已经开发了所有这些代码 并且 GCM 推送通知正在我的环境中的设备上出现 但是当我在其他网络设备中测试此代码时 会获取注册 ID 但服务器端在向云发送消息时会得到不匹
  • 创建新的 Visual Studio 项目,添加文件并运行它 - 命令行

    有没有办法在不使用 IDE 的情况下创建新的 Visual Studio 项目 而是使用命令提示符 我正在开发一个将生成小型 C 程序的项目 因此我想创建一个新项目 将该 C 文件添加到该项目中 编译并运行它 所有这些都仅使用命令提示符 批
  • SwiftUI - 导航视图打开后退按钮和半灰屏/奇怪的行为

    I am trying to add navigation view to my app but it is causing issues My main UI is an infinitely swipe able carousel of
  • CORS 预检选项请求出现 403 错误。怎么修?

    我的项目是创建一个输入页面 用于在其中输入一些文本并将其发送到 mysql phpmyadmin 我正在使用 spring boot 2 1 4 和 Angular 7 预先感谢您的调查 爱 我专注于 GraphController jav
  • 从 Typescript 1.6.2 中的内置数组扩展的类在使用 [] 运算符时不会更新长度

    正如我所读 应该可以在 ts 1 6 中扩展内置类型here TypeScript 1 6 添加了对扩展计算构造函数的任意表达式的类的支持 这意味着现在可以在类声明中扩展内置类型 一些例子 Extend built in types cla
  • SLURM 中两个作业数组之间的一对一依赖关系

    服务器刚刚从 CONDOR 切换到 SLURM 所以我正在学习并尝试将我的提交脚本翻译为 SLURM 我的问题如下 我有两个工作数组 第二个依赖于第一个 目前 我喜欢以下内容 events1 sbatch job name events a
  • 访问 cffi 枚举

    假设我在 cffi 下定义了一个枚举 from cffi import FFI ffi FFI ffi cdef typedef enum RANDOM IMMEDIATE SEARCH strategy 现在调用时可以轻松访问cdef再次
  • 如何在 C# 中从 Json 字符串中检索值

    我收到类似的回复 expires Sat 19 May 2046 04 10 58 0000 copy ref SMJNA2wxbGZbnmbnm Result null error null base expires Sat 19 May
  • 如何将 application/json 对象解析为字符串

    我正在以编程方式导航到返回 application json 格式的站点 我似乎无法读取 HttpURLConnection 中返回的 json 我正在使用 Jackson 将 JSON 解组到 java 对象中 代码是 InputStre
  • 最有用的 R 技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • Java中有常用的有理数库吗?

    我正在寻找一个代表分数 有理数 的Java 库 例如 如果我想存储分数1 3那么它不会被另存为0 33333这将失去其准确性 以下是我期望在此类库中找到的一些功能 getNumerator getDenominator add Ration
  • 多个标头和 ARIA 角色

    我有一个 HTML 结构 它实际上有 2 个标题 在页面的顶部有一些导航项和按钮 下面是另一个部分 其中包含徽标和我所说的主导航 由于全宽 CSS3 渐变 两者都在包装器中被分割 所以我的结构看起来像这样 div div div div
  • 使用 ffmpeg、PHP 和 beanstalk

    我对 ffmpeg 和 beanstalk 很陌生 我需要一些帮助 我想使用 beanstalk 将文件排队以供 ffmpeg 转换 我已经下载 安装并启动了 beanstalkd 还按照建议安装了 libevent 并且我已经下载了 be
  • 用于数字动画的 Jquery 插件

    我正在对服务器进行 ajax 调用 然后更新一些统计信息 我想要一个可以为数字添加动画的插件 例如初始值 65 ajax调用后的值 98 在 2 秒内 显示的值从 65 增加到 98 用户可以看到这一点 就像数字速度表或转速表一样 我的搜索
  • iOS 应用程序在后台时的 GCM 推送通知

    我正在尝试使用 GCM 将推送通知发送到我的 iOS 应用程序 应用程序在后台时不会收到通知 但在前台时会收到通知 我正在使用 PHP 脚本测试推送通知 该脚本还将消息直接发送到 APNS 并且它在后台工作 发送到 GCM 的 JSON 我
  • 将带有图像的 NSAttributedString 保存到 RTF 文件时遇到问题

    我有一些输出 是一个非常简单的 RTF 文件 当我生成此文档时 用户可以通过电子邮件发送它 这一切都运行良好 该文档看起来不错 一旦我有了 NSAttributedString 我就创建一个 NSData 块 并将其写入文件 如下所示 NS
  • 并行输出

    当使用多个进程运行 CMake 生成的 Makefile 时 make jN 输出经常会像这样混乱 8 8 9 Building CXX object App CMakeFiles App dir src File1 cpp o Build
  • JavaFX 8 的基本 JUnit 测试

    我想为 JavaFX 8 应用程序创建基本的 JUnit 测试 我有这个简单的代码示例 public class Main extends Application public static void main String args Ap
  • SQLAlchemy - 在 postgresql 中执行批量更新插入(如果存在,则更新,否则插入)

    我正在尝试使用 SQLAlchemy 模块 而不是 SQL 在 python 中编写批量更新插入 我在 SQLAlchemy 添加中收到以下错误 sqlalchemy exc IntegrityError IntegrityError du