Как мне создать простой пакет базы данных для моего приложения на Python? - PullRequest
5 голосов
/ 18 мая 2010

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

db/
    __init__.py
    users.py
    blah.py
    etc.py    

Итак, я бы сделал это на Python:

import db
db.users.create('username', 'password')

Я страдаю параличом анализа (о нет!) О том, как обращаться с подключением к базе данных. Я действительно не хочу использовать классы в этих модулях, кажется неуместным создавать группы «пользователей», которые могут манипулировать одной и той же базой данных одинаково - так что наследование соединения не ходи.

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

#users.py
from db_stuff import connection

Или я должен создать новое соединение для каждого модуля и сохранить его живым?

Или я должен создать новое соединение для каждой транзакции?

Как эти соединения с базой данных должны использоваться? То же самое касается объектов курсора: создать новый курсор для каждой транзакции? Создать только один для каждого подключения к базе данных?

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

Нет, не распространяйте соединение на несколько модулей - это плохой дизайн. Пусть один класс обрабатывает соединение с БД и предоставляет сервисы другим классам / модулям в вашем приложении.

Это не отличается от хороших принципов проектирования, не связанных с БД. Соединение - это глобальный ресурс. Совместное использование этого ресурса между многими модулями похоже на глобальную переменную, доступную из многих мест - что по умолчанию плохо (если у вас нет веских причин, но у вас нет). Инкапсулируйте глобальный ресурс в классе для его обработки.

3 голосов
/ 18 мая 2010

Я знаю, что это на самом деле не отвечает на фактически заданный вами вопрос, но реальный ответ заключается в том, что вам, вероятно, не следует реализовывать свой собственный пакет базы данных. Вам, вероятно, следует использовать существующий (например, SQLALchemy), а затем использовать любой шаблон, стандартный для этой библиотеки.

Если вы действительно хотите сделать свое дело, то лучший подход будет зависеть от множества факторов, например, Уверен ли проекту когда-либо только соединение с одной базой данных?

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

...