0

私は sqlalchemy の使い方を学んでいます (私はまだ初心者です)。私は ORM (SQLAlchemy Expression Language とは対照的に) を使用しており、単純なメソッドを使用してデータベースで利用可能になったときに、タイムスタンプ付きのセンサー データを配置するスクリプトをいくつか設定しました。

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

アプローチ。

場合によっては、スクリプトの 1 つが、実際にはまったく新しいものではない「新しい」データを取得することがあります。まったく同じデータがすでに処理され、データベースに追加されています。

これを無視して、取得したデータを単純に追加すると、

 (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 に答える