私は一連のユーザーと一連のゲームを持っていて、別のテーブル(名前: 'game_progress')でゲームを終了したかどうかを追跡します。私は、ユーザーが作成されるたびに、 'game_progress'テーブルに彼女のIDが自動的に入力され、使用可能なすべてのゲームに対して 'いいえ'が表示されます。 (彼女がレコードを作るためにゲームを始めるまで待つことができますが、私はこれを全く別の目的のために必要とします)。SQLAlchemyオブジェクトを作成するときのカスタム操作
私はafter_insert()イベントを使用してみました。しかし、私は 'game_progress'に挿入するユーザーのIDを取得できません。私はafter_flushを使用したくないです(たとえ私がそれをやる方法を見つけ出すことができます)。これは、ユーザ作成操作がそれほど頻繁に起こらないので、少し過度のことかもしれません。
class Game(db.Model):
__tablename__ = 'games'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(30))
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(30))
class GameProgress(db.Model):
__tablename__ = 'game_progress'
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
game_id = db.Column(db.Integer, db.ForeignKey('games.id'), primary_key=True)
game_finished = db.Column(db.Boolean)
@event.listens_for(User, "after_insert")
def after_insert(mapper, connection, target):
progress_table = GameProgress.__table__
user_id = target.id
connection.execute(
progress_table.insert().\
values(user_id=user_id, game_id=1, game_finished=0)
)
db.create_all()
game = Game(name='Solitaire')
db.session.add(game)
db.session.commit()
user = User(name='Alice')
db.session.add(user)
db.session.commit()
通常、DBトリガーを使用するか、新しいユーザーを作成するロジックに必要な追加データの作成を含めるだけです。つまり、ユーザーの作成を処理する関数を作成することを意味します。 –