Return Pandas dataframe from PostgreSQL query with sqlalchemy

后端 未结 3 1867
走了就别回头了
走了就别回头了 2021-01-30 10:08

I want to query a PostgreSQL database and return the output as a Pandas dataframe.

I created a connection to the database with \'SqlAlchemy\':

from sqlal         


        
相关标签:
3条回答
  • 2021-01-30 10:36

    You are bitten by the case (in)sensitivity issues with PostgreSQL. If you quote the table name in the query, it will work:

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

    But personally, I would advise to just always use lower case table names (and column names), also when writing the table to the database to prevent such issues.


    From the PostgreSQL docs (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

    To explain a bit more: you have written a table with the name Stat_Table to the database (and sqlalchemy will quote this name, so it will be written as "Stat_Table" in the postgres database). When doing the query 'select * from Stat_Table' the unquoted table name will be converted to lower case stat_table, and so you get the message that this table is not found.

    See eg also Are PostgreSQL column names case-sensitive?

    0 讨论(0)
  • 2021-01-30 10:40

    The error message is telling you that a table named:

    stat_table
    

    does not exist( a relation is a table in postgres speak). So, of course you can't select rows from it. Check your db after executing:

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

    and see if a table by that name got created in your db.

    When I use your read statement:

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

    I get the data back from a postgres db, so there's nothing wrong with it.

    0 讨论(0)
  • 2021-01-30 10:55

    Read postgres sql data in pandas in given below and image link

    import psycopg2 as pg
    import pandas.io.sql as psql
    connection = pg.connect("host=localhost dbname=kinder user=your_username password=your_password")
    dataframe = psql.read_sql('SELECT * FROM product_product', connection)
    product_category = psql.read_sql_query('select * from product_category', connection)
    

    https://i.stack.imgur.com/1bege.png

    0 讨论(0)
提交回复
热议问题