2017-06-11 4 views
0

私は現在PostgresでPythonでSQLAlchemyを使用していますデータベースオブジェクトの "履歴"を実装する方法は?

私はモデルの "履歴"属性を実装することに興味があります。これは、データベースの行が変更されるたびに、この値の変更がどこかに記録されることを意味します。例えば

私は、モデル犬を持っています。犬には、体重と所有者という2つの属性があります。

1日目:犬が作成され、weight=5, owner=None

2日目:Dog.weight=4

3日目:Dog.owner=me

これは以下のような歴史になります:

[ [1, weight=5, owner=None], 
    [2, weight=4, owner=None], 
    [3, weight=4, owner=me] ] 
  1. このautomaticaを実行する既存の実装がSqlalchemyにありますか? lly?
  2. もしそうでなければ、これをエレガントに実装するにはどうすればよいですか?

答えて

0

実際、私はPostgresqlを使用せずにPostgresqlにテーブルの履歴を保存するこの機能があるとは思わないが、MySQLと似ています。あなたの機能を実装するのに2つのテーブルを使うことができます。以下に例を示します(MySQL構文を使用する例)。

Table 1: 
CREATE TABLE `dog_now`(
    `id` int(11) AUTO_INCREMENT , 
    `dog_id` int(11) DEAFULT '0', -- dog id 
    `weight` float DEFAULT '0', 
    `owner` varchar(32) DEFAULT '', 
    PRIMARY KEY(`id`), 
    UNIQUE KEY `idx_dog_id`(`dog_id`) 
) 

表1は、犬の現在の状態を保存するために使用されます。

Table 2: 
CREATE TABLE `dog_history`(
    `id` int(11) AUTO_INCREMENT, 
    `dog_id` int(11) DEAFULT '0', -- dog id 
    `weight` float DEFAULT '0', 
    `owner` varchar(32) DEFAULT '', 
    PRIMARY KEY (`id`), 
    KEY `idx_dog_id`(`dog_id`) 
) 

表2は、犬の歴史を保存するために使用されています。

ここで、データの保存方法を知りたいかもしれません。 新しい犬のデータをデータベースに保存する場合は、dog_nowテーブルを照会してdog_idでデータを取得してください。そして、dog_historyテーブルにデータを入れ、dog_nowテーブルの新しい犬のデータを更新します。

+0

毎回dogが新しい属性を追加するたびにdog_historyも更新する必要がありますか? – Sparrowcide

+0

@Sparrowcideソースコードのうち、Mongodbを使うことができます。ただdbに保存するだけです。 –

関連する問題