Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/230: Рейтинг темы: голосов - 230, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
1

PyQT5. Работа с базой данных

20.08.2016, 05:41. Показов 44060. Ответов 32
Метки pyqt, sql (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Изучаю базы данных, а заодно и PyQt.
При помощи QSqlQueryModel или QSqlTableModel и QTableView отобразил нужные данные в приложении. Как осуществить добавление и удаление данных? Как сделать столбец, поля которого можно редактировать только выбирая доступные варианты.
Как отредактировать, добавить, удалить данные из сетки полученной подобным запросом:
SQL
1
2
 SELECT Office.Name_, Departments_type.Name_ FROM Office, Departments_type, Departments
 WHERE id_office = Office.key_ AND id_type_depart = Departments_type.key_;
Под сеткой я понимаю QTableVie.

Сложновато изучать PyQt5 - Документация на англ. и на с++ )
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2016, 05:41
Ответы с готовыми решениями:

Работа с базой данных
Здравствуйте. Скажите, пожалуйста, есть ли какие-то библиотеки (Python) для работы с базой данных...

Работа с базой данных
привет. читаю джангокнигу потихонечку разбираюсь с представлениями, вроде потихонечку вникаю....

Работа с базой данных в python
Вывожу в докере информацию о картинках. В поле icon, они хранятся вместе с тегами. <a...

VK bot работа с базой данных
И так , хочу у боту подключить базу данных , чтоб он записывал id каждого кто ему пишет , но он...

Python работа с базой данных
надо на python доработать код, чтобы он отправлял данные в базу данных sql = """INSERT...

32
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
20.08.2016, 11:50 2
Что-то у тебя тысяча и один вопрос сразу задан. Тебе непонятно какой sql запрос составить или как gui сделать?
0
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
20.08.2016, 13:08  [ТС] 3
alex925,
Как сделать GUI. В приложении есть результат запроса, как сделать его редактирование, добавление и удаление.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import sys, time
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtCore import *
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        db = QSqlDatabase.addDatabase('QPSQL')
        db.setDatabaseName('postgres')
        db.setHostName('localhost')
        db.setUserName('postgres')
        db.setPassword('masterkey')
        db.open()
 
        view = QTableView(self)
        model = QSqlQueryModel(self)
        model.setQuery('SELECT Staffers.surname AS "Surname", '
                        'Staffers.name_ as "Name", '
                        'Staffers.old AS "Old", '
                        'Position_.name_ AS "Position", '
                        'Office.name_ AS "Office", '
                        'Departments_type.name_ AS "Department" '
                        'FROM Staffers, Position_, Office, Departments, Departments_type '
                        'WHERE Staffers.id_position = Position_.key_ '
                        'and Staffers.id_Department = Departments.key_ '
                        'and Departments.id_office = Office.Key_ '
                        'and Departments.id_type_depart = Departments_type.key_;')
        view.setModel(model)
        view.move(10, 10)
        view.resize(617, 315)
 
        #Buttons:
        button1 = QPushButton('Exit', self)
        button1.resize(button1.sizeHint())
        button1.move(50, 400)
        def But1Click():
            if db.close():
                print('close')
            else:
                print('db dont close')
                sys.exit()
        button1.clicked.connect(But1Click)
 
        #Window:
        self.setGeometry(300, 100, 650, 450)
        self.setWindowTitle('Icon')
        self.show()
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
Миниатюры
PyQT5. Работа с базой данных  
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
20.08.2016, 14:03 4
I.G.O.R, у меня есть похожее приложение, которое умеет делать все, что ты описал (ну только редактирования текущих данных там не предусмотренно). Можешь его посмотреть, разобраться.
Вложения
Тип файла: 7z database-editor.7z (9.1 Кб, 848 просмотров)
3
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
20.08.2016, 22:48  [ТС] 5
Если кто то покажет как в PyQt сделать удаление, редактирование и добавление к примеру выше, буду очень вам благодарен.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.08.2016, 02:42 6
I.G.O.R, с моим примером не разобрался чтоль?

Вообще твой вопрос подразумевает не подсказать, а сделать все от начала и до конца.
0
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
21.08.2016, 02:52  [ТС] 7
Нет не разобрался. В общем принял решение досконально изучать QT5, читаю кусками
Кликните здесь для просмотра всего текста
Шлее М. - Qt 5.3. Профессиональное программирование на C++ - 2015 и др. литературу
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.08.2016, 03:14 8
Цитата Сообщение от I.G.O.R Посмотреть сообщение
Нет не разобрался.
А там все, что тебе надо есть.

Цитата Сообщение от I.G.O.R Посмотреть сообщение
Шлее М. - Qt 5.3. Профессиональное программирование на C++ - 2015 и др. литературу
Мде, суровый ты.... По сишным книгам учить то....
0
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
21.08.2016, 03:21  [ТС] 9
Других увы нет, хотя есть одна, но покупать надо.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.08.2016, 03:22 10
Цитата Сообщение от I.G.O.R Посмотреть сообщение
Других увы нет
Есть и как раз по pyqt, автор Прохоненок и качается она на раз два.
0
3 / 3 / 1
Регистрация: 24.03.2011
Сообщений: 65
21.08.2016, 03:32  [ТС] 11
Маловато информации, БД не рассмотрены, и немного другая PyQt используется.
Кликните здесь для просмотра всего текста

Python 3 и PyQt. Разработка приложений

Часть II. Создание оконных приложений
Глава 19. Знакомство с PyQt
Глава 20. Управление окном приложения
Глава 21. Обработка сигналов и событий
Глава 22. Размещение нескольких компонентов в окне
Глава 23. Основные компоненты
Глава 24. Списки и таблицы
Глава 25. Работа с графикой
Глава 26. Графическая сцена
Глава 27. Диалоговые окна
Глава 28. Создание SDI- и MDI-приложений
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
21.08.2016, 12:46 12
Разница 4 и 5 версии практически только в импортах, потому что в 5 версии сделали большую реструктуризацию, а остальном все то же самое. По этому проще и лучше читать книгу Прохоренка, а импорты без проблем подсмотришь где нибудь.

Что касается базы, так тут pyqt не предоставляет ничего сильно особенного, просто дает из коробки драйверы для некоторых баз и все. Если ты изучаешь sql, тебе его учить надо, а не pyqt. Pyqt это фреемворк для создания гуёвых приложений и все.

Если ты думаешь, что выучишь api драйвера базы от pyqt и дальше ничего учить не надо будет, то ты сильно ошибаешься, потому что во 1 pyqt есть не везде (в каком нибудь web проекте его не будет 100%), во 2 наверняка попадется база к которой не будет коннектора у pyqt и т д. В общем пытаться привязаться к какому-то инструменту для работы с бд это очень глупое занятие.
0
0 / 0 / 0
Регистрация: 24.10.2016
Сообщений: 2
24.10.2016, 10:59 13
Решил не создавать отдельную тему. Также как и автор ветки изучаю PyQt5 и SQLite. Вопрос следующего порядка. Как применительно к PyQt5, а если быть точнее к объекту QSqlDatabase реализовать такое:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sqlite3
import uuid
 
sqlite3.register_converter('GUID', lambda b: uuid.UUID(bytes_le=b))
sqlite3.register_adapter(uuid.UUID, lambda u: buffer(u.bytes_le))
 
conn = sqlite3.connect('test.db', detect_types=sqlite3.PARSE_DECLTYPES)
 
c = conn.cursor()
c.execute('CREATE TABLE test (guid GUID PRIMARY KEY, name TEXT)')
 
data = (uuid.uuid4(), 'foo')
print 'Input Data:', data
c.execute('INSERT INTO test VALUES (?,?)', data)
 
c.execute('SELECT * FROM test')
print 'Result Data:', c.fetchone()
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
24.10.2016, 18:23 14
Я бы лучше не привязывался к драйверам qt. Работа с БД может быть не частью гуя, а так ты себе очень неслабую зависимость сделаешь.
0
0 / 0 / 0
Регистрация: 24.10.2016
Сообщений: 2
25.10.2016, 04:17 15
Можешь привести пример как не привязываясь к драйверам qt вывести данные из базы в QTableView. Ну или ссылку где подобный материал почитать. Заранее спасибо.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
25.10.2016, 11:13 16
icecruiser, Просто используешь драйвер не от qt и все. У меня есть пример, но там orm используется. Если надо выложу.
0
20 / 15 / 7
Регистрация: 03.10.2014
Сообщений: 94
17.12.2016, 23:24 17
Редактирование данных в ячейках:
Python
1
2
3
4
self.model = QSqlTableModel()
self.model.setTable("main")
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
self.model.select()
Функция добавления пустой строки:
Python
1
2
    def addrow(self):
        self.model.insertRow(self.model.rowCount())
Функция удаления выделенной строки:
Python
1
2
3
    def delrow(self):
        self.model.removeRow(self.table.currentIndex().row())
        self.model.select()
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 6
16.05.2017, 18:48 18
Цитата Сообщение от alex925 Посмотреть сообщение
у меня есть похожее приложение, которое умеет делать все, что ты описал (ну только редактирования текущих данных там не предусмотренно). Можешь его посмотреть, разобраться.
alex925, добрый день, что то у меня не получается подключить питон к базе вашей, при выполнении main.py и нажатии на любую кнопку (любую таблицу) из вашего примера выдаёт кучу ошибок, но я так понял всё связано с этим:
Кликните здесь для просмотра всего текста
sqlalchemy.exc.InterfaceError: (mysql.connector.errors.InterfaceError) 2003: Can't connect to MySQL server on '127.0.0.1:3306' (10061 Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение)

может настройки нужны какие то?
посмотрел файл settings.py с настройками для бд, погуглил, поменял localhost на 127.0.0.1 но не помогло
не подскажете, что может быть не так?

Добавлено через 16 минут
установил mysql, теперь на порт не ругается, но требует пароль:
Кликните здесь для просмотра всего текста
sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

а какой пароль нужен то?
с файла settings.py он его не подтягивает походу, или что?

Добавлено через 11 минут
тааак, с паролем разобрались
в файле settings.py получилось вот такое
Кликните здесь для просмотра всего текста
DATABASE_URL = 'mysql+mysqlconnector://root:1234@127.0.0.1/database_editor?charset=utf8'

при запуске пишет
Кликните здесь для просмотра всего текста
sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1049 (42000): Unknown database 'database_editor'

если меняю на название базы - всё равно не находит её
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.05.2017, 19:24 19
Цитата Сообщение от VVaDiIvIkA Посмотреть сообщение
(10061 Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение)
Чаще всего в этом виноват браудмаузер или ты просто указан неправильный ip и порт к базе.
Цитата Сообщение от VVaDiIvIkA Посмотреть сообщение
а какой пароль нужен то?
Который ты задал при установке бд и логин нужно вводить, который ты задал при устаноке.
Цитата Сообщение от VVaDiIvIkA Посмотреть сообщение
Unknown database 'database_editor'
Ну я создал бд и назвал ее database_editor. Тебе надо создать свою базу и заменить database_editor на свое название. Создание происходит в консоли бд. С python это не связано. Читай в сети как создать базу (это делается с помощью sql запроса).
1
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 6
16.05.2017, 19:48 20
Цитата Сообщение от alex925 Посмотреть сообщение
Ну я создал бд и назвал ее database_editor. Тебе надо создать свою базу и заменить database_editor на свое название. Создание происходит в консоли бд. С python это не связано. Читай в сети как создать базу (это делается с помощью sql запроса).
благодарю, а если я вашу хочу использовать? всё равно нужно создавать?
сейчас изучу как создать.

Добавлено через 11 минут
просто в примере вашем есть база "database.sqlite", думал может её можно просто куда то скопировать или подключить и использовать, меня бы устроило
0
16.05.2017, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2017, 19:48
Помогаю со студенческими работами здесь

Используя функции категории Работа с базой данных в excel 2010, реализовать запрос к базе данных
Используя функции категории Работа с базой данных, реализовать запрос к базе данных: средняя...

PHP и работа с базой данных (замена данных)
Добрый вечер. Начал ознакомление с бд. Создал ее + таблицу, написал добавление через форму, теперь...

Работа с базой данных
Здравствуйте, есть база данных на oracal, нужно получать из неё данные и выводить на сайт. Как это...

Работа с базой данных
здравствуйте,если можете-помогите,буду оч благодарна.Для каждого пилота получить его...

Работа с базой данных в QT
Доброй ночи. Пишу проект на qt, опыта разработки приложений на этом фреймворке мало, как и опыта...

Работа с базой данных
Разработать проект, реализующий задания согласно варианту. Во всех заданиях должна быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru