Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2009 13:54:32

hmmm
От:
Зарегистрирован: 2009-10-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс БД или вопросы по работе с базой данных в питон

Доброго времени суток. Лирическое отступление.. Я начинающий программист на python в своё время программировавший на С++ + Qt. Обычно работу с базой данных я организовывал так: создавался класс обёртки над БД который отвечал за коннект с базой, обработку ошибок и т д… и базовый класс sql команды. Класс обёртки брал на себя основную часть работы. Класс команды наследовался от базового и просто переопределял метод execute которому передавалась ссылка на объект который мог выполнять запросы. А далее выполнялись сами запросы к бд.

Перейдя на питон я не обнаружил таких привычных вещей как например статус соединения с бд и множество всего остального к чему так привык. Практически все примеры которые я вижу содержат лишь что-то вроде следующего:

import psycopg2 as dbapi2
db = dbapi2.connect(“dbname=%s user=%s password=%s host=%s port=%d” % (dbname, username, password, host, port))
curs = db.cursor()
curs.execute(“SELECT file_name FROM picture”)

row = curs.fetchone()
if row != None:
while row != None:
….
row = curs.fetchone

Но мне бы хотелось чтобы какой-то класс овтечал полностью за работу с базой и я не плодил всюду по коду открытие соединения, и проч. Как это реализовать на питон я не совсем понимаю. Было бы здорово если бы вы привели какие-нибудь примеры или ссылки на код как правильно организовывать такую работу. Не на примере обычных туториалов в 10 строк а что=-то более серьёзное.



Офлайн

#2 Окт. 20, 2009 14:51:19

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Класс БД или вопросы по работе с базой данных в питон

Если работал с Qt, то QtSql из PyQt никто не отменял…
Но на самом деле лучше всего взять SqlAlchemy и на всё забить. Даже если юзаешь PyQt.
В psycopg2 спокойно можешь плодить курсоры на одном подключении или взять какой-нить пул (с psycopg2, если мне никто не изменяет, идёт замечательный пул).
Ну и никто не запрещает создать один объект, отвечающий за соединения. Только с локом замарачиваться придётся. ИМХО, можно такое красиво оформить через context manager (with) – настоятельно рекомендую посмотреть.

P.S. Скорее всего алхимия разрешит твою проблему.



Офлайн

#3 Окт. 20, 2009 15:19:54

hmmm
От:
Зарегистрирован: 2009-10-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс БД или вопросы по работе с базой данных в питон

Спасибо, попробую посмотреть в направлении SqlAlchemy. Про context manager (with) слышу впервые… можно ссылочку куда копать? Беглый поиск по docs.python.org однозначного ответа не дал.



Офлайн

#4 Окт. 21, 2009 12:33:10

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Класс БД или вопросы по работе с базой данных в питон

hmmm
Про context manager (with) слышу впервые… можно ссылочку куда копать? Беглый поиск по docs.python.org однозначного ответа не дал.
Хм…
3.4.9. With Statement Context Managers



Офлайн

#5 Окт. 22, 2009 14:43:30

hmmm
От:
Зарегистрирован: 2009-10-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс БД или вопросы по работе с базой данных в питон

Проглядел=( спасибо!!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version