PyQt:在文档或.txt文件中查看查询结果
有没有办法把这个查询(以及类似的查询)的结果保存到一个.txt或者.doc文件,用户可以随意保存到自己想要的地方,如果需要的话还可以打印出来?
query.setQuery(""" SELECT * FROM "%s" WHERE METAPHONE("%s", 3) = METAPHONE('%s', 3) OR LEVENSHTEIN("%s", '%s') < 4 """ % (str(self.search_from_table_lineEdit.text()), str(self.search_where_lineEdit.text()), str(self.search_has_value_lineEdit.text()), str(self.search_where_lineEdit.text()), str(self.search_has_value_lineEdit.text())))
global var
var = QtGui.QTableView()
var.setModel(query)
var.show()
编辑:我试过这个:
class report_GUI(QtGui.QWidget, Ui_report_Widget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
self.report_Create_Report_button.clicked.connect(self.report_data)
def report_data(self):
FILE_NAME = 'export.csv'
exportQSqlQueryModel = QSqlQueryModel()
exportQSqlQueryModel.setQuery(""" SELECT * FROM "%s" WHERE "%s" = '%s' """ % (str(self.report_from_table_lineEdit.text()), str(self.report_where_lineEdit.text()), str(self.report_has_value_lineEdit.text())))
exportFile = open(FILE_NAME, 'wt')
writer = csv.writer(exportFile)
for row in exportQSqlQueryModel.rowCount():
listsTmpData = []
for column in exportQSqlQueryModel.columnCount():
listsTmpData.append(str(exportQSqlQueryModel.record(row).value(column).toString()))
writer.writerow(listsTmpData)
exportFile.close()
结果出现了这个错误:
line 563, in report_data
for row in exportQSqlQueryModel.rowCount():
TypeError: 'int' object is not iterable
编辑2:
def report_data(self):
FILE_NAME = 'export.csv'
exportQSqlQueryModel = QSqlQueryModel()
exportQSqlQueryModel.setQuery(""" SELECT * FROM "%s" WHERE "%s" = '%s' """ % (str(self.report_from_table_lineEdit.text()), str(self.report_where_lineEdit.text()), str(self.report_has_value_lineEdit.text())))
exportFile = open(FILE_NAME, 'wt')
writer = csv.writer(exportFile)
if (self.report_from_table_lineEdit.text() == "pacijent"):
exportQSqlQueryModel.setHeaderData(0, QtCore.Qt.Horizontal, 'OIB pacijenta')
exportQSqlQueryModel.setHeaderData(1, QtCore.Qt.Horizontal, 'Prezime')
exportQSqlQueryModel.setHeaderData(2, QtCore.Qt.Horizontal, 'Ime')
exportQSqlQueryModel.setHeaderData(3, QtCore.Qt.Horizontal, 'ID sobe')
exportQSqlQueryModel.setHeaderData(4, QtCore.Qt.Horizontal, 'Adresa')
exportQSqlQueryModel.setHeaderData(5, QtCore.Qt.Horizontal, 'Datum rodjenja')
exportQSqlQueryModel.setHeaderData(6, QtCore.Qt.Horizontal, 'Spol')
listsTmpData = []
for row in range(exportQSqlQueryModel.rowCount()):
listsTmpData.append(str(exportQSqlQueryModel.headerData(row, QtCore.Qt.Horizontal)))
writer.writerow(listsTmpData)
for row in range(exportQSqlQueryModel.rowCount()):
listsTmpData = []
for column in range(exportQSqlQueryModel.columnCount()):
listsTmpData.append(str(exportQSqlQueryModel.record(row).value(column)))
writer.writerow(listsTmpData)
exportFile.close()
它只显示了前四个列标题,结果看起来像这样:http://oi62.tinypic.com/2guxf5t.jpg
2 个回答
0
如果你在Linux终端里有一个单独的.py
文件,想要运行这个代码,只需要输入这个命令:
python your_file_nam > ex_file.txt
2
我建议使用csv格式,这样更容易阅读。可以参考这个例子。
这里有个简单的例子:
import csv
import sys
from PyQt4 import QtCore, QtGui, QtSql
FILE_NAME = 'export.csv'
# .
# .
# .
exportQSqlQueryModel = QtSql.QSqlQueryModel()
exportQSqlQueryModel.setQuery('YOUR QUERY')
# .
# . # Do anything in query
# .
# Open file
exportFile = open(FILE_NAME, 'wt')
writer = csv.writer(exportFile)
# If your don't have header data, Your can delete this section
listsTmpData = []
for column in range(exportQSqlQueryModel.columnCount()):
listsTmpData.append(str(exportQSqlQueryModel.headerData(column, QtCore.Qt.Horizontal).toString()))
writer.writerow(listsTmpData)
# Write file
for row in range(exportQSqlQueryModel.rowCount()):
listsTmpData = []
for column in range(exportQSqlQueryModel.columnCount()):
listsTmpData.append(str(exportQSqlQueryModel.record(row).value(column).toString()))
writer.writerow(listsTmpData)
exportFile.close()
如果你想在导出的文件中包含标题,请在QSqlQueryMode.setHeaderData
中设置标题,并在导出数据之前写入它们;
.
.
.
exportQSqlQueryModel.setHeaderData(0, QtCore.Qt.Horizontal, 'Name')
exportQSqlQueryModel.setHeaderData(1, QtCore.Qt.Horizontal, 'Age')
.
.
.
listsTmpData = []
for column in range(exportQSqlQueryModel.columnCount()):
listsTmpData.append(str(exportQSqlQueryModel.headerData(column, QtCore.Qt.Horizontal).toString()))
writer.writerow(listsTmpData)
.
.
.
要在open office calc
中查看你的数据,确保你的设置使用逗号
来正确分隔数据;