python,NoneType对象没有属性'\\'getitem\',MySQL查询

2024-10-01 11:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

def getRowFromPolynomes(self, paramId):
    qry = 'SELECT * FROM polynomes WHERE par_id = %d' % paramId
    self.edb.curs.execute(qry)
    row = self.edb.curs.fetchone()
    return row

def fixPolynomes(self):
    rowCount = self.edb.curs.execute('SELECT par_id FROM params')
    for x in xrange(0, rowCount):

        # THE PROGRAM FAILS AT THIS LINE, HOWEVER paramId is correctly received.
        # IT IS CORRECTLY PRINTED, NAMELY THE 28731 AT THE BEGINNING OF MY OUTPUT
        paramId =  self.edb.curs.fetchone()[0]
        print paramId

        result = self.getRowFromPolynomes(paramId)
        if result is None:
            self.addRowToPolynomes(1, paramId)

数字2873是self.edb.curs.fetchone()[0]的预期输出,它被正确地打印出来,但是程序在第45行失败,也就是paramId = self.deb.curs.fetchone()[0]

我不明白,我还缺什么?在

我的输出:

^{pr2}$

Tags: thefromselfidexecutedefselectrow
1条回答
网友
1楼 · 发布于 2024-10-01 11:37:52

问题是您在这两个方法中都使用了self.edb.curs,因此在第一次迭代期间,游标将获取一行进行查询:

SELECT par_id FROM params

但在这个循环中你称之为:

^{pr2}$

此方法使用相同的游标执行查询:

SELECT * FROM polynomes WHERE par_id = %d

因此,第一个查询的结果被清除,但是rowCount的值在:

for x in xrange(0, rowCount):

保持不变。在

后一个查询只返回了对fetchone()的一个行sow next调用:

paramId = self.edb.curs.fetchone()[0]

确实返回None和{}确实没有方法__getitem__,因此按索引访问失败。在

解决方案:

def fixPolynomes(self):
    self.edb.curs.execute(
        'SELECT params.par_id, polynomes.* FROM params LEFT OUTER JOIN polynomes ON params.par_id = polynomes.par_id'
    )
    for result in self.edb.curs:
        if result[1] is None:
            self.addRowToPolynomes(1, paramId)

您可以对此进行调整,但方法getRowFromPolynomes(self, paramId)绝对不需要,因为您可以在一个查询中联接两个表。
谢谢你的评论。我知道这一点,但我只想对OP的代码进行绝对必要的修改。不管怎样,我只是纠正了这一点,因为你是对的。

相关问题 更多 >