Найти - Пользователи
Полная версия: Python 3, PyQt5 и MySql системная ошибка при выполнении запроса
Начало » Python для новичков » Python 3, PyQt5 и MySql системная ошибка при выполнении запроса
1
MadGuest
Всем привет!
Не смог определиться с разделом для создания темы, но так как новичок - пишу тут.
Пытаюсь написать приложение для работы с базой данных mysql, но столкнулся с тем, что даже простейший код из примеров, типа такого:
 from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel
from PyQt5.QtWidgets import QTableView, QApplication
import sys
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase("QMYSQL","mydb")
db.setHostName("localhost")
db.setDatabaseName("test")
db.setUserName("***")
db.setPassword("*******")
ok = db.open()
if not ok: print(db.lastError().text())
else: print("connected")
query = QSqlQuery(db);
query.exec_("SELECT * FROM table_one");
не работает. В момент выполнения запроса “query.exec_(”SELECT * FROM table_one“);” windows выдает сообщение о прекращении работы программы.

Насколько я могу судить, проблема даже не в коде, т.к. пробовал делать так:
 try:
    query.exec("show tables")
except:
    print(query.lastError().text())
И прогонять в отладчике pdb. Выходит, что ошибку выдает даже не python, а windows.
ОС windows 7 x64, python-3.5.2, PyQt-v5.6, пробовал как x32, так и x86_64, на двух компьютерах.
Подскажите, пожалуйста, как с этим быть?
vic57
 а драйвер установлен?
 print map(str, QSqlDatabase.drivers())
по дефолту только SQLITE вроде есть
MadGuest
vic57
а драйвер установлен?
Да, установлены.
 print (list(map(str, QSqlDatabase.drivers())))
выдает:
============ RESTART: C:\Program Files\Python35\projects\tryDB.py ============
['QSQLITE', 'QMYSQL', 'QMYSQL3', 'QODBC', 'QODBC3', 'QPSQL', 'QPSQL7']
connected
В PyQt есть пример работы с sqlite - он работает, меняю в нем драйвер и параметры базы на mysql - перестает работать.
vic57
ошибку выдает у вас в модуле Qt5Core.dll. попробуйте из консоли
 python -v my_script
больше информации будет
я делал
 import MySQLdb
и работал с БД из консоли
примерно так
MadGuest
python -v tryDB.py
последние строчки в логе:
# extension module 'PyQt5.QtSql' executed from 'C:\\Program Files (x86)\\Python35-32\\lib\\site-packages\\PyQt5\\QtSql.pyd'
import 'PyQt5.QtSql' # <_frozen_importlib_external.ExtensionFileLoader object at 0x002DDFB0>
connected
Получается, что скрипт соединяется с базой и падает на выполнении запроса, причем python не отлавливает эту ошибку никак.
vic57
я делал
import MySQLdb
и работал с БД из консоли
примерно так
К сожалению, у меня есть GUI приложение, написанное на python-27, надо расширить функционал. В реальности оказалось, что проще переписать по новой. Посмотрел PyQt5 - там QSqlTableModel в примерах, заманчиво написано, но вот вперся в эти грабли (((
vic57
MadGuest
В PyQt есть пример работы с sqlite - он работает, меняю в нем драйвер и параметры базы на mysql - перестает работать.
тут я бы в первую очередь сам MYSQL проверил
УМВР
MadGuest
Решил проблему:
Снес PyQt-5.6 и посредством pip установил PyQt-5.7. Получил ошибку “driver not loaded”, от которой избавился, скопировав файл libmysql.dll из папки “C:\Program Files\MySQL\MySQL Server 5.7\lib” в папку с моей программой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB