2014-08-27 68 views
0

是否可以在.txt或.doc或任何可打印文件中查看此查詢的結果(以及類似查詢),然後用戶可以隨時保存他喜歡的任何地方打印,如果他想?PyQt:在文檔或.txt文件中查看查詢結果

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 

EDIT2

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() 

這表明只有前4個標題,它看起來像這樣:http://oi62.tinypic.com/2guxf5t.jpg

回答

2

我建議使用csv以便於閱讀。閱讀示例this

小例子;

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查看你的數據,你的配置正確使用Comma爲了刁難你的數據;

csv view with open office calc

+0

我編輯了我的帖子。 – Luka 2014-08-28 10:57:37

+0

我忘記了範圍號碼。看到我最後編輯的答案。 – 2014-08-28 11:06:58

+0

現在我得到這個:'AttributeError:'str'object has no attribute'toString'' – Luka 2014-08-28 12:52:55

0

,如果你在一個.py文件在Linux終端單獨過這樣的代碼簡單地做這個命令:

python your_file_nam > ex_file.txt 
+0

不,這只是我的代碼的一部分。 – Luka 2014-08-27 22:13:21