PostgreSQL и Pandas DF: возможно ли обновить выборку данных из базы данных PostgreSQL с помощью DF без влияния на другие записи? - PullRequest
0 голосов
/ 27 мая 2019

У меня есть база данных PostgreSQL, с которой я взаимодействую, используя SQLAlchemy в Python.

База данных содержит ежедневные данные о ценах (включая нерабочие дни), начиная с января 2005 года; столбец даты является индексом для этой базы данных. Данные могут быть переизданы в течение 5 дней после объявления цены закрытия ценной бумаги, поэтому каждый день я фиксирую 5-дневное скользящее окно цен закрытия в фрейме данных для каждой ценной бумаги, которое я использую для перезаписи соответствующих данных. в БД.

Для этого я использую следующую функцию:

    def update_from_df(self): 
        con = self._engine.connect()
        self._df.to_sql(self._table_name,con,if_exists="replace")
        con.close()

Вышеприведенная функция удаляет все данные, которые находились в базе данных (то есть данные, которые не имеют соответствующего индекса в качестве данных кадра данных), и заменяет их гораздо меньшим набором данных, который содержался в DF. Это нежелательно - я просто хочу перезаписать данные, которые имеют тот же тикер даты и цены, что и в DF.

В попытке исправить это, я написал код, который просматривает диапазон дат в кадре данных (который содержит обновленные данные), удаляя строки в базе данных, соответствующие диапазону данных, копируя порцию данных из кадра данных и, наконец, добавив эти данные в базу данных. Этот процесс немного неуклюжий, и я беспокоюсь, что при большем выборе данных производительность будет ограничена.

Вместо использования replace в коде альтернативы insert, append не помогают с этой проблемой.

Существует ли функция, которая обновляет базу данных PostgreSQL, используя данные кадра данных, которые имеют только соответствующий индекс, не затрагивая все другие данные базы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...