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一个实例,并没有映射任何表在数据库中声明该数据类型。