Ama*_*ngh 2 python postgresql sqlalchemy flask-sqlalchemy
我有一个原始的 sql 查询,它是:
select distinct(user_id) from details_table where event_id in (29,10) and user_id in (7,11,24,45) and epoch_timestamp >= 1433116800 and epoch_timestamp <= 1506816000;
Run Code Online (Sandbox Code Playgroud)
这在psql收益:
user_id
---------
7
24
(2 rows)
Run Code Online (Sandbox Code Playgroud)
现在,当我通过 sqlalchemy 运行这个原始 sql 查询时,我得到了一个sqlalchemy.engine.result.ResultProxy对象作为响应,而不是上面的结果。我现在使用的代码如下:
from flask import current_app
sql_query = text(select distinct(user_id) from details_table where event_id in (29,10) and user_id in (7,24) and epoch_timestamp >= 1433116800 and epoch_timestamp <= 1506816000;)
filtering_users = db.get_engine(current_app, bind='<my_binding>')\
.execute(sql_query)
print(type(filtering_users))
# <class 'sqlalchemy.engine.result.ResultProxy'>
print(filtering_users)
# <sqlalchemy.engine.result.ResultProxy object at 0x7fde74469550>
Run Code Online (Sandbox Code Playgroud)
我使用了这里的参考,但与那里的解决方案不同,我得到了一个 ResultProxy 对象。
我在这里做错了什么?我的最终目标是获取执行原始 sql-query 返回的用户列表,并将其存储到列表中。
正如SQLAlchemy 文档所解释的那样,该.execute()方法仅返回一个代理,您必须在该代理上进行迭代(或应用任何聚合方法)才能查看查询的实际结果。显然,就您而言,您想要的是.fetchall() method。
如果你尝试这样的事情:
from sqlalchemy import create_engine
engine = create_engine('/path/to/your/db...')
connection = engine.connect()
my_query = 'SELECT * FROM my_table'
results = connection.execute(my_query).fetchall()
Run Code Online (Sandbox Code Playgroud)
该results变量将是list查询获取的所有项目的一个。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
9364 次 |
| 最近记录: |