SQLAlchemy中的SELECT *?

时间:2009-03-11 21:56:49

标签: python sqlalchemy

是否可以在SQLAlchemy中执行SELECT *

具体来说,SELECT * WHERE foo=1

8 个答案:

答案 0 :(得分:34)

今天没有人感受到SQLALchemy的ORM爱好吗?所提供的答案正确描述了SQLAlchemy提供的低级接口。为了完整性,这是更可能的(对我来说)现实世界的情况,你有一个会话实例和一个orm映射到users表的User类。

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

这会在所有列上进行显式选择。

答案 1 :(得分:26)

以下选择适用于核心表达语言(返回RowProxy object):

foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)

答案 2 :(得分:8)

是映射到您的表的类,会话是您的会话:

bars = session.query(Bar).filter(Bar.foo == 1)

答案 3 :(得分:7)

如果您没有列出任何列,则可以获得所有列。

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

应该工作。

答案 4 :(得分:4)

对于连接,如果未手动定义列,则仅返回目标表的列。获取连接的所有列(用户表与组表连接:

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)

答案 5 :(得分:3)

您也可以始终使用原始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()

答案 6 :(得分:2)

原来你可以这样做:

sa.select('*', ...)

答案 7 :(得分:1)

如果您正在使用ORM,则可以使用常规ORM构造构建查询,然后直接执行它以获取原始列值:

query = session.query(User).filter_by(name='jack')
for cols in session.connection().execute(query):
    print cols