Results 1 to 3 of 3

Thread: Issue with query.exec_ in PyQt5

  1. #1
    Join Date
    Jan 2018
    Posts
    1

    Default Issue with query.exec_ in PyQt5

    I folks!
    I'm new in the Qt and PyQt world, more precisely in the latter! At the moment I'm using PyQt 5.6 with Python 3.5 and i'mtrying to connect my simple app to a local MySQL server. I managed to open the server, but unfortunately the program crash whenever I commit a query (Which i'm sure it's correct since it works fine on SQLyog).
    My code is the following:

    from PyQt5 import QtWidgets, QtSql
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import QApplication

    import sys

    app = QApplication(sys.argv)
    db = QtSql.QSqlDatabase.addDatabase("QMYSQL")
    db.setHostName("localhost")
    db.setUserName("root")
    db.setPort(3306)
    db.setDatabaseName("users")
    db.setPassword("")

    db.open()
    if db.open():
    print("Db open!")
    query = QtSql.QSqlQuery(db)

    query.exec_("SELECT * FROM userscredentials")

    print(query.value(0))

    else:
    print("Db not open")


    input("")

    sys.exit(app.exec_())


    and i got the following output


    C:\Python35\python.exe C:/Users/Egon/PycharmProjects/PyQt/DemoSQL/mainFIle.py
    Db open!

    Process finished with exit code -1073741819 (0xC0000005)


    Can you please help me to understand the problem ?

  2. #2
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    4,063
    Thanks
    233
    Thanked 649 Times in 639 Posts
    Qt products
    Qt5
    Platforms
    Unix/X11 Windows Android

    Default Re: Issue with query.exec_ in PyQt5

    0xC0000005
    In the Microsoft world, this error code means the program crashed with an access violation. That means something in the program tried to use an invalid (probably NULL) pointer to read or write something.

    The QSqlQuery::exec() method returns a bool code that tells you whether the query succeeded or not. You don't bother to check so you don't actually know if the query succeeded.. But even if it did succeed, the record cursor isn't pointing to a valid record until you call one of the record navigation functions (QSqlQuery::first(), QSqlQuery::next(), etc.). You haven't done that either, meaning query.value(0) isn't accessing a valid record and is probably returning a NULL pointer. When you send that NULL pointer to the print method, boom!

    Note that the record navigation functions also return a bool indicating whether or not they succeeded, and you will be wise to check that value before you try to access the record in any way.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  3. #3
    Join Date
    Apr 2008
    Posts
    26
    Thanked 1 Time in 1 Post
    Qt products
    Qt4 Qt5
    Platforms
    Unix/X11 Windows

    Default Re: Issue with query.exec_ in PyQt5

    Quote Originally Posted by Evethir View Post
    query = QtSql.QSqlQuery(db)

    query.exec_("SELECT * FROM userscredentials")

    print(query.value(0))
    As above, your query is not pointing at a valid record. You don't call query.next() (or first as d_stranz said). If your expecting a single record you can do;

    Qt Code:
    1. if query.next():
    2. print(query.value(0))
    To copy to clipboard, switch view to plain text mode 

    or for more results use a while loop:

    Qt Code:
    1. while query.next():
    2. print(query.value(0))
    To copy to clipboard, switch view to plain text mode 

Similar Threads

  1. issue resizing QScrollArea pyqt5
    By Bybuu in forum Qt Programming
    Replies: 0
    Last Post: 13th October 2017, 09:22
  2. PyQt5 Questions
    By Miton in forum Newbie
    Replies: 6
    Last Post: 30th January 2017, 12:10
  3. pyqt New Dialog No Attribute exec_
    By supertom44 in forum Newbie
    Replies: 2
    Last Post: 10th November 2016, 18:58
  4. Replies: 7
    Last Post: 16th April 2015, 17:11
  5. PyQt5 QPixmap
    By ChrisOfBristol in forum Newbie
    Replies: 4
    Last Post: 4th April 2015, 21:48

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.