小编Rem*_*ank的帖子

如何更新表中的行或如果它不存在则插入它?

我有下表的柜台:

CREATE TABLE cache (
    key text PRIMARY KEY,
    generation int
);
Run Code Online (Sandbox Code Playgroud)

我想增加其中一个计数器,或者如果相应的行还不存在则将其设置为零.有没有办法在标准SQL中没有并发问题的情况下执行此操作?该操作有时是交易的一部分,有时是分开的.

如果可能的话,SQL必须在SQLite,PostgreSQL和MySQL上不加修改地运行.

搜索产生了一些想法,这些想法要么遇到并发问题,要么特定于数据库:

  • 尝试换INSERT行,UPDATE如果出现错误.不幸的是,INSERT中止当前事务的错误.

  • UPDATE行,如果没有修改行,则为INSERT新行.

  • MySQL有一个ON DUPLICATE KEY UPDATE条款.

编辑:感谢所有的好评.看起来保罗是对的,并没有单一,便携的方式来做到这一点.这对我来说非常令人惊讶,因为它听起来像是一个非常基本的操作.

mysql sql sqlite postgresql upsert

80
推荐指数
6
解决办法
13万
查看次数

用于Python应用程序的单文件存储

我正在开始开发一个Python应用程序,它提供了一个用于编辑各种图形和数字实体的GUI(如果你必须知道,它是移动机器人的配置和管理工具).其中一个问题是如何存储项目的数据(意味着,对于机器人).数据量将很低(最大约10MB)并且非常不同(机器人的几何数据,地图,任务,平台日志,记录的传感器数据,项目偏好......).

我不想开发自己的存储层.项目数据应存储在单个文件中,并且可以从Python轻松访问.存储更新应该很便宜:我不想使用显式的"保存"操作,并且应该在发生更改时立即存储更改.

单个ZIP文件可能不实用,并且需要在顶部编写持久层以将应用程序对象映射到存储.SQLite是一个明显的候选者,可能将SQLAlchemy作为对象关系层.ZODB看起来也很有趣,但到目前为止我没有经验.

有什么建议?

编辑:当我说"应用程序"时,我的意思是要安装在用户计算机上的程序,而不是Web应用程序.

编辑:我将打开由其他(不一定是受信任的)人创建的数据文件,类似于我对Word或PDF文件所做的操作.这必须是安全的操作.

python storage

4
推荐指数
1
解决办法
1916
查看次数

标签 统计

mysql ×1

postgresql ×1

python ×1

sql ×1

sqlite ×1

storage ×1

upsert ×1