如何使用 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()
我在 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()