Sqlalchemy sql alchemy列值依赖于其他表

Sqlalchemy sql alchemy列值依赖于其他表,sqlalchemy,Sqlalchemy,如果有一个表包含一列,我想获取另一个表列中列“id”的出现次数 因此,如果每个球员都有一个表“player”,并且有一个表“goals”列出了每个得分,那么有没有一种简单的方法可以在每次将他们得分的一个进球添加到进球表时自动更新player列 另一个例子是“team”和“players”表,在该表中,每当使用player.team\u name==team.name或类似内容添加一名球员时,该表都会更新team.number\u球员 使用JSON作为保存每个用户的{'username':True

如果有一个表包含一列,我想获取另一个表列中列“id”的出现次数

因此,如果每个球员都有一个表“player”,并且有一个表“goals”列出了每个得分,那么有没有一种简单的方法可以在每次将他们得分的一个进球添加到进球表时自动更新player列

另一个例子是“team”和“players”表,在该表中,每当使用
player.team\u name==team.name
或类似内容添加一名球员时,该表都会更新team.number\u球员


使用JSON作为保存每个用户的
{'username':True}
或类似内容的方式是否值得?

您有几种方法来实现您的想法:

  • 最简单的方法:可以使用更新查询更新列,如下所示:

        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触发器。但是对于不同的DBMS,实现是不同的。因此,您可以在DBMS的文档中了解它

  • 您可以实现SQLAlchemy触发器,如下所示:

  •     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
    
  • 如您所见,始终有两个查询,因为您应该执行两个过程:插入和更新。我认为(但我不确定)某些DBMS可以处理如下查询:

  • 不需要创建一个包含count的新列,并在事件发生时更新它。以球员和进球为例,您可以在两个表之间进行
    连接
    ,然后
    计算
    进球数。看看文档,哦,当然,你需要
    Session.commit()
    try
    increment\u players\u number
    方法
    
        UPDATE table1 SET column = column + 1 WHERE id = SOMEID AND (INSERT INTO table2 values (VALUES))