我有下表的柜台:
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条款.
编辑:感谢所有的好评.看起来保罗是对的,并没有单一,便携的方式来做到这一点.这对我来说非常令人惊讶,因为它听起来像是一个非常基本的操作.
我正在开始开发一个Python应用程序,它提供了一个用于编辑各种图形和数字实体的GUI(如果你必须知道,它是移动机器人的配置和管理工具).其中一个问题是如何存储项目的数据(意味着,对于机器人).数据量将很低(最大约10MB)并且非常不同(机器人的几何数据,地图,任务,平台日志,记录的传感器数据,项目偏好......).
我不想开发自己的存储层.项目数据应存储在单个文件中,并且可以从Python轻松访问.存储更新应该很便宜:我不想使用显式的"保存"操作,并且应该在发生更改时立即存储更改.
单个ZIP文件可能不实用,并且需要在顶部编写持久层以将应用程序对象映射到存储.SQLite是一个明显的候选者,可能将SQLAlchemy作为对象关系层.ZODB看起来也很有趣,但到目前为止我没有经验.
有什么建议?
编辑:当我说"应用程序"时,我的意思是要安装在用户计算机上的程序,而不是Web应用程序.
编辑:我将打开由其他(不一定是受信任的)人创建的数据文件,类似于我对Word或PDF文件所做的操作.这必须是安全的操作.