python教程—使用sqlalchemy从PostgreSQL查询返回panda数据aframe-Python实用宝典

python教程—使用sqlalchemy从PostgreSQL查询返回panda数据aframe

我想查询一个PostgreSQL数据库,并以panda数据aframe的形式返回输出。我创建了一个连接到数据库与'SqlAlchemy':

我想查询一个PostgreSQL数据,并以panda数据aframe的形式返回输出。

我创建了一个连接到数据与'SqlAlchemy':

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

我写了一个熊猫数据aframe到一个数据表:

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

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

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

但它会抛出一个错误:

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

我使用的是panda版本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.html# /a>):

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

为了进一步解释:您已经向数据编写了一个名为Stat_Table的表(sqlalchemy将引用这个名称,因此它将被写入postgres数据中的“Stat_Table”)。当执行查询“select * from Stat_Table”时,未引用的表名将转换为小写的Stat_Table,因此您将得到没有找到该表的消息。

另见​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论