Stuart: > I was kind of hoping that PyQt's Qsql classes could save me some > work, but AFAICT, I need a Qsql.Database object to use them and > but a Postgreql driver is not available in binary for Windows. You have to compile Qt and PyQt with Postgre suport on windows. I had to do this for MySQL support, and I'll try to translate it to Posgres.
You need to download 0) Postgres, I assume you've already downloaded this and installed it. 1) Grab Qt 4.4.3 from ftp://ftp.trolltech.com/qt/source/qt-win-opensource-4.4.3-mingw.exe That will install Qt and MinGW (the compiler needed for it). After installing make sure to include C:\mingw\bin (or your install location) in your PATH. You'll have to compile Qt before compiling PyQt with posgres support, in order to get Qt do this: configure.exe -qt-sql-psql -I C:/PostgreSQL/include -L C:/PostgreSQL/lib -l pq You might want to check if Qt's configure.exe extra parameteres such as images format support. Then run: mingw32-make mingw32-make install These steps might take some time, around 2hs in a Core2 Duo 1.9GHz with 1Gb or RAM. You could reduce that amount of time by disabling unnecessary things. One Qt is compillled and installed, I'd sugget to check if Qt driver is present. Make a small project, with something like this (I assume you have little C++ experience, but you could ask at #qt in freenode, it's a very active channel): qDebug( QSqlDatabase::drivers().join(", ") ) Check if postgres is listed, take into account that you will need a DLL file in the very same folder where the binary is poduced, otherwise even the driver might have been compiled, it won't load. 2) http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.7.9.zip If mingw's bin folder is in the PATH you won't find any problem in compiling sip. Compile sip will be simpler and faster than Qt, just make sure it's in your path after install. Steps are configure.py, mingw32-make and mingw32-make install 3) Finally it's PyQt4's turn. configure.py, mingw32-make, mingw32-make install and you're done. Copy postgres DLLs to PyQt4 dll folder, and check if it's loaded with QtSql.QSqlDatabase.drivers(). > So an alternative would be to reimplement the Qsql classes using > based on the Python DBAPI protocol, but maybe the cost/benefit ratio > for that is too high? I'd say far to high. Qt has it own philosophy with databases, if you want snappy grids, and automatic updates and all that stuff, i'd suggest to stick to PyQt4 cplusplus-ish way of dealing with data. It's not pythoninc but it works quite well. I must admit ORM's are much more nice to work with, but SQL is not so bad. In my little experience with this (less than 6 months): I had a small codebase in SQLAlchemy ant Twisted before we decided to switch from a web application to PyQt4. SQLAlchemy is definitely easier to write than SQL, so I tried to code as much as SA code as I could, and when it was not possible I used QtSql code. > (Or maybe someone has already done it?) When Qt code was too ugly, I wrapped it with python. For example I wrote this class http://bitbucket.org/D3f0/dsem/src/tip/pyscada/gui/qt_dbhelp.py Line 106 I know that pythonizing Qt's QtSql could go much deeper, and it would be a nice project, but, I have a schedule with this project and what I've done is enough. I hope this might have brought some light into your search. Regards Nahuel _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt