![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: нет Всего: 4 |
Пролистав пару книг по питону у меня сложилось впечатление,
что с базами данных его удобно использовать только если писать для www, а вот создать для баз данных красивое GUI приложение под windows или linux будет нетривиальной задачей (хотел показывать через wxPython). Надо будет вручную раскладывать информацию, получаемую из базы, в визуальные компоненты... Существуют ли какие-нибудь компоненты позволяющие быстро создавать пользовательский интерфейс для работы с sql базами данных? В первую очередь интересует MySQL. Хочется систему компонентов аналогичную имеющейся в Borland Delphi и C++ Builder. Есть что-нибудь близкое или как вообще решают такую задачу? |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Это можно: SQLObject+wxPython
|
|||
|
||||
J2A |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
Напр. в PyQt3 есть модуль qtsql. Насчет PyQt4 не в курсе.
--------------------
Be easy, stay cool |
|||
|
||||
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: нет Всего: 4 |
Если правильно понял, то полученные данные сами собой на экране не будут обновлятся. Так? |
|||
|
||||
slav0nic |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.5.2006 Репутация: 4 Всего: 5 |
Дмитрий Т, в каком плане? как напишете так и будет работать)
идите дочитывайте книги %) --------------------
python.com.ua |
|||
|
||||
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: нет Всего: 4 |
Если бы вы попробовали Borland Delphi или их C++ Builder для работы с MySQL, Oracle, firebird и т.п., то сразу бы поняли о чём речь ![]() Чтоб заработал не сложный, но и не совсем бестолковый пример в них достаточно написать SQL и больше никакого программирования! Притом без потерь качества, просто за счёт проработанной системы компонентов ориентированных на БД. Но мне хочется более удобной кросплатформенности, а их kylix это что-то... |
|||
|
||||
J2A |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
Дмитрий Т, в wx такого нет. В Qt есть. Если не привязан к wx, делай на Qt; если привязан -- таки да, в ручную.
--------------------
Be easy, stay cool |
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
Гхм... Работа с СУБД никак не связана с интерфейсом, будь то GUI или нечто, рисующее веб-морду.
Если нужен пример работы с какой-либо БД, можно посмотреть на pyPgSQL, имплементирующая DB API2.0 для PostgreSQL (потому как недавно с ней работал ![]() Вот пример работы:
|
|||
|
||||
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: нет Всего: 4 |
Э-э, дружище не скажите... Разница не малая между "GUI или нечто, рисующее веб-морду". Вам нужно увидеть программу-картотеку, допустим книг, с базой на миллион записей... GUI таблица (сетка), к примеру, должна позволять перемещаться по базе, сортировать и редактировать, но при этом не загружать весь миллион в память. И это не единственная особенность. |
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
Работа с СУБД заключается в следующем:
1. Построение запроса. 2. Выполнение запроса. 3(опционально). Получение результатов запроса. Выполнение этих трёх процедур специфично для разных задач, и это естественно.
Поэтому то, о чём Вы говорите, является спецификой работы приложения с БД. Вы можете испечь удобный для специфичной задачи API, и пользоваться им. И это будет правильно. Для GUI будет свой API, для web-морды - свой, для скриптов, обслуживающих распределённую СУБД,- свой, и т.д. Приложение-приложению рознь (с точки зрения удобства работы с БД). Именно поэтому, работа с СУБД зависит не от GUI/не GUI, а от задачи. Добавлено @ 07:56 Я предпочитаю использовать интерфейсы, основанные в свою очередь на интерфейсах, имплементирующих Python Database API Specification v2.0. А уж как "укутать" эти интерфейсы в удобную для задачи API - третье дело ![]() |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
предлагаю использовать - SQLObject+wxPython. при этом не придется писать код подобный
. Аналог
надеюсь раздница чувствуется ![]() |
|||
|
||||
Дмитрий Т |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.3.2005 Где: Самара Репутация: нет Всего: 4 |
Не спорю, как раз и хотел узнать, а есть ли наработки в питоне на мою специфику. Насколько понял - только в qt, но меня отталкивает их политика с лицензиями. |
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Мне бы хотелось увидеть пример подключения к базе Syabse ASA 5.0.5 или ASE 12.0 и выборки данных
через ODBC пожалуста напишите пример плиз |
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
pythonwin, тогда разберём несколько примеров, что бы сразу же всё было ясно ![]() ![]() Примеры сильно утрирую. Дабы было понятнее. В реальной жизни структура несколько сложнее ![]() Пример 1. Есть три таблицы.
Если что-то непонятно в структуре таблиц (в логике), спрашивайте, объясню. Задача. Предоставить информацию в виде таблицы (наименование валюты, курс) на момент времени t1 ('01.04.2006 02:30:00'), отсортированную по наименованию валюты, при этом выбирать только ту валюту, операции с которой на момент времени t1 были разрешены. Прошу предоставить решение, использующее: Своё решение покажу позже. Это сообщение отредактировал(а) diam - 29.6.2006, 22:10 |
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Хотелось бы решение
![]() |
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
||||
|
||||
dvska |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 30.1.2006 Репутация: 6 Всего: 9 |
--------------------
|
||||
|
|||||
pythonwin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Уважаемый ,diam, - специально для Вас!
создаем БД
Запускаем код
Добавлено @ 13:43 PS. Пример для PostgreSQL |
||||
|
|||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Вот ещё (правда не моё, но бесплатное) -
Присоединённый файл ( Кол-во скачиваний: 15 ) ![]() |
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
![]() pythonwin, можно на ты? На форуме дружественная обстановка, и мы вроде как не ненавидим друг друга. Поэтому зачем такие слова: "Уважаемый ,diam, - специально для Вас!". Даже обидно немного. ![]() pythonwin, погоди, ты не до конца доделал ![]()
Напиши решение, я позже прокомментирую. |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
||||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
diam, посмотри http://python.org/pypi/PythonCard/0.8.1 - рисуется довольно легко. советую PythonCard 0.8.2
|
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
пример использования таблицы можно посмотреть здесь
немного поправил, чтобы тебе, diam, было легче:
|
|||
|
||||
pythonwin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
diam, а вот и SELECT
Вот эту часть задания плохо понял, - пожалуйста, diam, привети пример в SQL. |
||||
|
|||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Вот ещё пример:
|
|||
|
||||
J2A |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 17.11.2005 Где: Омск Репутация: 16 Всего: 18 |
pythonwin, ты в wx используешь устаревший синтаксис. Сейчас акутально разделять пространства имен, т.е. не
а
--------------------
Be easy, stay cool |
||||
|
|||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
А у меня новый ошибками ругается
![]() |
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Спасиб за код.
выполнил вылазит ошибка -Подскажите пожалуста, че импорт не может сделать? import mx.ODBC.Windows as odbc ImportError: No module named mx.ODBC.Windows |
|||
|
||||
dvska |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 30.1.2006 Репутация: 6 Всего: 9 |
![]()
Потому что в стандартной поставке питона нет модуля для работы с ODBC. Его надо скачать и поставить. Я использовал коммерческий модуль mxODBC - Python ODBC Interface. Можно также взять бесплатный вариант из поставки pyWin32 http://www.python.net/crew/mhammond/win32/Downloads.html . ![]() Это сообщение отредактировал(а) dvska - 20.7.2006, 20:49 --------------------
|
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
diam, пожалуйста, покажи решение...
|
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
спасиб, скачал exe файл. или просто надо проинсталить? или что-то кудато подключать? |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
||||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Заинсталил и пишет не найдена imort.ODBC......... Может по другому надо подключить библиотеку? В хелпе примеров по подключению библиотеки не нашел.
Это сообщение отредактировал(а) Berliner - 21.7.2006, 20:48 |
|||
|
||||
diam |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
Господа, прошу меня извинить. Я неправильно описал структуру таблиц, во второй и третьей таблице не хватает одного поля, которое увяжет каждую из них с первой таблицей. Поэтому структура такова:
Ещё раз прошу меня простить. Теперь продолжим.
Решение. Сразу же скажу, что я стараюсь отделять запросы SQL от кода, то есть запросы находятся в отдельном модуле и являются пронумерованными. Цель: отделить SQL-код от кода основной программы, тем самым упрощается просмотр кода основной программы, и устранять ошибки становится намного проще. Так, у большого приложения может быть много разных запросов (больше тысячи), но при этом нет никакого бардака. Поэтому у меня создано два файла: pgqueries.py и solution.py, в первом, соответственно, запросы, во втором - код, который забирает результаты из базы и выводит их. pgqueries.py
solution.py
Сразу по ходу замечания: я не рассматриваю вопросы вывода полученного результата, не рассматриваю вопросы написания какого-нибудь API, поскольку какой-либо специфики нет по причине простоты задачи. А усложнить всегда успеем ![]() Код не коментирую по причине простоты и небольшого размера, немного прокоментировал лишь запрос. Вопросы производительности. Ещё не тестировал, напишу позже. |
||||||||
|
|||||||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Заинсталил и пишет не найдена import.ODBC.Windows as odbc Может по другому надо подключить библиотеку? В хелпе примеров по подключению библиотеки не нашел. Прописываю это в интерактивном модуле pythonWindows. Интересно что когда пишу import. (ставлю точку то подсвечивается подсказка ODBC)- значит, библиотека всетаки есть? А почему пишет что ее нет?
|
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Berliner, пожалуйста, приведи пример кода.
|
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
|
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
У меня тоже ошибка. Ты откуда этот кусок кода взял? |
|||
|
||||
dvska |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 30.1.2006 Репутация: 6 Всего: 9 |
Я приводил пример для поставки MX, а не PythonWin; тебе нужно просто
--------------------
|
||||
|
|||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
dvska, у меня всё равно говорит, что нет такого модуля
|
|||
|
||||
diam |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 348 Регистрация: 23.1.2005 Где: Екатеринбург Репутация: 3 Всего: 16 |
Кстати, pythonwin, напиши решение с SQLObject. Я его тоже на производительность потестю, потом результаты выложу.
|
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
||||
|
||||
cherep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 11.1.2006 Где: Москва Репутация: 1 Всего: 4 |
Сам то я не видел
![]() Добавлено @ 21:21 упс.. запостил раньше времени даже натыкался на обсуждения, там убеждают, что круче многократно, чем SQLObject. Сам утверждать не могу, т.к. не пробовал ни то ни другое... но может стоит тоже глянуть ![]() |
|||
|
||||
pythonwin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
cherep, я тоже это слышал и читал про это, но сам sqlalchemy не использовал, и поэтому пока советую "старенький" SQLObject
Добавлено @ 07:07 найду время - обязательно разберусь с sqlalchemy. |
|||
|
||||
Berliner |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Спасиб -импорт делает. Но далее
вываливает ошибку. типа ненайден conn или отсутсвует метод. ругается на вторую строку- думаю что чарез pythonwin расшерение надо по другому прописывать коннект подскажите как сделать выборку из базы. В pythonwin документации ничего толкового не нашел. Подскажите плиз. |
||||
|
|||||
dvska |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 30.1.2006 Репутация: 6 Всего: 9 |
Berliner, в C:\python24\Lib\site-packages\PyWin32.chm всё есть
--------------------
|
|||
|
||||
Berliner |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 803 Регистрация: 18.5.2005 Репутация: нет Всего: 2 |
Хм там проство описаны свойства odbc connect и другие. А примера нет. Мне по примерама лучше разбираться.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |