您的位置:首页 > 数据库

数据库:插入、更新记录(insert into, ..., on duplicate key)

2018-01-24 15:52 447 查看
接收到tick数据,合成成实时1分钟的K线。

不是1分钟K线来一根,而是在1分钟内,最后一根K线的 H、L、C 在不断变化。

用 insert into 同时 on duplicate key,就能解决这个问题。

MySQL

sql = """INSERT INTO {TABLE_NAME} ({time_col_name}, `code`, `open`, `high`, `low`, `close`, `volume`) VALUES
('{RT_TIME}', '{code}', {open}, {high}, {low}, {close}, {volume})
ON DUPLICATE KEY UPDATE `high` = IF (`high` > {high},`high`,{high}),
`low` = IF (`low` < {low},`low`, {low}), `close` = {close}, `volume` = {volume};
""".format(**format_data)

主键要设置为 (time, code),这两个字段作为联合PK。

PostgreSQL

sql = """INSERT INTO {TABLE_NAME} (trade_date, ticker, open, high, low, close) VALUES
('{RT_TIME}', '{ticker}', {open}, {high}, {low}, {close})
ON CONFLICT (trade_date, ticker) DO UPDATE
SET
high = case when {TABLE_NAME}.high < excluded.high then excluded.high
when {TABLE_NAME}.high >= excluded.high then {TABLE_NAME}.high end,
low = case when {TABLE_NAME}.low > excluded.low then excluded.low
when {TABLE_NAME}.low <= excluded.low then {TABLE_NAME}.low end,
close = {close};""".format(**format_data)
如此啰嗦,因为暂时不会PG的IF函数……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐