gpt4 book ai didi

python - 使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据框

转载 作者:IT老高 更新时间:2023-10-28 20:33:18 24 4
gpt4 key购买 nike

我想查询 PostgreSQL 数据库并将输出作为 Pandas 数据框返回。

我使用“SqlAlchemy”创建了与数据库的连接:

from sqlalchemy import create_engine
engine = create_engine('postgresql://user@localhost:5432/mydb')

我将 Pandas 数据框写入数据库表:

i=pd.read_csv(path)
i.to_sql('Stat_Table',engine,if_exists='replace')

基于 docs ,看起来 pd.read_sql_query() 应该接受 SQLAlchemy 引擎:

a=pd.read_sql_query('select * from Stat_Table',con=engine)

但是它会抛出一个错误:

ProgrammingError: (ProgrammingError) relation "stat_table" does not exist

我使用的是 Pandas 0.14.1 版。

这样做的正确方法是什么?

最佳答案

您被 PostgreSQL 的大小写(输入)敏感性问题所困扰。如果您在查询中引用表名,它将起作用:

df = pd.read_sql_query('select * from "Stat_Table"',con=engine)

但就个人而言,我建议始终使用小写的表名(和列名),在将表写入数据库以防止此类问题时也是如此。


来自 PostgreSQL 文档 (http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS):

Quoting an identifier also makes it case-sensitive, whereas unquoted names are always folded to lower case

再解释一下:您已经将名称为 Stat_Table 的表写入数据库(sqlalchemy 将引用此名称,因此在 postgres 数据库中将其写为“Stat_Table”) .执行查询 'select * from Stat_Table' 时,未加引号的表名将转换为小写 stat_table,因此您会收到未找到该表的消息。

另见Are PostgreSQL column names case-sensitive?

关于python - 使用 sqlalchemy 从 PostgreSQL 查询返回 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com