Re: PyQt Digest, Vol 191, Issue 9

Barry Scott <[email protected]> Tue, 9 Jun 2020 18:27:49 +0100
Newsgroups gmane.comp.python.pyqt-pykde
Message-ID <[email protected]>

> On 9 Jun 2020, at 12:16, Nenad Lamza <[email protected]> wrote:
>=20
> Dennis,
>=20
> I must be honest and admit I couldn't understand a word you were =
talking about.
>=20
> Are you suggesting me to use psycopg2 or something else instead of =
standard PyQt QSqlDatabase, QSqlQuery, QSqlQueryModel,... And as I =
understand you suggest that I use MVC without QSqlQueryModel and =
QTableView. How, to take a few years off and make my own MVC?


I think he is saying that you could use tools like SqlAlchemy or =
psycopg2 for the Postgresql side of things and feed the business logic =
objects from your DB access code into your GUI.

Raw access to the SQL output is not that useful in many apps that have =
Sql backends as they have to work in end-user concepts not tables.

Also I think he is saying using PyQt5 Sql is harder to get going because =
of the driver problem.

Barry


>=20
> Nenad
>=20
>=20
>> ------------------------------
>>=20
>> Message: 2
>> Date: Mon, 8 Jun 2020 09:21:15 -0500
>> From: Dennis Jensen <[email protected]>
>> To: [email protected]
>> Subject: Re: What is the right way to use PostgreSQL with PyQt5
>> Message-ID: <[email protected]>
>> Content-Type: text/plain; charset=3D"utf-8"; Format=3D"flowed"
>>=20
>> First and foremost using the PyQt database tools is completely
>> unnecessary and is either at the least adding much more complexity =
than
>> needed and at worst it is tying the front-end way to tightly to the
>> back-end which is just full numerous issues.  However, on a positive
>> note you can interface with PostgresSQL and any other database =
software
>> using straight Python allowing one to build an interface to the =
database
>> that they can connect to the GUI via a Data-Router (or Controller) =
thus
>> in 90% or more of the cases where you are dealing with a GUI and a =
data
>> source (be it a database or something else that supplies data) the =
MVC
>> or (M-C/R-V) methodology is generally the best method to apply as it
>> keeps things very simple and straight forward and you can later =
easily
>> add and/or change either the front-end and/or back-end without any
>> issues and these kind of changes do happen more often than one might
>> suspect.  Next it also removes or at least reduces the issues you =
might
>> be having with drivers because once you get the PostresSQL up and
>> running you do not need anything more than the Python library to
>> interface with it.
>>=20
>> On 6/7/2020 12:02 PM, Nenad Lamza wrote:
>>> I use PostgreSQL 9.6.17 (installed on linux server on LAN) and have
>>> Win10 (or Win7) clients with installed Python 3.7 or 3.8 and PyQt
>>> 5.13.2, and my PyQt5 app that uses that PostgreSQL server works ok,
>>> but I really don't know what I'm doing.
>>>=20
>>> I'll describe the problem. If I don't have PostgreSQL installed on =
Win
>>> client (I don't need it because I use PostgreSQL on linux server) or
>>> have installed it but not in path, my app crashes with the error:
>>> "QSqlDatabase: QPSQL driver not loaded".
>>>=20
>>> So, I need some drivers. And I install PostgreSQL 9.6.x on Win =
client
>>> and have it in path and after that everything works ok, but only if =
I
>>> had luck and picked the right x in PostgreSQL 9.6.x version.
>>>=20
>>> The alternative is that I don't install PostgreSQL 9.6.x (why would =
I
>>> need to install it) on client machine and just copy some dll files =
at
>>> the app directory. If I find the right files (drivers), everything
>>> works ok, but if I don't, the app crashes with the error:
>>> "QSqlDatabase: QPSQL driver not loaded" or worse, recognize the
>>> PostgreSQL database on server, works ok some time, but after the
>>> first, second or third query it crashes.
>>>=20
>>> Some driver combinations I copy to my app directory that work with
>>> PyQt 5.13.2:
>>>=20
>>> 1.
>>> Timestamp                      Size             File
>>> 25/02/2016  07:19         1,015,973 libiconv-2.dll
>>> 07/01/2016  09:02         1,550,023 libintl-8.dll
>>> 10/07/2019  20:20           145,408 libpq.dll
>>>=20
>>> 2.
>>> Timestamp                      Size             File
>>> 21/06/2019  14:43         1,218,048 libeay32.dll
>>> 25/02/2016  07:19         1,015,973 libiconv-2.dll
>>> 07/01/2016  09:02         1,550,023 libintl-8.dll
>>> 10/07/2019  20:20           145,408 libpq.dll
>>> 21/06/2019  14:43           276,992 ssleay32.dll
>>>=20
>>> If I install PyQt 5.14 or 5.15 (instead of PyQt 5.13.2), the app
>>> crashes, and I am afraid to upgrade PyQt5.
>>>=20
>>> So, my question is:
>>> How do I know which drivers I should copy to my app directory with
>>> various version of PyQt5, that's the mistery to me. And also if
>>> copying the drivers to my app directory is the right way at all?
>>>=20
>>> There's a fine answer here:
>>>=20
>>> =
https://stackoverflow.com/questions/20884010/qt5-failed-to-load-psql-drive=
r-in-windows
>>>=20
>>> "It's quite likely to be failing because there's a dependency of
>>> |qsqlpsql.dll| missing - either |libpq.dll|, or one of the libraries
>>> that |libpq| build requires." ... "You should use the /same/ libpq
>>> your Qt's |qsqlpgsql.dll| was compiled against if possible."
>>>=20
>>> If that's true, how should I know with what libpq library
>>> qsqlpgsql.dll was compiled in. I suppose PyQt 5.13.2's qsqlpgsql.dll
>>> is compiled with different version than PyQt 5.14.x's qsqlpgsql.dll =
or
>>> even 5.15.x's qsqlpgsql.dll.
>>>=20
>>> Also, this link has some clues:
>>> =
https://stackoverflow.com/questions/26507353/qpsql-driver-not-loaded-qt
>>>=20
>>> And generally, what's the best way to work with PostgreSQL in PyQt5.
>>> It obviously doesn't work out of the box if PostgreSQL is not
>>> installed on client machine, and even if the wrong version is =
installed.
>>>=20
>>> Nenad
>>>=20
>>=20
>=20