在python中使用sqlalchemy.select()从Postgresq数据库获取数据
我正在使用python和SQLalchemy从表中获取数据在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
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