你好,我有一個很難試圖使這一功能中,我必須:從數據庫中的記錄與Python和PostgreSQL返回一個元組列表
"""Returns a list of the players and their win records, sorted by wins.
The first entry in the list should be the player in first place, or a player
tied for first place if there is currently a tie.
Returns:
A list of tuples, each of which contains (id, name, wins, matches):
id: the player's unique id (assigned by the database)
name: the player's full name (as registered)
wins: the number of matches the player has won
matches: the number of matches the player has played
"""
目前我有這個功能來嘗試解決:
def playerStandings():
conn = connect()
c = conn.cursor()
c.execute("SELECT id, name \
FROM players LEFT JOIN matches \
ON players.id = matches.id_winner \
ORDER BY players.id")
result = c.fetchall()
conn.close()
return result
,當我運行代碼,我得到這個錯誤信息:在比賽
Traceback (most recent call last): File "tournament_test.py", line 152, in testStandingsBeforeMatches() File "tournament_test.py", line 61, in testStandingsBeforeMatches raise ValueError("Each playerStandings row should have four columns.") ValueError: Each playerStandings row should have four columns.
線152 _test.py是:
testStandingsBeforeMatches()
和線61是:
if len(standings[0]) != 4:
raise ValueError("Each playerStandings row should have four columns.")
[(id1, name1, wins1, matches1), (id2, name2, wins2, matches2)] = standings
最後變量 「排名」 是在管線54
standings = playerStandings()
這對我的功能playerStandings()的呼叫是我的SQL腳本來創建數據庫和表格:
CREATE DATABASE tournament;
\c tournament;
CREATE TABLE players (id SERIAL, name TEXT, PRIMARY KEY (id));
CREATE TABLE matches (
id_match SERIAL,
id_winner SERIAL REFERENCES players(id),
id_looser SERIAL REFERENCES players(id),
PRIMARY KEY (id_match)
);
我能做些什麼來解決這個問題?我真的很新的python所以我不明白它很好
您是否使用與用於創建表的用戶相同的用戶連接到數據庫?你似乎遇到的是一個權限錯誤,連接你用來創建表的用戶會驗證它是否是。 – John
嗨@John我編輯了正確的錯誤信息,請再次檢查 –
該字典在每個元組中有4個項目,但查詢結果每行只有兩列,這就是代碼引發錯誤。 –