Python: таблица PyQt5 с SQL - Postgrees - PullRequest
0 голосов
/ 27 марта 2020

я пишу код в python, и мне нужно заполнить таблицу с выбором базы данных, а также обновить sh каждые 5 минут, может ли кто-нибудь помочь мне с этим? я уже пробовал много способов, но ни один не был прав.

Любой совет для этого?

 MainWindow >
    def createConnection():
    connString = "host='*********' port='****' dbname='***' user='***' password='*******'"

    global db
    db = QSqlDatabase.addDatabase('QPSQL')
    db.setDatabaseName(connString)

    if db.open():
        print('connect to SQL Server successfully')
        return True
    else:
        print('connection failed')
        return False

def displayData(sqlStatement):
    print('processing query...')
    qry = QSqlQuery(db)
    qry.prepare(sqlStatement)
    qry.exec()

    model = QSqlQueryModel()
    model.setQuery(qry)

    view = QTableView()
    view.setModel(model)
    return view    


    if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()        
    ui.setupUi(MainWindow)
    MainWindow.showMaximized()       

    if createConnection():
        SQL_STATEMENT = "select prod_descricao,prun_preco from produnidade inner join produtos ON (prod_codigo = prun_prod_codigo) where prun_unid_codigo = '101' limit 20"
        dataView = displayData(SQL_STATEMENT)
        dataView.show()

    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 27 марта 2020

Вам просто нужно сделать QTimer, который снова устанавливает запрос:

from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel


def create_connection():
    connString = (
        "host='*********' port='****' dbname='***' user='***' password='*******'"
    )

    db = QSqlDatabase.addDatabase("QPSQL")
    db.setDatabaseName(connString)

    if db.open():
        print("connect to SQL Server successfully")
        return True
    print("connection failed")
    return False


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    if not create_connection():
        sys.exit(-1)

    model = QSqlQueryModel()
    view = QTableView()
    view.setModel(model)

    def on_timeout():
        SQL_STATEMENT = "SELECT prod_descricao, prun_preco FROM produnidade INNER JOIN produtos ON (prod_codigo = prun_prod_codigo) WHERE prun_unid_codigo = '101' LIMIT 20"
        model.setQuery(SQL_STATEMENT)
        QTimer.singleShot(5 * 1000, on_timeout)

    on_timeout()
    sys.exit(app.exec_())
...