QSql подключиться и прочитать из базы данных пример?- Драйвер не загружен - PullRequest
4 голосов
/ 13 сентября 2011

Я недавно начал обнаруживать необходимость перехода с модуля _ _mysql на QSql PyQt, но не знаю, с чего начать.Все, что я хочу сделать (пока), это прочитать из базы данных и распечатать результаты.Это самая последняя версия, которую я получил, но я получаю сообщение об ошибке «Драйвер не загружен Драйвер не загружен», возвращаемое функцией query.exec_ ().

Пожалуйста, помогите!

db = QSqlDatabase.addDatabase("QMYSQL")

db.setHostName ( db_host )
db.setUserName ( db_user )
db.setPassword ( db_passwd )
db.setDatabaseName ( db_db )
db.setPort ( db_port )

db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1")
db.open()

defaultDB = QSqlDatabase.database()
query = QSqlQuery("SELECT * FROM Users")

qe = query.exec_()
print "query exec" , query.exec_()
if not qe:              # if error
    print QSqlQuery.lastError( query ).text()
else:                   # else display returned values
    while query.next():
        print "query value" , query.value(0).toString()


db.close()

1 Ответ

7 голосов
/ 14 сентября 2011

АААААХ !!! Это всегда происходит! Посидите с проблемой в течение дня, наконец решите написать и спросить об этом, и примерно через 30 минут после того, как вы опубликуете свою проблему, вы найдете решение!

Для тех, кто заинтересован, у меня была такая же проблема, как у этого парня .

По сути, вы ДОЛЖНЫ создать экземпляр QApplication ПЕРЕД тем, как ваш SQL-код будет выполнен ... т.е.

# this little monkey has to be here
app = QApplication(sys.argv)


# rest of the code
db = QSqlDatabase.addDatabase("QMYSQL")

db.setHostName ( db_host )
db.setUserName ( db_user )
db.setPassword ( db_passwd )
db.setDatabaseName ( db_db )
db.setPort ( db_port )

db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1")
db.open()

defaultDB = QSqlDatabase.database()
query = QSqlQuery("SELECT * FROM Users")

qe = query.exec_()
print "query exec" , query.exec_()
if not qe:              # if error
    print QSqlQuery.lastError( query ).text()
else:                   # else display returned values
    while query.next():
        print "query value" , query.value(0).toString()


db.close()
...