2021-04-12

PySide6 でデータベースを扱う

Qt for Python (PySide6) は、Qt 6 の Python バインディングで、Qt 6と同じく、LGPLv3 / GPLv3Qt commercial license(商用ライセンス)が適用されています。

Qt には、GUI を構成するためのモジュールだけでなく、GUI と併せて利用すると便利なモジュールも数多く用意されています [1]。SQL データベースを扱うモジュール QtSql もその一つです。

今回は QtSql モジュールを利用した GUI サンプルを紹介します。

本ブログ記事では下記の OS 環境で動作確認をしています。

Fedora 34 (Workstation Edition Prerelease) x86_64
- python3-3.9.2-1
- venv/pip: PySide6 (6.0.2)

郵便番号のデータベースを作る

データベースのサンプルとして、日本郵政の郵便番号の CSV 形式のデータベースをダウンロードして、文字コードを Windows の cp932 から UTF-8 へ変換したファイルを使用しています。

以下に郵便番号のデータベースを作成するサンプルを示しました。このサンプルでは、データベースは扱いが手軽な SQLite を使っています。

なお、QtSql モジュールの使い方は、参考サイト [2] で紹介されているサンプルを参考にさせていただきました。

qt_database_create.py

 

郵便番号の元ファイルは下記を使用しています。期待より SQLite のデータベースへの書き込み速度がずいぶんと遅かったので、ファイル名に ALL が入っていますが、先頭 100 個のデータに削ってあります。

実行例を以下に示しました。データベースファイルに、作成したい SQLite のデータベースファイル名 (postal.sqlite) を入力して、作成 ボタンをクリックします。

qt_database_create.py の実行例

データベースの処理は、スレッドを別に作って進捗を表示するようにしました。しかし、たった 100 個のデータ処理の進捗が見れると言うことは、処理速度がずいぶん遅いように思います。どこかサンプルの作り方が間違っているのかもしれません。😅

※ Windows 10 上で確認したところ、明らかに処理速度が Linux で実行した場合より上でした。OS による Qt の処理速度差については、継続的に調査します。

作成した postal.sqlite の内容をDB Browser for SQLite で確認した例を示しました。

作成した postal.sqlite の内容 (DB Browser for SQLite)

このサンプルで作成した(全ての郵便番号リストの情報を含んだ)postal.sqlite を使って、QtSql モジュールを利用したサンプルをもう少し紹介していく予定です。

参考サイト

  1. Qt Modules — Qt for Python
  2. Handling SQL Databases With PyQt: The Basics – Real Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

3 件のコメント:

鳥類代表取締役 さんのコメント...

最近PySide6でデスクトップアプリケーションを開発しているものです。
もろもろ情報を調べていると、こちらのブログに行きつくことが多々あるのですが、記事内のサンプルのソースコードが、どの記事も見れない為、結果的にこういうことができるという情報のみにとどまっています。

もともとソースを公開しない前提の記事であったら申し訳ありませんが、「~.py」というファイル名の記載があるので、本来はソースを見えるようにする前提であると認識しております。

一応ChromeとFirefoxの両方で閲覧を試しましたが、どちらも同じ結果となりました。
Pyside6の、それも日本語の情報となると大変希少な為、もし各記事のソースコードを公開していただけるようなら、非常に助かります。

お忙しいところを申し訳ありませんが、よろしくお願い申し上げます。

bitWalk さんのコメント...

コメントをありがとうございます。
github のコードが見れるようにリンクを貼ってるのですが、最近、反映されていません。やり方が間違っているのかもしれません。

下記に、サンプル一覧がありますので、よろしかったら覗いて見てください。
https://github.com/bitwalk123/PySide6_sample

鳥類代表取締役 さんのコメント...

URLの紹介、ありがとうございます。
早速見させていただきます。