データベースからデータを取得し、それらを異なるリストに割り当てようとしています。この特定のエラーは、「TypeError:タプルインデックスはstrではなく整数でなければなりません」という多くのトラブルを引き起こしています。floatなどに変換しようとしましたが、成功しませんでした。
コードは次のようになります
conn=MySQLdb.connect(*details*)
cursor=conn.cursor()
ocs={}
oltv={}
query="select pool_number, average_credit_score as waocs, average_original_ltv as waoltv from *tablename* where as_of_date= *date*"
cursor.execute(query)
result=cursor.fetchall()
for row in result:
print row
ocs[row["pool_number"]]=int(row["waocs"])
oltv[row["pool_number"]]=int(row["waoltv"])
printステートメントの出力例は次のとおりです。
('MA3146', 711L, 81L)
('MA3147', 679L, 83L)
('MA3148', 668L, 86L)
これは私が得ている正確なエラーです:
ocs[row["pool_number"]]=int(row["waocs"])
TypeError: Tuple indices must be integers, not str
助けていただければ幸いです!人々に感謝します!
エラーが言うように、row
はタプルなので、row["pool_number"]
。インデックスを使用する必要があります:row[0]
。
TL; DR:パラメーターcursorclass=MySQLdb.cursors.DictCursor
の最後にMySQLdb.connect
。
動作するコードがあり、DBが移動したため、Host/user/passを変更する必要がありました。この変更の後、コードが機能しなくなり、このエラーが発生し始めました。よく調べて、追加のディレクティブがある場所に接続文字列をコピーして貼り付けました。古いコードは次のようになります。
conn = MySQLdb.connect(Host="oldhost",
user="olduser",
passwd="oldpass",
db="olddb",
cursorclass=MySQLdb.cursors.DictCursor)
次のものに置き換えられました。
conn = MySQLdb.connect(Host="newhost",
user="newuser",
passwd="newpass",
db="newdb")
パラメーターcursorclass=MySQLdb.cursors.DictCursor
が最後にpythonを作成していたので、インデックスとして列名を使用して行にアクセスできるようになりました。
したがって、すでに提示されているソリューションの代替として、このパラメーターを追加して、元の方法で行にアクセスすることもできます。 ^ _ ^これが他の人に役立つことを願っています。
問題はrow
にアクセスする方法です
特に、ocs[row["pool_number"]]=int(row["waocs"])
の_row["waocs"]
_および_row["pool_number"]
_
fetchall()
の official-documentation を検索すると、見つかります。
このメソッドは、クエリ結果セットのすべての(または残りのすべての)行をフェッチし、タプルのリストを返します。
したがって、行の値には_row[__integer__]
_のような_row[0]
_でアクセスする必要があります