我有可能是一个简单的问题。 我正在构建一个应用程序,将特定格式的文件上传到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)))
解释它的意图。它计算表中的列数,然后它开始逐个填充返回的结果,但确保当它到达行的末尾时,它会跳转到下一行(只有这样我才能考虑这样做) )。
答案 0 :(得分:0)
我注意到你没有重置u
,currentItem
总是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
我希望它有所帮助。