Обратный кадр данных Pandas из запроса PostgreSQL с sqlalchemy

Я хочу запросить базу данных 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') 

Основываясь на документах , выглядит так: 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.

Каков правильный способ сделать это?

2 Solutions collect form web for “Обратный кадр данных Pandas из запроса PostgreSQL с sqlalchemy”

Вас укушают проблемы с чувствительностью к случаю (в) с 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 укажет это имя, поэтому оно будет записано как «Stat_Table» в базе данных postgres). При выполнении запроса 'select * from Stat_Table' имя без stat_table будет преобразовано в нижний регистр stat_table , и вы получите сообщение о том, что эта таблица не найдена.

См. Например, также Идентификаторы столбцов PostgreSQL с учетом регистра?

В сообщении об ошибке сообщается, что таблица с именем:

 stat_table 

не существует ( отношение – это таблица в postgres). Поэтому, конечно, вы не можете выбирать из него строки. Проверьте свой db после выполнения:

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

и посмотреть, была ли создана таблица с таким именем в вашем db.

Когда я использую ваше заявление для чтения:

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

Я возвращаю данные из postgres db, поэтому нет ничего плохого в этом.

  • Как создать sqlalchemy для json
  • Каков хороший общий способ просмотра транзакций SQLAlchemy, в комплекте с аутентифицированным пользователем и т. Д.?
  • DELIMITER / Создание триггера в SQLAlchemy
  • ограничение столбца sqlalchemy колбы для положительного целого числа
  • Как создать светильники из базы данных с помощью SqlAlchemy
  • SQLAlchemy - Как сделать «выбор django» с помощью SQLAlchemy?
  • Проверить ограничение для взаимоисключающих столбцов в SQLAlchemy
  • Есть ли побочные эффекты от вызова SQLAlchemy flush () в коде?
  • Python - лучший язык программирования в мире.