Каков наиболее эффективный способ заполнения атрибутов класса строкой из запроса к базе данных? - PullRequest
2 голосов
/ 30 марта 2010

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

Пример:

def populate(self, if):
    #Perform mysql query

    self._name = row['name']
    self._email = row['email']
    ...

Какой самый быстрый способ сделать это? Или это не рекомендуется (с лучшим подходом)?

Ответы [ 2 ]

4 голосов
/ 30 марта 2010
  • Это делает ваш код наиболее читабельным и предсказуемым, чтобы сделать это вручную, как это. Таким образом, вы точно знаете, какие атрибуты существуют, а какие атрибуты не так просто.

  • Вы можете использовать setattr для их автоматизации.

    Один довольно хороший способ - определить список attributes = ['name', 'email'...] как атрибут класса, а затем сделать

    for name in self.attributes:
        setattr(self, "_" + name, row[name])
    

    Вы также можете получить атрибуты из самого запроса, но это изменится в зависимости от вашего запроса (особенно, если вы используете SELECT * или что-то подобное) и вашего изменения базы данных.

  • Я заметил, что все эти атрибуты имеют подчеркивание. Если это чисто внутренняя вещь, подумайте, будет ли атрибут, а не сам результат запроса или сохранение dict, лучше соответствовать вашим потребностям. Как правило, атрибуты должны быть довольно статичными.

  • Я слышал, что наша SQL лучше MySQLdb

3 голосов
/ 30 марта 2010

Посмотрите на sqlalchemy это самая популярная абстракция базы данных для python.
Если вам действительно нравится активный шаблон записи, есть слой, который вы можете поместить поверх него, который называется elixir .

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

...