DBの画面表示について

実現したいこと

DBに登録されている値をリアルタイムで画面に表示したいです。

プログラムの実行環境は、windows10 64ビットで使用言語はPython3です。
使用ライブラリとしては、PyQt5を使用しています。

データベースがインストールされているPCとプログラムを実行するPCは同一のPCです。

発生している問題・分からないこと

DB(Postgresql)のテーブルに登録されている値をリアルタイムで画面に表示したいです。

コマンドプロンプトからプログラムを実行すると、ウィンドウは立ち上がるのですが画面に何も表示されていません。実現したい挙動としては、DBの値を読み込んできて、テーブルのように画面に表示したいです。
データベース側のテーブル名『c』には、『a』という列と『b』という列が設定されており
その値を読み込んできて、画面に表示するものとします。
個人情報上、秘密事項はプログラム中に『※』としています。

データベース名は『d』としています。

画面には『ID』、『番号』という列を設定して
『ID』の列には『a』の列の値を、『番号』の列には『b』の列の値を入れていくものとします。

該当のソースコード

Python3

1import sys 2import os 3os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = 'C:\\Users\\※\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyQt5\\Qt5\\plugins' 4from PyQt5 import QtCore as qtc 5from PyQt5 import QtGui as qtg 6from PyQt5 import QtSql as qts 7from PyQt5 import QtWidgets as qtw 8 9class MainWindow(qtw.QWidget): 10 11 def __init__(self): 12 super().__init__() 13 # 画面タイトルの設定 14 self.setWindowTitle("ユーザー名簿表示") 15 # 画面サイズの設定 16 self.resize(640, 500) 17 # DB接続 18 self.db = None 19 # レイアウト 20 layout = qtw.QVBoxLayout() 21 self.setLayout(layout) 22 # データベース接続 23 self.db_connect() 24 # 必要テーブルの存在チェック 25 required_tables = {"c"} 26 self.table_check(required_tables) 27 # モデル(QSqlQueryModel)の作成 28 self.product_info_model = qts.QSqlQueryModel() 29 # モデルが取得するクエリを設定 30 self.product_info_model.setQuery( 31 "select a,b from c" 32 ) 33 # 列名を設定 34 column_names = ["ID", "番号"] 35 self.set_column_names(column_names) 36 # ビュー(QTableView)を作成 37 self.product_list_view = qtw.QTableView() 38 # 作成したモデルを設定 39 self.product_list_view.setModel(self.product_info_model) 40 # ビューをレイアウトに追加 41 self.layout().addWidget(self.product_list_view) 42 # 画面表示 43 self.show() 44 def db_connect(self): 45 """DB接続""" 46 # PostgreSQLデータベースへの接続 47 self.db = qts.QSqlDatabase.addDatabase("QPSQL") 48 print(f"DBドライバー一覧: {self.db.drivers()}") 49 self.db.setDatabaseName("d") 50 self.db.setHostName("※.※.※.※") 51 self.db.setPort(5432) 52 self.db.setUserName("postgres") 53 self.db.setPassword("※") 54 # データベースをオープンし、エラーの場合は終了する 55 if not self.db.open(): 56 error = self.db.lastError().text() 57 qtw.QMessageBox.critical( 58 None, 59 "DB接続エラー", 60 "データベースファイルを開けませんでした。", 61 ) 62 sys.exit(1) 63 def table_check(self, required_tables): 64 """テーブルが対象DBに存在するかをチェックする 65 Args: 66 required_tables: 必要テーブルの集合(set) 67 """ 68 # データベースの情報を取得して対象テーブルが存在するかチェックする 69 tables = self.db.tables() 70 print(f"テーブル一覧: {tables}") 71 missing_tables = required_tables - set(tables) 72 if missing_tables: 73 qtw.QMessageBox.critical( 74 None, 75 "DB存在確認エラー", 76 f"必要なデータが存在しません: {missing_tables}", 77 ) 78 sys.exit(1) 79 def set_column_names(self, columns): 80 """列名設定 81 Args: 82 columns: 列名リスト 83 """ 84 for i, name in enumerate(columns): 85 self.product_info_model.setHeaderData( 86 i, qtc.Qt.Orientation.Horizontal, name 87 ) 88def main(): 89 """メイン関数""" 90 app = qtw.QApplication(sys.argv) 91 mv = MainWindow() 92 sys.exit(app.exec()) 93if __name__ == "__main__": 94 main()

試したこと・調べたこと

上記の詳細・結果

ソースコードをあれやこれやと変更してみたが、画面に何も反映されなかった。

今現在プログラムを実行してみると、表示される画面を添付画像
に載せます。プログラムのどこがどう悪いかご教示いただけますと幸いです。イメージ説明

補足

特になし

コメントを投稿

0 コメント