Уведомления

Группа в Telegram: присоединиться

#1 Июль 6, 2019 15:31:23

Artegr
Зарегистрирован: 2018-04-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Инфраструктура для работы с БД

Доброго дня!
Наверно, “инфраструктура” слишком громко сказано)
Интегрировал в проект sqlite бд и создал небольшой модуль реализующий основные действия - CRUD. Теперь встал вопрос об удобстве использование сего в проекте.
Например, есть таблица с пользователями, для которой есть ряд столбцов: name, nick, role и т.п.
Для получения инфы из неё есть метод - get_user(name), который возвращает список словарей (где ключ - название столбца, значение - значение) по найденному имени. Из данного словаря по ключу забираем нужное значение. Тут возникает трудность, т.к. с проектом работаю не я один, а другие участники могут не знать структуру базы, да и самому каждый раз лазить, чтобы вспомнить точное название столбца такое себе. Варианта вижу два:
1. Описать доп. модуль для каждой таблицы, для каждого столбца (решение прямо скажем полное минусов, во-первых, из-за трудоемкости, во-вторых, в случае изменения структуры опять же менять кучу методов)
2. Опять же описать доп.модуль, но описать названия столбцов в виде переменных, в методах уже ими оперировать, решение чуть приятнее и в случае изменения структуры менять только значения переменных.

Есть ли иные более приятные решения, либо подходящие паттерны?
Надеюсь все дожили до конца этого трактата)

Отредактировано Artegr (Июль 6, 2019 15:56:35)

Офлайн

#2 Июль 6, 2019 18:37:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3358
Репутация: +  183  -
Профиль   Отправить e-mail  

Инфраструктура для работы с БД

Artegr
чтобы вспомнить точное название столбца такое себе
1 проблема не очень ясна. Приведите пример что вы имеете ввиду под “списком словарей”.
Я не вижу проблемы посмотреть поля.
 info = get_user("вася")
>>> list(info.keys())
["name","nick","role"]
Да, объект надо получить чтобы посмотреть поля. Это естественно, поскольку как еще инфу из базы взять.
Artegr
Есть ли иные более приятные решения,
А мне ваши решения непонятны. Ну сделали вы модуль. А как это помогает работать?

1. Самое адекватное решение - поддержание актуальной документации по проекту, это вам ничто не заменит. Не менее важно грамотное проектирование базы. Если вам сложно вспомнить имя столбца то точно у вас с базой что-то не так.
2. Можно взять базу поближе к языку (ZODB, Mongodb) В NoSQL с миграциями попроще.
3. Проверенное годами решение это использование sql алхимии.
4. В сложных случаях кодогенерацию никто не отменял. (вам в любом случае нужен инструментарий обеспечивающий миграцию с одной схемы базы на другую).



Отредактировано doza_and (Июль 6, 2019 18:39:04)

Офлайн

#3 Июль 7, 2019 03:40:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 6345
Репутация: +  565  -
Профиль   Отправить e-mail  

Инфраструктура для работы с БД

Artegr
Интегрировал в проект sqlite бд и создал небольшой модуль реализующий основные действия - CRUD.
Теперь то, насколько легко ты её в своём проекте можешь заменить на другую систему управления базами данных, даже на noSQL, не меняя в своей программе ничего особо, - это и есть показатель того, насколько хорошо написан твой код. Если не можешь и топором вырубить теперь из программы SQLite-базу, то явно у тебя слишком много лишних связей в коде.

То, что тебе нужно куда-то там лазить и другим нужно понимать структуру базы данных, чтобы ей пользоваться, говорит о том, что не слишком правильно ты код написал. Ты должен сделать интерфейсы, а уже к какой СУБД они будут привязаны, никого не должно волновать; они должны просто пользоваться твоей программы, даже не зная, какая там база и с какой структурой под капотом.



Отредактировано py.user.next (Июль 7, 2019 03:41:47)

Офлайн

#4 Июль 7, 2019 15:38:51

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3244
Репутация: +  219  -
Профиль   Отправить e-mail  

Инфраструктура для работы с БД

Судя по написанному вы хотите ORM, как примерdoza_and уже озвучил SQLAlchemy



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Июль 7, 2019 20:16:54

Artegr
Зарегистрирован: 2018-04-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Инфраструктура для работы с БД

py.user.next
То, что тебе нужно куда-то там лазить и другим нужно понимать структуру базы данных, чтобы ей пользоваться, говорит о том, что не слишком правильно ты код написал. Ты должен сделать интерфейсы, а уже к какой СУБД они будут привязаны, никого не должно волновать; они должны просто пользоваться твоей программы, даже не зная, какая там база и с какой структурой под капотом.

Вот как раз из-за этого я и понял, что что-то не так)
Тоже подумал насчет ORM, но пока выбрал peewee. Всем спасибо)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version