如果有一个包含列的表,我希望在另一个表列中获取列'id'的出现次数?
因此,如果每个玩家都有一个桌面“玩家”,并列出了每个进球得分的表'目标',那么每当他们得分的目标被添加到目标表时,就会有一种简单的方法来自动更新玩家列?
另一个例子是'团队'和'玩家'表,每当玩家添加player.team_name == team.name
或类似的东西时,表会更新team.number_of_players。
使用JSON作为一种方式为每个用户保留{'username': True}
或类似的东西是值得的吗?
答案 0 :(得分:1)
您有多种方法可以实现您的想法:
最简单的方法:您可以使用更新查询更新列,如下所示:
try:
player = Player(name='New_player_name', team_id=3)
Session.add(player)
Session.flush()
Session.query(Team).filter(Team.id == Player.team_id).update({Team.players_number: Team.players_number + 1})
Session.commit()
except SQLAlchemyError:
Session.rollback()
# error processing
您可以实现sql-trigger。但是对于不同的DBMS,实现是不同的。因此,您可以在DBMS的文档中阅读它。
您可以实现SQLAlchemy触发器,如下所示:
from sqlalchemy import event
class Team(Base):
...
class Player(Base):
...
@staticmethod
def increment_players_number(mapper, connection, player):
try:
Session.query(Team).filter(Team.id == player.team_id)\
.update({Team.players_number: Team.players_number + 1})
except SQLAlchemyError:
Session.rollback()
# error processing
event.listen(Player, 'after_insert', Player.increment_players_number)
UPDATE table1 SET column = column + 1 WHERE id = SOMEID AND (INSERT INTO table2 values (VALUES))