在psq中使用将相关数据插入两个表中

2024-04-29 05:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手,在尝试同时将相关值插入两个表中时遇到了障碍。我很感激你的指导来解决这个问题!在

表1(玩家):

CREATE TABLE players(
  player_id serial PRIMARY KEY,
  player_name  varchar(50) NOT NULL);

表2(匹配项):

^{pr2}$

我的职能: 我希望函数将值传递给查询。 我已经尝试了多种变化,包括以下几种,但到目前为止还没有运气。在

def registerPlayer(name):
    cur.execute("""WITH player_key AS
               (INSERT INTO players(player_name) VALUES(%(name)s), {'name': name} RETURNING player_id)
               INSERT INTO matches (player_id, match, match_result) 
               VALUES((SELECT player_key.player_id), 1, 'won') """)

Tags: keynameidmatchcreatetable玩家insert
2条回答

在单个查询中执行:

query = """
    with player_key as (
        insert into players(player_name) 
        values (%(name)s) 
        returning player_id
    )
    insert into matches (player_id, match, match_result) 
    select player_id, 1, 'won'
    from player_key
"""

cursor.execute (query, {'name': name})

我会这样做:

connection.begin()  # start a transaction
cur.execute("INSERT INTO players (player_name) VALUES (%(name)s) RETURNING player_id", {'name': name})
player_id = cur.fetchone()[0]
cur.execute("INSERT INTO matches (player_id, match, match_result) VALUES (%(player_id)s, 1, 'won')", {'player_id': player_id})
connection.commit()

相关问题 更多 >