【发布时间】:2021-08-02 07:28:21
【问题描述】:
我完全被难住了。
查询看起来像这样:
WITH e AS(
INSERT INTO TEAMS(TEAM_NAME, SPORT_ID, TEAM_GENDER)
VALUES ('Cameroon U23','1','M')
ON CONFLICT (TEAM_NAME, SPORT_ID, TEAM_GENDER)
DO NOTHING
RETURNING TEAM_ID
)
SELECT * FROM e
UNION
SELECT TEAM_ID FROM TEAMS WHERE LOWER(TEAM_NAME)=LOWER('Cameroon U23') AND SPORT_ID='1' AND LOWER(TEAM_GENDER)=LOWER('M');
而python代码是这样的:
sqlString = """WITH e AS(
INSERT INTO TEAMS(TEAM_NAME, SPORT_ID, TEAM_GENDER)
VALUES (%s,%s,%s)
ON CONFLICT (TEAM_NAME, SPORT_ID, TEAM_GENDER)
DO NOTHING
RETURNING TEAM_ID
)
SELECT * FROM e
UNION
SELECT TEAM_ID FROM TEAMS WHERE LOWER(TEAM_NAME)=LOWER(%s) AND SPORT_ID=%s AND LOWER(TEAM_GENDER)=LOWER(%s);"""
cur.execute(sqlString, (TEAM_NAME, SPORT_ID, TEAM_GENDER, TEAM_NAME, SPORT_ID, TEAM_GENDER,))
fetch = cur.fetchone()[0]
我得到的错误是关于 "cur.fetchone()[0]" 因为 "cur.fetchone()" 没有为某些返回任何值原因。我也尝试过“cur.fetchall()”,但这是同样的问题。
这个查询每次都可以在普通的 postgres shell 中正常工作。但是,在我使用 psycopg2 的 python 代码中,它有时会出错并且不返回任何内容。当我从 shell 检查数据库时,我正在寻找的数据就在那里,所以它是选择查询应该返回的东西,但不是。
我不确定这是否相关,但我正在创建并发连接(不是连接池)并一次执行多个此类查询。 但是,每个查询都有不同的团队,以防止死锁。
【问题讨论】:
标签: python sql database postgresql psycopg2