1

別のプロセスが同じオブジェクトのいくつかの属性を更新するときに、SQLAlchemy がデータベースからのオブジェクトの現在の状態の即時読み込みをサポートできるかどうかを知りたいです。

言及したいのですが、私は SQLObject から SQLAlchemy に移行しています。SQLObject を使用すると、現在、次のようなテーブルが 1 つあります。

class MyConfiguration(SQLObject):
    class sqlmeta:
        cacheValues = False
    attr1 = StringCol(default='')
    attr2 = IntCol(default=0)

ご存じのとおり、この cacheValues=False 設定により、属性の更新が即座にディスクにフラッシュされます。

global my_config
my_config = MyConfiguration()
my_config.attr1 = 'some value'

インスタント attr1 は「何らかの値」に設定され、その値は同じオブジェクト my_config を使用する別のプロセスで使用できます。

SQLAlchemy の ORM と Core の基本的なチュートリアルを実行しましたが、理解できるように、これを達成するために最も近い方法は、session.merge() を使用することです。追加またはマージしない限り、SQLAlchemy の「my_config」の状態は保留中/ダーティになり、autoflush=True を使用すると、後続のクエリでテーブルから行が再読み取りされます。

私が考えたもう 1 つのオプションは、MyConfiguration でsetattrをオーバーライドして、インスタンスへの変更を即座にフラッシュできることでした。しかし、これは醜く、何かをハッキングするよりも SQLAlchemy の機能をできるだけ多く使用したいので、これは好きではありません。

そのため、SQLAlchemy でこの SQLObject の機能と完全に一致するものを見つけようとしています。これは可能ですか?

助けてくれてありがとう。

4

0 に答える 0