Python:没有显示单个记录,不明白为什么

时间:2014-02-03 13:52:13

标签: python mysql pyqt

我有可能是一个简单的问题。 我正在构建一个应用程序,将特定格式的文件上传到MySQL数据库并执行其他操作,但最值得注意的是,它几乎只显示数据库的内容,就像您期望的任何数据库管理器一样。但是,我刚刚遇到了一件非常不寻常的事情。在加载到另一个文件中以添加到数据库之后,该文件的1个单行不会出现在查看器中,而其余文件则会出现。在上传过程中没有给出任何错误,并且在使用MySQL Workbench后,它会出现在应有的位置。没有任何数据类型是错误的(例如日期中的00:00),我找不到为什么应该挑出这个1文件。

我在这里做错了吗?

cursor.execute("SELECT * FROM info where Date_Out between '%s-01-01' and '%s-02-01' and commodity like '%s' order by Date_Out desc;"% (self.year, self.year, self.commodity))
    dataRows = cursor.rowcount
    rowOfData = cursor.fetchall()
    print len(rowOfData)
    #print rowOfData
    self.tableDatastring.setRowCount(dataRows + 1)
    rowNumber = 0
    u = 0
    currentItem = 0
    for i in rowOfData:
        for x in i:
            if u <= totalColumns:

                self.tableDatastring.setItem(currentItem,rowNumber,QtGui.QTableWidgetItem(str(x)))
                u = u + 1
            else:
                rowNumber = rowNumber + 1
                self.tableDatastring.setItem(currentItem,rowNumber,QtGui.QTableWidgetItem(str(x)))

解释它的意图。它计算表中的列数,然后它开始逐个填充返回的结果,但确保当它到达行的末尾时,它会跳转到下一行(只有这样我才能考虑这样做) )。

1 个答案:

答案 0 :(得分:0)

我注意到你没有重置ucurrentItem总是0,这也是个坏主意:“但要确保当它到达行尾时,它会跳转到下一行(我能想到的唯一方法)。“ - else可以创建您不期望的新行。 if u <= totalColumns:确保它在到达行尾时会停止,但是您应该确切知道有多少列(数据库和tableDatastring中的相同数字),因此您实际上不需要检查它何时到达队伍的尽头。所以,试试这段代码:

cursor.execute("SELECT * FROM info where Date_Out between '%s-01-01' and '%s-02-01' and commodity like '%s' order by Date_Out desc;"% (self.year, self.year, self.commodity))
dataRows = cursor.rowcount
self.tableDatastring.setRowCount(dataRows)
rowNumber = 0   
while True:
    oneRow = cursor.fetchone()
    if oneRow == None:
        break
    for columnNumber, columnData in enumerate(oneRow):
        self.tableDatastring.setItem(columnNumber,rowNumber,QtGui.QTableWidgetItem(str(columnData)))
    rowNumber += 1 

我希望它有所帮助。