Найти - Пользователи
Полная версия: PyQt4 + SQLite3. Почему не происходит соединение?
Начало » Базы данных » PyQt4 + SQLite3. Почему не происходит соединение?
1 2
Пытон
from PyQt4 import QtGui, QtCore, QtSql

class mainform(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.resize(600, 400)

self.connect()

def connect(self):
con = QtSql.QSqlDatabase.addDatabase("QSQLITE ", "Base")
con.setDatabaseName("SQLiteBase/1.s3db")

if con.open():
print ("База данных не открылась!")
print ("-"+con.lastError().text()+"-")
print (str(con.lastError().type()))

cur = QtSql.QSqlQuery()
cur.exec("SELECT * FROM One")
print (cur.lastError().text())


con.close()



if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
form1 = mainform()
form1.setWindowTitle("Работа с базами данных в PyQt4")
form1.show()
sys.exit(app.exec_())
В строке подключения (addDatabase) параметр драйвера “SQLITE ” специально написан с завершающим пробелом иначе срабатывает условие (if) и выдаётся моё сообщение “База данных не открылась”, при этом в тексте lastError().text() - пусто! Т.е. ошибок, получается, нет, но база не открылась! Если же в параметре драйвера “SQLITE ” присутствует пробел (да и любой другой символ) ошибка НЕ появляется.

Что это за ерунда?

Вдобавок, QtSql.QSqlQuery().lastError()text() выдаёт “driver not loaded driver not loaded” вне зависимости от наличия пробелов в “QSQLITE”. Почему он не лоадед-то? А куда он делся? Он же по умолчанию в PyQt4 сидит, вроде как!

- Ничиво ни панимаю!
- Аналогично.
(с) Следствие ведут колобки.
Soteric
if con.open():
print ("База данных не открылась!")
Почему в коде если соединение открылось, то это интерпретируется как ошибка?

http://developer.qt.nokia.com/doc/qt-4.8/sql-driver.html
Здесь в “Building the Drivers Using Configure” что-то говорится про драйвера, про то что они по умолчанию выключены и про то как их включить.
Пытон
Soteric
Почему в коде если соединение открылось, то это интерпретируется как ошибка?
Потому что я балбес! А также потому, что изначально в коде присутствовала булевая переменная которой присваивался результат команды con.open(). Её я убрал за ненадобностью, но некорректно написал итоговый код. Конечно, там должно быть if not con.open().
Пытон
Soteric
http://developer.qt.nokia.com/doc/qt-4. … river.html
Что-то я не понял. Там приведены скрипты для подключения драйверов. А куда эти скрипты вписывать, чтобы их запустить???
Пытон
Что-то тут активность больно низкая. На сайте по Qt быстрее отвечают. Но там все дружно на сях пишут.
Пытон
Вписывать команды, однако, надо посредством CMD. Но что-то мне эта фигня не нравится. Как так вот модуль SQLITE3 сразу работает со своей базой данных без всяких настроечных скриптов?

Вот захочу я свою программку кому-нибудь дать. Мне придётся ему ещё указывать как там скрипты запускать, чтобы программа доступ к базе имела? А он мне скажет, нафиг ему такая программа?
Пытон
Почему же пример для баз данных из поставки PyQt работает? Правда, в нём база создаётся в памяти, а не на диске. А моя не работает, хоть в память, хоть на диск.
apologize828
Пытон
Почему же пример для баз данных из поставки PyQt работает? Правда, в нём база создаётся в памяти, а не на диске. А моя не работает, хоть в память, хоть на диск.
Когда то сталкивался с проблемой загрузки драйверов(driver not loaded) когда собирал .exe файл под windows. Я просто скопировал папку с драйверами(Python31\Lib\site-packages\PyQt4\plugins\sqldrivers) в каталог с exe-файлом и все заработало.
Так что как вариант могу посоветовать:
1)попробуй положить эту папку целиком в каталог с твоим скриптом.
2)положить эту папку целиком в каталог с твоим скриптом, оставив в ней только нужный тебе драйвер.
2)тупо скопировать из этой папки нужный тебе драйвер в каталог со скриптом.
3)возможно прописать в путях путь до этой папки.
4)ну или же собрать .exe
P.S. надеюсь поможет, в любом случае, я думаю, нужно посмотреть в сторону папки с драйверами. удачи!
Пытон
cur.exec(“SELECT * FROM One”, con)

Короче, в этой команде было пропущено указание на соединение con. И всё, блин! Никакие драйверы тут ни при чём. Вот ненавижу когда комп выдаёт ошибки совершенно не соответствующие реальности! Безобразие!
apologize828
Пытон
cur.exec(“SELECT * FROM One”, con)

Короче, в этой команде было пропущено указание на соединение con. И всё, блин! Никакие драйверы тут ни при чём. Вот ненавижу когда комп выдаёт ошибки совершенно не соответствующие реальности! Безобразие!
Я как то сразу не обратил внимание, а зачем вы вообще передаете второй аргумент вот тут(вам это точно необходимо задавать имя соединения?):
con = QtSql.QSqlDatabase.addDatabase("QSQLITE ", "Base")
Уберите второй аргумент “Base” и тогда должно вот это работать:
cur.exec("SELECT * FROM One")
проверь могу ошибаться!
P.S. вот нашел свою старую тему посмотри пост #5
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