2016-08-28 13 views
0

我有一個對象,我試圖添加持久性以使用sqlalchemy來允許對象的本地查找,前提是我已經創建了它的一個實例。 在該對象的初始化語句中,我有以下代碼:SqlAlchemy中的對象持久性 - 將自我添加到數據庫

persistent = session.query(exists().where(myobject.myfield==self.myfield)).scalar() 

    if not persistent: 
     self.create_object_from_scratch() 
     session.add(myfield, self) 
     session.commit() 
    else: 
     self.utilize_object_in_database() 

按上文所述,對象可確定它是否已經在數據庫中的主鍵MyField的是在數據庫中。如果不是,我想創建該對象,然後將其添加到會話中並提交。我設置的數據庫結構只有兩列...一個主鍵(字符串)和一個BLOB,它應該代表我的'對象'進行檢索。

然而,用這種方法,我得到一個UnmappedInstanceError:「類‘內置名爲.str’沒有映射

我的問題是,鑑於我想在這裏完成(Python對象的持久性)。 ?我在接近這一正確/有效是否有可能使用的SQLAlchemy添加的「自我」到數據庫的BLOB

回答

1

session.add方法的簽名看看:

add(instance, _warn=True) 

正如你所看到的,你需要傳遞你想存儲的類的實例。沒有必要指定主鍵,因爲當您爲此課程使用declared a mapping時,您已經做到了。所以正確的方式儲存這個對象是:

session.add(self) 

,你得到的錯誤消息表明您試圖添加到會話的str一個實例,並沒有映射任何表在數據庫中聲明該數據類型。

相關問題