我想查询PostgreSQL数据库,并将输出作为数据帧返回.

我用"SqlAlchemy"创建了与数据库的连接:

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

我将一个数据帧写入数据库表:

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):

引用标识符也使其区分大小写,而未引用的名称总是折叠成小写

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

参见第Are PostgreSQL column names case-sensitive?

Postgresql相关问答推荐

在Go中,如何在没有数据库包的情况下运行PostgreSQL查询?

PostgreSQL:函数结果表内冲突(...)上的";中的字段名称

一列引用两个不同的表

PostgreSQL plpgsql函数问题

为MCV扩展统计设置统计目标

至少 pgRouting 的某些部分可以与并行查询并行运行吗?

gorm 不生成字符串列

在 Postgres 中查询 JSON 对象数组

消除 PostgreSQL SELECT 语句中的重复行

Rails 3:在 Postgres 支持的 ActiveRecord 中使用 json 作为列类型时出现迁移错误

PostgreSQL 可以对数组元素有唯一性约束吗?

timezone date_trunc 函数

断言错误:Django-rest-Framework

用于更改 postgresql 用户密码的 bash 脚本

从长时间的postgres转换日期

如何使用 Django Migrations 重新创建已删除的表?

在 PGAdmin 中搜索所有功能的文本

查询 JSON 列中的数组元素

pgadmin 错误:no password supplied

在 Select (PostgreSQL/pgAdmin) 中将布尔值返回为 TRUE 或 FALSE