Каков наиболее эффективный способ заполнения атрибутов класса строкой из запроса к базе данных?
Вопрос
Хотите, чтобы запрос к базе данных установил все переменные экземпляра в классе:
Пример:
def populate(self, if):
#Perform mysql query
self._name = row['name']
self._email = row['email']
...
Какой самый быстрый способ сделать это?Или это не рекомендуется (при лучшем подходе)?
Решение
Это делает ваш код наиболее читаемым и предсказуемым, если вы делаете это вручную.Таким образом, вы точно узнаете, какие атрибуты существуют, а какие нет.
Вы можете использовать
setattr
автоматизировать тонны из них.Одним из довольно хороших способов было бы определить список
attributes = ['name', 'email'...]
как атрибут класса, затем сделатьfor name in self.attributes: setattr(self, "_" + name, row[name])
Вы также можете получить атрибуты из самого запроса, но это будет меняться в зависимости от вашего запроса (особенно, если вы используете
SELECT *
или что-то в этом роде) и вы меняете свою базу данных.Я заметил, что все эти атрибуты имеют начальное подчеркивание.Если это чисто внутренняя вещь, подумайте, не лучше ли вам подойдет атрибут, а не сам результат запроса или сохранение словаря.Как правило, атрибуты должны быть довольно статичными.
Я слышал, что наш SQL лучше MySQLdb
Другие советы
Посмотри на sqlalchemy это самая популярная абстракция базы данных для Python.
Если вам действительно нравится шаблон активной записи, есть слой, который вы можете поместить поверх него, под названием эликсир.
Я использую sqlalchemy, потому что это хорошая абстракция базы данных, позволяющая мне переключаться между базами данных.Я использую sqlite в памяти для своих тестов и могу вставить его в свой код с помощью sqlalchemy.