Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/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")
    if self.db.open():
    query = QtSql.QSqlQuery(self.db)
    query.exec_("SELECT Data FROM files where id =1")
    query.next() # get first row
    bytearr = query.value(0) # get the value of first field

            file=QTemporaryFile(QDir.tempPath() + "/XXXXXX." + '.pdf')
    
            file.setAutoRemove(False)
            file.open(QIODevice.WriteOnly)
            file.writeData(bytearr)
    
            QDesktopServices.openUrl(QUrl("file:///" + file.fileName()))# open pdf
            file.close()
    

    @

    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