Как я должен создать простой пакет базы данных для своего приложения Python?

Я создаю библиотеку базы данных для своего приложения с помощью 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

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

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

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

5
задан Carson Myers 18 May 2010 в 02:56
поделиться

2 ответа

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

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

4
ответ дан 14 December 2019 в 08:44
поделиться

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

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

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

3
ответ дан 14 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: