Форум сайта python.su
Доброго дня!
Наверно, “инфраструктура” слишком громко сказано)
Интегрировал в проект sqlite бд и создал небольшой модуль реализующий основные действия - CRUD. Теперь встал вопрос об удобстве использование сего в проекте.
Например, есть таблица с пользователями, для которой есть ряд столбцов: name, nick, role и т.п.
Для получения инфы из неё есть метод - get_user(name), который возвращает список словарей (где ключ - название столбца, значение - значение) по найденному имени. Из данного словаря по ключу забираем нужное значение. Тут возникает трудность, т.к. с проектом работаю не я один, а другие участники могут не знать структуру базы, да и самому каждый раз лазить, чтобы вспомнить точное название столбца такое себе. Варианта вижу два:
1. Описать доп. модуль для каждой таблицы, для каждого столбца (решение прямо скажем полное минусов, во-первых, из-за трудоемкости, во-вторых, в случае изменения структуры опять же менять кучу методов)
2. Опять же описать доп.модуль, но описать названия столбцов в виде переменных, в методах уже ими оперировать, решение чуть приятнее и в случае изменения структуры менять только значения переменных.
Есть ли иные более приятные решения, либо подходящие паттерны?
Надеюсь все дожили до конца этого трактата)
Отредактировано Artegr (Июль 6, 2019 15:56:35)
Офлайн
Artegr1 проблема не очень ясна. Приведите пример что вы имеете ввиду под “списком словарей”.
чтобы вспомнить точное название столбца такое себе
info = get_user("вася") >>> list(info.keys()) ["name","nick","role"]
ArtegrА мне ваши решения непонятны. Ну сделали вы модуль. А как это помогает работать?
Есть ли иные более приятные решения,
Отредактировано doza_and (Июль 6, 2019 18:39:04)
Офлайн
ArtegrТеперь то, насколько легко ты её в своём проекте можешь заменить на другую систему управления базами данных, даже на noSQL, не меняя в своей программе ничего особо, - это и есть показатель того, насколько хорошо написан твой код. Если не можешь и топором вырубить теперь из программы SQLite-базу, то явно у тебя слишком много лишних связей в коде.
Интегрировал в проект sqlite бд и создал небольшой модуль реализующий основные действия - CRUD.
Отредактировано py.user.next (Июль 7, 2019 03:41:47)
Офлайн
Судя по написанному вы хотите ORM, как примерdoza_and уже озвучил SQLAlchemy
Офлайн
py.user.next
То, что тебе нужно куда-то там лазить и другим нужно понимать структуру базы данных, чтобы ей пользоваться, говорит о том, что не слишком правильно ты код написал. Ты должен сделать интерфейсы, а уже к какой СУБД они будут привязаны, никого не должно волновать; они должны просто пользоваться твоей программы, даже не зная, какая там база и с какой структурой под капотом.
Офлайн