SQLAlchemy (ORM, декларативный): как построить запрос из ключа / значения в dict? - PullRequest
2 голосов
/ 16 июля 2011

Используя SQLAlchemy ORM (декларативную форму), как вы программно создаете запрос из набора условий в словаре?

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

Пример:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

Запрошено два запроса, в результате чего получаются следующие слова:

q1_dict = {'id' : 177}

q2_dict = {'name' : 'Johnny', 'email' : 'johnny@somewhere.com'}

Есть ли какой-нибудь простой / универсальный способ создания запросов из этих двух слов, просто полагаясь на фактключи соответствуют атрибутам класса User, при правильной обработке типов, автоматическом удалении небезопасных значений и т. д.любые хорошие ответы / примеры.

Решение:

Итак, после помощи от вас, ребята, решение кажется простым:

User.query.filter_by(**q1_dict)

User.query.filter_by(**q2_dict)

... чтобы перейти к двум запросам, необходимым в примере.

Я уже посмотрел на предоставленные вами ссылки, dagoof, но я думаю, что мой "питон" просто не был достаточно силен, чтобы получитьв растворпо своему усмотрению.:)

Ответы [ 2 ]

1 голос
/ 16 июля 2011

Попробуйте следующее, ссылки здесь: Запрос , filter_by

session.query(User).filter_by(**q1_dict)
0 голосов
/ 16 июля 2011

Пример кода:

100         COND = and_()
.....
216         if hidxs_sg:$
217             clause = [AM.hidx == hidx for hidx in hidxs_sg]$
218             COND.append(or_(*clause))$
....
300         query = session.query(AM).filter(COND)$

Ключ заключается в создании условия AND с использованием and_ () и добавлении отдельных выражений к условию ....

...