2017-06-11 119 views
0

我目前在Postgres上使用Python和SQLAlchemy如何實現數據庫對象的「歷史記錄」?

我有興趣爲模型實現「歷史」屬性。這意味着每當數據庫行被修改時,這個值的改變都會被記錄在某個地方。

例如,

我有一個模型犬。狗有兩個屬性:體重和所有者。 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. Sqlalchemy中是否有任何現成的實現可以實現這種自動操作LLY?
  2. 如果沒有,我應該如何去實現這個優雅?

回答

0

其實,我並不認爲PostgreSQL有此功能來存儲錶的歷史,雖然我不使用PostgreSQL,但它類似於MySQL.You可以用兩個表來實現的功能。這裏是一個例子(只是一個使用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_id查詢dog_now表以獲取數據。並將數據放入dog_history表中,在dog_now表中更新新的狗數據。

+0

因此,每次狗增加一個新的屬性,我將不得不更新dog_history以及? – Sparrowcide

+0

@Sparrowcide對於cource,或者你可以使用Mongodb,你只需將它保存在db中即可。 –