私のモデルは非常に複雑で、既存のストアド プロシージャからロジックを取得して SQLAlchemy に変換しようとしています (移植性の理由から)。
ただし、コミットされていないデータに苦労しています。
私はuser
テーブルを持っています: 1d, 名前 私はstatus
テーブルを持っています: id, 名前 私はuser_statuses
テーブルを持っています: id, user_id, status_id, from_dt, to_dt
ここで、これらすべてのテーブルを 1 つのトランザクション内で作成する必要があります。そうしないと、失敗します。問題:
user = User(name = 'Test')
status = Status(name = 'Active')
db.session.add(user)
db.session.add(status)
# Oooopa! This is where it fails
user_session = UserStatuses(user_id=user.id, status_id=status.id, datetime.utcnow(), datetime(9999,01,01,00,00,00))
# both user.id and status.id = None as it's uncommited!
基本的に、明示的な SQL なしでテーブル シーケンスにアクセスできる必要があります。なんで?携帯性のため。現在、私はPGSQLを使用しており、これを行うことができます:
class User(Base):
....
@staticmethod
def prefetch_id():
db.session.execute("SELECT NEXTVAL('user_id_seq');").scalar()
エンジンを MySQL & BANG! に変更します。アプリケーションが壊れています。
これを行う方法についてのアイデアはありますか?これは、一度に数千のユーザーがアクセスする非常にトランザクションの多いアプリケーションである可能性があることに注意してください。