SQLAlchemy中的SELECT*?

mik*_*ike 28 python sqlalchemy

SELECT *在SQLAlchemy中可以做到吗?

具体来说,SELECT * WHERE foo=1

Ali*_*har 38

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

for user in session.query(User).filter_by(name='jack'):
     print user
     # ...
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为迈克具体询问“SELECT *”的原因是为了获取一系列列值。使用 ORM 的完整解决方案是获取上面的 User 对象,然后找到一种迭代列的方法,如 http://stackoverflow.com/questions/2537471/method-of-iteating-over-sqlalchemy-models 中讨论的那样-定义的列。 (2认同)

Ryn*_*ett 29

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

foo_col = sqlalchemy.sql.column('foo')
s = sqlalchemy.sql.select(['*']).where(foo_col == 1)
Run Code Online (Sandbox Code Playgroud)

  • 如何 jsonify 查询“s”结果? (3认同)
  • 嗯..这对我不起作用,但用'[sqlalchemy.text('*')]替换`['*']``. (2认同)

ada*_*dam 9

其中Bar是映射到您的表的类,session是您的会话:

bars = session.query(Bar).filter(Bar.foo == 1)
Run Code Online (Sandbox Code Playgroud)


Pio*_*pla 9

我遇到了同样的问题,我试图从表中获取所有列作为列表,而不是获取 ORM 对象。这样我就可以将该列表转换为 pandas 数据框并显示。

有效的方法是在子查询或 cte 上使用,.c如下所示:

U = select(User).cte('U')
stmt = select(*U.c)
rows = session.execute(stmt)
Run Code Online (Sandbox Code Playgroud)

然后您将获得每列的元组列表。

__table__.columns另一种选择是以相同的方式使用:

stmt = select(*User.__table__.columns)
rows = session.execute(stmt)
Run Code Online (Sandbox Code Playgroud)

如果您想将结果转换为数据帧,这里有一个行:

pd.DataFrame.from_records(rows, columns=rows.keys())
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 7

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

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

应该管用.

  • 看起来对我来说,我收到了“OperationalError”。省略“where”部分,我可以看到 `str(query)` 给出了 `'SELECT \nFROM attempts'`。它缺少星号 (3认同)
  • @S.Lott 该链接已过期 (2认同)

mik*_*ike 6

原来你可以这样做:

sa.select('*', ...)
Run Code Online (Sandbox Code Playgroud)


Fer*_*ves 5

您也可以始终使用原始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()
Run Code Online (Sandbox Code Playgroud)