sql >> データベース >  >> RDS >> Mysql

sqlalchemyセッションでのオブジェクトの更新について

    セッションはこのように機能するように設計されています 。セッションBのオブジェクトの属性は、セッションBで最初にクエリされたときの属性を保持します。さらに、SQLAlchemyは、他のセッションのオブジェクトが変更されたときに自動的に更新しようとはしません。また、何かを作成しようとするのも賢明ではないと思います。このように。

    各セッションの存続期間は、データベース内の単一のトランザクションとして積極的に考える必要があります。オブジェクトが古くなっている可能性があるという事実にセッションがいつどのように対処する必要があるかは、SQLAlchemy(またはSQLAlchemyの拡張機能)に組み込まれたアルゴリズムによって解決できる技術的な問題ではありません。自分で決定してコーディングします。 「正しい」応答は、これは問題ではないということかもしれません。セッションBで発生するロジックは、セッションBの開始時にデータを使用した場合に有効である可能性があります。あなたの「問題」は実際には問題ではないかもしれません。ドキュメントには実際にはセッションをいつ使用するかに関するセクション全体 、しかし、万能の解決策を望んでいるなら、それはかなり厳しい反応を示します...

    とはいえ、状況の仕組みを変えるためにできることがいくつかあります。

    まず、セッションを開いたままにする時間を減らすことができます。セッションBはオブジェクトをクエリしていますが、後でそのオブジェクトを使用して(同じセッションで)属性を最新の状態にしたいことを実行しています。 1つの解決策は、この2番目の操作を別のセッションで実行することです。

    もう1つは、 docsのように、expire/refreshメソッドを使用することです。表示 ...

    # immediately re-load attributes on obj1, obj2
    session.refresh(obj1)
    session.refresh(obj2)
    
    # expire objects obj1, obj2, attributes will be reloaded
    # on the next access:
    session.expire(obj1)
    session.expire(obj2)
    

    session.refresh()を使用できます セッションが以前にオブジェクトを既に照会した場合でも、オブジェクトの最新バージョンをすぐに取得します。



    1. PDOを使用して、UPDATEステートメントが成功したことを確認するにはどうすればよいですか?

    2. 標準フォーマット文字列(T-SQL)を使用してSQLServerで「datetimeoffset」をフォーマットする例

    3. OSX10.7Lion上のMySQLgem

    4. MYSQLで行をヘッダーに転置する