0
単純な宣言ベースのクラスを指定すると、永続モデルのプロパティにアクセスするときにSQLAlchemyが余分なSELECTを送信する理由
class Entity(db.Model):
__tablename__ = 'brand'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
し、次のスクリプト
entity = Entity()
entity.name = 'random name'
db.session.add(entity)
db.session.commit()
# Just by accessing the property name of the created object a
# SELECT statement is sent to the database.
print entity.name
私はSQLAlchemyの中echo
モードを有効にすると、私は(端末で、私はプロパティにアクセスするだけでINSERT
文と、余分なSELECT
を見ることができます列)を選択します(テーブル行)。
プロパティにアクセスしないと、クエリは作成されません。
その動作の理由は何ですか?この基本例では、すでにオブジェクトに割り当てられているname
プロパティの値があります。だから、なぜ追加のクエリが必要ですか?最新の価値などを確保するためには?
したがって、トランザクションが終了すると、内部で作成されたすべてのオブジェクトの有効期限が切れます。それは? – miso
これはデフォルトの動作です(yes)。新しく挿入されたオブジェクトだけでなく、トランザクション中に照会したオブジェクトも含みます。 – univerio