2012-11-25 35 views
4

所以我試圖建立一個數據庫,其中的行將經常修改。例如,每隔一小時,我想爲數據庫的特定部分添加一個數字。因此,如果self.checkmarks被輸入數據庫相當於3,什麼是最好的方式來更新這部分的數據庫與一個增加的數字,使self.checkmarks現在等於3, 2?我試圖建立列db.Array但得到一個屬性錯誤:SQLalchemy數據庫列應該包含數據數組的模型是什麼?

AttributeError: 'SQLAlchemy' object has no attribute 'Array'

我已經找到了如何更新數據庫,但我不知道通過添加到列表中,而不是替換更新的最佳方式。我的方法是如下的,但我不認爲append會起作用,因爲該列不能是一個數組:

ven = data.query.filter_by(venid=ven['id']).first() 
ven.totalcheckins = ven.totalcheckins.append(ven['stats']['checkinsCount']) 
db.session.commit() 

提前

+1

您是否熟悉SQLAlchemy(或通用關係數據庫)上的[relationships](http://docs.sqlalchemy.org/en/rel_0_7/orm/relationships.html)? –

+0

我在文檔中閱讀了一些關於它們的內容,但不是真的。這是值得探索嘗試和實現這種效果? – zch

+3

是的。在這種情況下,一對多關係正是你想要的。 SQLAlchemy的文檔是** excelent **,我建議你先閱讀。您會看到,我在第一條評論中發佈的鏈接中解釋的第一個案例正是您想要的:您需要爲您的「checkmarks」添加一個額外的表,該表與您的父表具有外鍵關係。當你定義一個涉及兩個表的關係時,SQLAlchemy會自動將它映射到一個集合。 –

回答

5

非常感謝如果你真的想有一個Python列表的列在SQLAlchemy的,你會希望有一個看看PickleType

array = db.Column(db.PickleType(mutable=True)) 

請注意,你將不得不使用mutable=True參數可以編輯列。 SQLAlchemy會自動檢測更改,並在您提交時立即保存。

如果你想泡菜是人類可讀的,你可以把它與JSON或其他轉換器結合起來,以滿足你的目的。

+0

使用PostgreSQL,您可以使用[ARRAY](http://docs.sqlalchemy.org/en/rel_0_9/dialects/postgresql.html#sqlalchemy.dialects.postgresql.ARRAY)列類型 – kolypto

+0

請參閱[ScalarListType提供的通過SQLAlchemy-utils](http://sqlalchemy-utils.readthedocs.org/en/latest/data_types.html#module-sqlalchemy_utils.types.scalar_list)。這非常方便! – hangtwenty

相關問題