如何使用 Python 中的列表更新 PostgreSQL table?

How to update a PostgreSQL table with a list in Python?

我在 PostgreSQL 中有以下 table:

CREATE TABLE stock_prices (
    ticker VARCHAR(32),
    time TIMESTAMP,
    open FLOAT8,
    high FLOAT8,
    low FLOAT8,
    close FLOAT8,
    volume FLOAT8,
    PRIMARY KEY (ticker, time)
) PARTITION BY LIST (ticker);

并想在 Python 服务器中通过 SQLAlchemy 更新它。 我从数组中的 API 获取数据,其中包含以毫秒为单位的列时间戳、开盘价、最高价、最低价、收盘价和交易量。 Apple 示例(股票代码 = AAPL):

timestamp, opening price, highest price, lowest price, closing price, volume
[[1264982400000,6.870357036590576,7,6.8321428298950195,6.9546427726745605,749876400],
[1265068800000,6.996786117553711,7.0114288330078125,6.906428813934326,6.994999885559082,698342400],
[1265155200000,6.9703569412231445,7.150000095367432,6.943571090698242,7.115356922149658,615328000],
...]

用数组的主项更新 table stock_prices WHERE ticker = 'AAPL' 的列的最佳方法是什么?

如果有人遇到这个问题,我是这样解决的:

            df = pd.DataFrame(tOHLCV, columns=['time', 'open', 'high', 'low', 'close', 'volume'])

            df['time'] = pd.to_datetime(df['time'] * 1_000_000)

            df.set_index('time')

            df.to_sql(f'{ticker}_tmp', db.engine, if_exists='replace')

            sql += f'''
                CREATE TABLE IF NOT EXISTS {ticker}_partition
                PARTITION OF stock_prices
                FOR VALUES IN ('{ticker}');

                INSERT INTO stock_prices (
                    ticker,
                    time,
                    open,
                    high,
                    low,
                    close,
                    volume
                )
                SELECT
                    '{ticker}',
                    time,
                    open,
                    high,
                    low,
                    close,
                    volume
                FROM public."{ticker}_tmp"
                ON CONFLICT DO NOTHING
                ;                
            '''

            sql += f'''
                DROP TABLE public."{ticker}_tmp";
            '''

            db.session.execute(sql, values)
            db.session.commit()