[PyQt] why use the non-gui Qt classes in Python
hpj at urpla.net
Fri Aug 24 02:16:26 BST 2018
On Samstag, 18. August 2018 10:29:03 Kyle Altendorf wrote:
> On August 18, 2018 6:23:38 AM EDT, J Barchan <jnbarchan at gmail.com> wrote:
> >On 18 August 2018 at 04:10, Kyle Altendorf <sda at fstab.net> wrote:> >
> >Why would I use QSQLDatabase, the network module if Python offers it
> >> already?
> >I think Florian has already mentioned this, but doing a lot of database
> >stuff I found the Python library ("mysql", I believe) awfully low-level
> >compared to what the Qt SQL classes offer. Both for backend & frontend
> >(GUI) functionality, i.e. not *only* because I want to show it in a
> Sure, maybe you want sqlalchemy or such over your DB driver. Though with
> either there's the async issue. I forget what async sqlalchemy options
> there may be.
QTableView does loading on demand behind the scenes. If you ever display a
table with a few million rows, you will notice the difference. Guaranteed. ;-)
I've done all of them in the past (including using my own ORM on top of
mysql). SqlAlchemy's ORM is really great for complex database operations in
non UI processes, while PyQt is suffering a little from Qt's static datatype
model and related mappers. I love Qt and PyQt, but it still suffers from a few
weak spots. See e.g. https://bugreports.qt.io/browse/QTBUG-277 for details.
OTOH, PyQt excels in performance. As long as you don't do something silly
database-wise, you really feel the power of a good C++ library, that make you
forget, you're running a python script...
Before arriving here (around 08/2001!), I did database UIs in TkInter and
WxPython. While the former sucked as hell in *every* aspect, the latter
suffered from a lot of small details. At that time, toolkits hadn't a concept
of database awareness what so ever.
Back on topic: A strong indication for not using Qt classes is code, that
should be portable across non GUI environments. OTOH and apart from a few
exceptions, I found using the Qt classes via PyQt well supported and doing as
advertised. This is not self-evident, even in the Python eco system.
More information about the PyQt