peewee - 如果行存在,如何更新字段,否则插入行?
问题描述
假设我的数据库中有以下数据:
k c1 c2
0 1 null
1 null 1
假设我运行了一个计算,它给了我一个对 (k, c1) 的列表。我想将这些对推送到我的数据库中,如下所示:
- 如果 k 存在于我的表中,则更新 c1(保持 c2 不变)
- 如果我的表中不存在 k,请添加一个新行,并将 c2 设置为 null(或该列的默认值)
有没有办法在一次操作中做到这一点,类似于
table.insert_many(rows)
?
table.inser_many 对我不起作用,因为即使 c2 曾经有一个值,它也会强制 c2 为空。
解决方案
取决于您的数据库,但它们中的大多数(包括最新版本的 sqlite)都支持冲突更新时的一些 upsert / insert 风格。
http://docs.peewee-orm.com/en/latest/peewee/querying.html#upsert
有关具体实现的详细信息,请查阅您的数据库文档。
推荐阅读
- django - Django GenericForeignKey 与一组 ForeignKey
- javascript - 鼠标离开方法无法隐藏内容
- c# - 在 Docker 中构建图像时如何包含 csv 文件
- unity3d - AR Foundation:检测用户何时用手关闭相机
- ruby-on-rails - 如果特定电子邮件(空白电子邮件)已经存在,如何允许设计保存用户?
- http - 如何从 vbscript 获取电报机器人 getUpdates json 并读取它
- python - 如何强制 pythons 格式方法在评估值时放置值
- powershell - Nuget 包 init.ps1 脚本和 PackageReference 修改
- sql-server - 有没有办法保护 SSRS 报告密码?
- mysql - 如果没有日期记录,如何处理 where Date