Каков наиболее эффективный способ заполнения атрибутов класса строкой из запроса к базе данных?

StackOverflow https://stackoverflow.com/questions/2542887

  •  23-09-2019
  •  | 
  •  

Вопрос

Хотите, чтобы запрос к базе данных установил все переменные экземпляра в классе:

Пример:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top