SELECT * в SQLAlchemy? - PullRequest
       19

SELECT * в SQLAlchemy?

24 голосов
/ 12 марта 2009

Можно ли сделать SELECT * в SQLAlchemy?

В частности, SELECT * WHERE foo=1?

Ответы [ 8 ]

34 голосов
/ 12 марта 2009

Сегодня никто не чувствует любовь ORM к SQLALchemy? Представленные ответы правильно описывают интерфейс нижнего уровня, который предоставляет SQLAlchemy. Просто для полноты, это наиболее вероятная (для меня) реальная ситуация, когда у вас есть экземпляр сеанса и класс пользователя, который отображается в таблице пользователей.

for user in session.query(User).filter_by(name='jack'):
     print user
     # ...

И это делает явный выбор для всех столбцов.

26 голосов
/ 22 апреля 2014

Следующий выбор работает для меня на основном языке выражений (возвращая RowProxy объект ):

foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)
8 голосов
/ 12 марта 2009

Где Бар - это класс, сопоставленный с вашей таблицей, а сеанс - ваш сеанс sa:

bars = session.query(Bar).filter(Bar.foo == 1)
7 голосов
/ 12 марта 2009

Если вы не перечислите какие-либо столбцы, вы получите все из них.

query = users.select()
query = query.where(users.c.name=='jack')
result = conn.execute(query)
for row in result:
    print row

Должно работать.

4 голосов
/ 22 октября 2013

Для объединений, если столбцы не определены вручную, возвращаются только столбцы целевой таблицы. Чтобы получить все столбцы для объединений (таблица пользователей объединена с таблицей групп:

sql = User.select(from_obj(Group, User.c.group_id == Group.c.id))
# Add all coumns of Group table to select
sql = sql.column(Group)
session.connection().execute(sql)
3 голосов
/ 17 апреля 2013

Вы всегда можете также использовать сырой SQL:

str_sql = sql.text("YOUR STRING SQL")
#if you have some args:
args = {
    'myarg1': yourarg1
    'myarg2': yourarg2}
#then call the execute method from your connection
results = conn.execute(str_sql,args).fetchall()
2 голосов
/ 12 марта 2009

Оказывается, вы можете сделать:

sa.select('*', ...)
1 голос
/ 28 сентября 2012

Если вы используете ORM, вы можете построить запрос, используя обычные конструкции ORM, а затем выполнить его напрямую, чтобы получить необработанные значения столбца:

query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
    print cols
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...