在python中使用sqlalchemy.select()从Postgresq数据库获取数据

在python中使用sqlalchemy.select()从Postgresq数据库获取数据,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我正在使用python和SQLalchemy从表中获取数据 import sqlalchemy as db import pandas as pd DATABASE_URI = 'postgres+psycopg2://postgres:postgresql@localhost:5432/postgres' engine = db.create_engine(DATABASE_URI) connection = engine.connect() project_table = db.Table

我正在使用python和SQLalchemy从表中获取数据

import sqlalchemy as db
import pandas as pd

DATABASE_URI = 'postgres+psycopg2://postgres:postgresql@localhost:5432/postgres'
engine = db.create_engine(DATABASE_URI)
connection = engine.connect()
project_table = db.Table('project', metadata, autoload=True, autoload_with=engine)
在这里,我想根据我拥有的ID列表获取记录

 l=[557997, 558088, 623106, 558020, 623108, 557836, 557733, 622792, 623511, 623185] 
 query1 = db.select([project_table ]).where(project_table .columns.project_id.in_(l))
 #sql query= "select * from project where project_id in l"
 Result = connection.execute(query1)
 Rset = Result.fetchall()
 df = pd.DataFrame(Rset)
 print(df.head())
在这里,当我打印df.head()时,得到的是一个空数据帧。我无法将列表传递给上述查询。是否有方法将列表发送到上述查询

结果应包含表中与给定项目id相等的行。 i、 e

这些行将被插入到数据集中。 问题是

"select * from project where project_id in (557997, 558088, 623106, 558020, 623108, 557836, 557733, 622792, 623511, 623185)"
在这里,由于我不能给出静态值,我将把这些值插入一个列表,并将此列表作为参数传递给查询。
这就是我遇到的问题。我无法将列表作为参数传递给db.select()。如何将列表传递给db.select()

经过多次跟踪后,我发现由于查询获取的数据量大,而且工作站中的ram也较少,因此查询返回空值(无结果)。所以我所做的是

 Result = connection.execute(query1)
            while True:
                rows = Result.fetchmany(10000)
                if not rows:
                    break
                for row in rows:
                    table_data.append(row)
                    pass
            df1 = pd.DataFrame(table_data)
            df1.columns = columns

在此之后,程序运行良好。

请生成一个,包括一小部分数据(在数据库中)。查询有点奇怪,因为
的正确语法是
in(…)
,而不是[…]
中的
,但我想这是一个输入错误。根据问题中的示例,您应该返回行。您是否检查了Rset的外观?您确定连接到正确的数据库吗?是的,我已连接到正确的数据库。当我使用list作为参数时,我没有得到任何反馈。如何将list传递给db.select()。我正在获取的数据超过50GB。如果不是db.select(),您能否告诉我可以使用哪些库快速获取数据。您的
query1
应按原样工作,该列表由SQLAlchemy Core作为参数绑定。即使我直接尝试通过说print(Rset[0:100])来打印Rset中的某些值,它也会给出一个空列表。
 Result = connection.execute(query1)
            while True:
                rows = Result.fetchmany(10000)
                if not rows:
                    break
                for row in rows:
                    table_data.append(row)
                    pass
            df1 = pd.DataFrame(table_data)
            df1.columns = columns