Лучший способ организовать папки, содержащие модели SQLAlchemy [закрыто]

Я использую SQLAlchemy на работе, и она отлично справляется со своей работой. Сейчас я думаю о лучших практиках.

Сейчас я создаю модуль, содержащий все компоненты SQLA:

my_model
        |__  __init__.py 
        |__  _config.py <<<<< contains LOGIN, HOST, and a MetaData instance
        |__  table1.py <<<<< contains the class, the model and the mapper for table1
        |__  table2.py <<<<< contains the class, the model and the mapper for table2
        [...]

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

Здесь все классы разделены, но все импортируют _config, и мне интересно, хорошо ли это.

Более того, я хотел бы иметь возможность создавать подклассы классов моделей, которые можно хранить независимо, не каждый раз путаясь с картографом. Как я могу это сделать ?

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

Я бы тоже хотел не использовать Эликсир, пожалуйста.

12.12.2008 15:02:25
1 ОТВЕТ

Лично мне нравится хранить логику базы данных / ORM вне классов моделей. Это облегчает их тестирование. У меня обычно есть что-то вроде a, types.pyкоторое определяет типы, используемые в моем приложении, но независимо от базы данных.

Тогда обычно есть db.pyили что-то подобное, у которого есть Sessionкласс и остальная часть кода, необходимого для настройки базы данных, включая все мапперы и т. Д.

Ни один из других модулей, кроме тех, которые выполняют операции с базой данных, не нуждается в импорте dbмодуля, и существование базы данных полностью скрыто от большинства классов приложения.

Насколько я знаю, вы не можете легко создавать подклассы без изменения картографа. SQLAlchemy не будет иметь возможности узнать, какой подкласс извлекать из базы данных, когда вы выполняете запрос, и вы должны иметь возможность указать подкласс, когда вы все равно сохраняете данные.

На самом деле я не видел каких-либо проблем, возникающих из-за одновременного вызова всех картографов из основного dbмодуля, поэтому я не думаю, что их инициализация все время действительно является проблемой, если вы на самом деле не идентифицируете ее как узкое место. По моему опыту, другая обработка является гораздо более важным фактором, чем незначительные накладные расходы картографа.

3
31.12.2008 16:21:32