Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2012 19:23:22

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

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 сидит, вроде как!

- Ничиво ни панимаю!
- Аналогично.
(с) Следствие ведут колобки.



Офлайн

#2 Янв. 29, 2012 21:46:37

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

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

http://developer.qt.nokia.com/doc/qt-4.8/sql-driver.html
Здесь в “Building the Drivers Using Configure” что-то говорится про драйвера, про то что они по умолчанию выключены и про то как их включить.



Отредактировано (Янв. 29, 2012 21:50:38)

Офлайн

#3 Янв. 30, 2012 03:28:20

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Soteric
Почему в коде если соединение открылось, то это интерпретируется как ошибка?
Потому что я балбес! А также потому, что изначально в коде присутствовала булевая переменная которой присваивался результат команды con.open(). Её я убрал за ненадобностью, но некорректно написал итоговый код. Конечно, там должно быть if not con.open().



Отредактировано (Янв. 30, 2012 04:08:42)

Офлайн

#4 Янв. 30, 2012 04:05:45

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Soteric
http://developer.qt.nokia.com/doc/qt-4. … river.html
Что-то я не понял. Там приведены скрипты для подключения драйверов. А куда эти скрипты вписывать, чтобы их запустить???



Офлайн

#5 Янв. 30, 2012 08:35:37

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Что-то тут активность больно низкая. На сайте по Qt быстрее отвечают. Но там все дружно на сях пишут.



Офлайн

#6 Янв. 30, 2012 08:42:05

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Вписывать команды, однако, надо посредством CMD. Но что-то мне эта фигня не нравится. Как так вот модуль SQLITE3 сразу работает со своей базой данных без всяких настроечных скриптов?

Вот захочу я свою программку кому-нибудь дать. Мне придётся ему ещё указывать как там скрипты запускать, чтобы программа доступ к базе имела? А он мне скажет, нафиг ему такая программа?



Отредактировано (Янв. 30, 2012 08:49:08)

Офлайн

#7 Фев. 1, 2012 14:47:13

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Почему же пример для баз данных из поставки PyQt работает? Правда, в нём база создаётся в памяти, а не на диске. А моя не работает, хоть в память, хоть на диск.



Офлайн

#8 Фев. 4, 2012 09:28:15

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

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



Отредактировано (Фев. 4, 2012 09:30:26)

Офлайн

#9 Фев. 4, 2012 10:51:04

Пытон
От:
Зарегистрирован: 2011-11-27
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

cur.exec(“SELECT * FROM One”, con)

Короче, в этой команде было пропущено указание на соединение con. И всё, блин! Никакие драйверы тут ни при чём. Вот ненавижу когда комп выдаёт ошибки совершенно не соответствующие реальности! Безобразие!



Офлайн

#10 Фев. 4, 2012 11:58:38

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4 + SQLite3. Почему не происходит соединение?

Пытон
cur.exec(“SELECT * FROM One”, con)

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



Отредактировано (Фев. 4, 2012 12:04:37)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version