0

我一直在学习如何使用 sqlalchemy(我还是个初学者)。我正在使用 ORM(而不是 SQLAlchemy 表达式语言)并设置了许多脚本来使用简单的方法将带时间戳的传感器数据放入数据库中

>>> session.add(query)
>>> session.commit()

方法。

有时,其中一个脚本可以获得一些实际上根本不是新的“新”数据;完全相同的数据已经被处理并添加到数据库中。

如果忽略这一点并简单地添加我得到的任何数据,我会得到一个

 (IntegrityError) duplicate key value violates unique constraint

我最初通过简单地捕获异常并回滚事务来解决这个问题。但是,这会导致许多此类 IntegrityErrors 并阻塞 DB 错误日志。显然这是一个糟糕的解决方案,相反,我应该更新重复数据,或者首先检查哪些数据已经存在,然后只添加新的东西。有无数种方法可以做到这一点,但我确信有一种内置的简单有效的方法(因为这一定不是一个独特的问题)。

解决此问题的最佳方法是什么?

4

1 回答 1

1

你能有重复的数据吗?如果是时间戳数据,它似乎更像是一个日志?我会首先评估以确保您的唯一约束位于正确的列上。

正如你所提到的,有很多方法可以处理这个问题。

你的处理方式很好。您当前的方式有一个好处,因为它只需要 1 次往返数据库,尝试插入记录,如果不存在则捕获错误。

您可以轻松地首先检查记录是否存在,这通常需要额外往返数据库。(1 检查记录是否存在,1 插入)这个额外的往返可能对您来说不是问题,并且允许您以任何您认为合适的方式控制记录副本。

你也可以看看配置你的日志级别

一个相关的问题:

SQLAlchemy 是否与 Django 的 get_or_create 等效?

于 2013-09-27T01:53:38.487 回答