我想查询 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 http://pandas.pydata.org/pandas-docs/version/0.14.0/generated/pandas.read_sql_query.html,看起来 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 http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-IDENTIFIERS):
引用标识符也使其区分大小写,而未引用的名称始终折叠为小写
多解释一下:您已经编写了一个名为Stat_Table
到数据库(sqlalchemy 会引用这个名称,因此它将在 postgres 数据库中写为“Stat_Table”)。进行查询时'select * from Stat_Table'
未加引号的表名将转换为小写stat_table
,因此您会收到未找到该表的消息。
另请参见PostgreSQL 列名区分大小写吗? https://stackoverflow.com/questions/20878932/are-postgresql-column-names-case-sensitive
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)