Форум сайта python.su
Доброго времени суток. Лирическое отступление.. Я начинающий программист на 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 строк а что=-то более серьёзное.
Офлайн
Если работал с Qt, то QtSql из PyQt никто не отменял…
Но на самом деле лучше всего взять SqlAlchemy и на всё забить. Даже если юзаешь PyQt.
В psycopg2 спокойно можешь плодить курсоры на одном подключении или взять какой-нить пул (с psycopg2, если мне никто не изменяет, идёт замечательный пул).
Ну и никто не запрещает создать один объект, отвечающий за соединения. Только с локом замарачиваться придётся. ИМХО, можно такое красиво оформить через context manager (with) – настоятельно рекомендую посмотреть.
P.S. Скорее всего алхимия разрешит твою проблему.
Офлайн
Спасибо, попробую посмотреть в направлении SqlAlchemy. Про context manager (with) слышу впервые… можно ссылочку куда копать? Беглый поиск по docs.python.org однозначного ответа не дал.
Офлайн
hmmmХм…
Про context manager (with) слышу впервые… можно ссылочку куда копать? Беглый поиск по docs.python.org однозначного ответа не дал.
Офлайн
Проглядел=( спасибо!!
Офлайн