2016-08-28 6 views
0

私は以前にインスタンスを作成していた場合、オブジェクトのローカル検索を可能にするためにsqlalchemyを使用して永続性を追加しようとしているオブジェクトを持っています。上記1として、それは主キーmyFieldでは、データベース内にあるか否かによって、データベース内に既にある場合、オブジェクトが判断することができる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() 

:オブジェクトの初期化ステートメント内 は、私は、次のコードを持っています。そうでない場合は、オブジェクトを作成してセッションに追加してコミットします。私が設定したデータベース構造は、主キー(文字列)と検索のために私の 'オブジェクト'を表すBLOBという2つの列だけです。

しかし、この方法で私はUnmappedInstanceErrorを得る:「クラス 『組み込みの.str』がマッピングされていない

私の質問は、私はここに(Pythonオブジェクトの永続化)を達成しようとしているものを与えています。 ?私が正しく/これを効率的に近づいてSQLAlchemyのを使用してBLOBとしてデータベースに「自己」を追加することが可能です午前

答えて

1

session.addメソッドのシグネチャを見てみましょう:?

add(instance, _warn=True) 

ご覧のとおり、保存したいクラスのインスタンスを渡す必要があります。このクラスのためにdeclared a mappingを使用したときに主キーを指定したので、主キーを指定する必要はありません。だから、正しい方法ストアは、このオブジェクトは、次のとおりです。あなたが得た

session.add(self) 

エラーメッセージは、セッションにstrのインスタンスを追加しようとしましたし、このデータ型の宣言データベース内のテーブルへのマッピングが存在しないことを意味します。

関連する問題