首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:从mysql表中选择时,元组索引必须是整数,而不是字符串

Python:从mysql表中选择时,元组索引必须是整数,而不是字符串
EN

Stack Overflow用户
提问于 2012-09-08 04:52:44
回答 7查看 83.8K关注 0票数 20

我有以下方法,我从表中选择所有ids,并将它们附加到一个列表中,然后返回该列表。但是当执行这段代码时,我最终得到的元组索引必须是整数...错误。我已经附加了错误和打印输出以及我的方法:

代码语言:javascript
复制
def questionIds(con):
    print 'getting all the question ids'
    cur = con.cursor()
    qIds = []
    getQuestionId = "SELECT question_id from questions_new"
    try:
        cur.execute(getQuestionId)
        for row in cur.fetchall():
            print 'printing row'
            print row
            qIds.append(str(row['question_id']))
    except Exception, e:
        traceback.print_exc()
    return qIds

打印我的方法所做的:

代码语言:javascript
复制
Database version : 5.5.10 
getting all the question ids
printing row
(u'20090225230048AAnhStI',)
Traceback (most recent call last):
  File "YahooAnswerScraper.py", line 76, in questionIds
    qIds.append(str(row['question_id'][0]))
TypeError: tuple indices must be integers, not str
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-08 04:57:43

python标准mysql库从cursor.execute返回元组。要获取question_id字段,您应该使用row[0],而不是row['question_id']。这些字段的出现顺序与它们在select语句中出现的顺序相同。

提取多个字段的合适方法如下所示

代码语言:javascript
复制
for row in cursor.execute("select question_id, foo, bar from questions"):
    question_id, foo, bar = row
票数 25
EN

Stack Overflow用户

发布于 2014-08-19 19:15:23

MySQLdb模块中有多种游标类型。默认游标返回元组元组中的数据。当我们使用字典游标时,数据以Python字典的形式发送。这样,我们就可以通过数据的列名来引用数据。Source

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb

con = mdb.connect('localhost', 'testuser', 'test623', 'testdb')

with con:

    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Writers LIMIT 4")

    rows = cur.fetchall()

    for row in rows:
        print row["Id"], row["Name"]
票数 8
EN

Stack Overflow用户

发布于 2016-08-30 08:00:04

我知道这个问题很古老,但我找到了另一种方法,我认为它比公认的解决方案更好。所以我就把它留在这里以防有人需要它。

在创建游标时,您可以使用

代码语言:javascript
复制
cur = connection.cursor(dictionary=True);

这将允许您在不做任何额外修改的情况下做您想要做的事情。

代码语言:javascript
复制
rows = cur.fetchall()
for row in rows:
    print "%s %s %s" % (row["Id"], row["Name"], row["Price"])
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12325234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档