Important: Please read the Qt Code of Conduct -

PyQt4: Reading binary data from Postgresql fails under Windows

  • I need to read from Postgresql bytea field that stores binary data and save to disk as pdf.
    I use the following code, which it works under linux but fails under Windows.
    @ self.db = QtSql.QSqlDatabase.database("my_connection")
    query = QtSql.QSqlQuery(self.db)
    query.exec_("SELECT Data FROM files where id =1") # get first row
    bytearr = query.value(0) # get the value of first field

            file=QTemporaryFile(QDir.tempPath() + "/XXXXXX." + '.pdf')
            QDesktopServices.openUrl(QUrl("file:///" + file.fileName()))# open pdf


    The saved file looks corrupted when I run the code under Windows. There is no problem on Linux.
    Could it be a PyQt version problem???

    On Arch linux
    ('Qt version:', '4.8.6')
    ('SIP version:', '4.16.4')
    ('PyQt version:', '4.10.4-snapshot-f62fabcefe39')

    On WINDOS 7
    @('Qt version:', '4.7.1')
    ('SIP version:', '4.13.1')
    ('PyQt version:', '4.8.3')

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    It rather looks like your software doesn't find the PostgreSQL client libraries. Check with something like Dependency Walker

  • I can connect to Postgresql and execute other queries but that one has a problem.

  • Lifetime Qt Champion

    Sorry, I've misunderstood your original problem. Saving a byte array in a file named something.pdf doesn't make it a valid pdf file. If you want to create a PDF you should create one using e.g. QPdfWriter

  • Ok, the file can be any file format in the database i.e. zip, pdf,doc,jpg etc. Is there any generic way to exctract from database and write to disk?

  • Lifetime Qt Champion

    A text file works great

  • Thank you. I 'll check it. I have already checked a pdf and an xml

  • Lifetime Qt Champion

    QFile doesn't know how to write pdf or xml just because you put that extension on the file name. It's your job to provide the right data.

  • Is that an OS specific issue? It works under Linux and not under Windows?

  • Lifetime Qt Champion

    It's not OS nor Qt specific. A file extension doesn't do anything magic when writing programmatically to a file

  • How is it explained that the code works under Linux?
    With the same code I can write pdf and zip.
    Thanks for your patience!

Log in to reply