我试图从数据库中提取数据并将它们分配给不同的列表。
这个特定的错误给了我很多麻烦“TypeError:元组索引必须是整数,而不是str”
我尝试将它转换为浮动等等,但没有成功。
代码如下
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]
。
问题是你如何访问 row
特别 row["waocs"]
和 row["pool_number"]
的 ocs[row["pool_number"]]=int(row["waocs"])
如果你抬头看 官方的文档 的 fetchall()
你发现。
该方法获取查询结果集的所有(或所有剩余)行,并返回元组列表。
因此,您必须使用访问行的值 row[__integer__]
喜欢 row[0]
TL; DR:添加参数 cursorclass=MySQLdb.cursors.DictCursor
在你的结尾 MySQLdb.connect
。
我有一个工作代码,数据库移动了,我不得不改变主机/用户/通行证。在此更改后,我的代码停止工作,我开始收到此错误。仔细检查后,我将连接字符串复制粘贴到具有额外指令的位置。旧代码如下:
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允许我使用列名作为索引来访问行。但可怜的复制粘贴消除了这一点,产生了错误。
因此,作为已经提供的解决方案的替代方案,您还可以添加此参数并以您最初想要的方式访问行。 ^ _ ^我希望这有助于其他人。