1. 程式人生 > >資料庫:插入、更新記錄(insert into, ..., on duplicate key)

資料庫:插入、更新記錄(insert into, ..., on duplicate key)

接收到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函式……

相關推薦

資料庫插入更新記錄insert into, ..., on duplicate key

接收到tick資料,合成成實時1分鐘的K線。 不是1分鐘K線來一根,而是在1分鐘內,最後一根K線的 H、L、C 在不斷變化。 用 insert into 同時 on duplicate key,就能解

MYSQLINSERT INTO .. ON DUPLICATE KEY更新多行記錄,防止主鍵重複

如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。 如果你想了解更多關於INSERT INTO .. ON DUPLICATE KEY的功能說明,詳見MySQL參考文件:13.2.4. INSERT語法 現在問題來了,如果INSERT多行記錄, ON DUPLICA

MYSQL 批量插入資料 insert into ON DUPLICATE KEY UPDATE

#批量插入並根據重複資料進行處理 class DF_MYSQL(DBBase):     #定義操作更新時間相關的方法     #獲取上次更新的時間     def __del__(self):       &

ibatis 批量執行INSERT INTO...ON DUPLICATE KEY UPDATE...

<update id="updaeBooks" parameterClass="java.util.List"> <![CDATA[ INSERT INTO book(authorId, bookName,price,shelve) VALUES]]> <i

ERROR 1064 (HY000): ReplaceStatement can't be supported,use insert into ...on duplicate key update..

使用mycat中用 replace的sql時會報錯 ERROR 1064 (HY000): ReplaceStatement can't be supported,use insert into ...on duplicate key update... instead 用sql代替:i

【MySQL】淺析“replace into 操作” 與 “insert into+ON DUPLICATE KEY UPDATE操作”

對有主鍵和唯一鍵的表進行insert into+ON DUPLICATE KEY UPDATE操作(product)[email protected] [test]> CREATE TABLE `student` (    -> `id` int(10) unsigned NOT NUL

Mysql replace intoinsert into on duplicate key update 死鎖和效能測試

1   編寫目的 1.  測試 replace into 引發死鎖 2.  測試 replace 和INSET INTO  ***  ON DUPLICATE KEY UPDATE *** 效能差 2   資料庫環境說明 1、 資料庫系統: 名稱:Mysql 5.5.31

mybatis中使用replace intoinsert INTOON DUPLICATE KEY UPDATE批量操作

一、replace into <insert id=“a" useGeneratedKeys="true"> REPLACE INTO table_name (product_id,departs_date,price_value) VALUES

MySQL的Replace intoInsert into on duplicate key update真正的不同之處

相同點: (1)沒有key的時候,replace與insert .. on deplicate udpate相同。 (2)有key的時候,都保留主鍵值,並且auto_increment自動+1。 不同點  有key的時候,replace是delete

MySQL資料庫插入更新與刪除資料

一、插入資料 MySQL 中使用 insert 語句來向資料庫表中插入新的資料記錄。 ☆ 為表的所有欄位插入資料 insert into tb_name (col_list) values (value_list) 建立一個數據表 person

MySql避免"重複插入記錄"的方法(INSERT ignore into,Replace into,ON DUPLICATE KEY UPDATE)

案一:使用ignore關鍵字 如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重複插入記錄可以使用: 程式碼如下 複製程式碼 1 INSERT IGNORE INTO table_name (email, phone, us

MySql避免重複插入記錄方法(ignore,Replace,ON DUPLICATE KEY UPDATE)

本文章來給大家提供三種在mysql中避免重複插入記錄方法,主要是講到了ignore,Replace,ON DUPLICATE KEY UPDATE三種方法,各位同學可嘗試參考。案一:使用ignore關鍵字如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避

INSERTON DUPLICATE KEY UPDATE的使用

計數服務實現 codis redis分散式解決方案 儲存key value 反正只能一個執行緒進去 資料庫實現方式。沒有就插入有就更新 一句程式碼 原子性 1.key_name設定unique索引: 對某個計數器進行更新時,一般有如下兩個步驟 a.需要先select判斷是否存在 b.不存

python3.5+pymysql學習資料庫5插入更新刪除語句

根據https://www.w3cschool.cn/sql/rc8wsfp5.html的資料學習insert語句 插入資料 #課程表插入整行資訊 sql1 = "INSERT INTO edu.course VALUES('04','physics','04')" 插入完成後查看錶

避坑必看很詳盡的MyBatis返回自增主鍵實驗包括插入更新SQL語句insert on duplicate key update的自增主鍵返回情況

目錄 (7)介面 5. 總結 本篇文章對MyBatis操作MySQL時自增主鍵返回情況進行詳細的實驗,給出不同情況下Mybatis返回自增主鍵的不同行為,僅基於實驗結果,不做原始碼分

MySQL數據庫基礎——SQL插入更新刪除操作

SQLMySQL數據庫基礎(六)——SQL插入、更新、刪除操作 一、插入數據 1、為表的所有字段插入數據 使用基本的INSERT語句插入數據要求指定表名稱和插入到新記錄中的值。 INSERT INTO table_name (column_list) VALUES (value_list); insert i

HTTP學習記錄頭資訊請求和響應

學習資源主要為:@小坦克HTTP相關部落格 一、請求頭資訊(Request Header) 請求頭資訊包含比較多,如下: 1、Cache頭域   if-modified-Since   作用:把瀏覽器端快取頁面的最後修改時間傳送到伺服器去,伺服器會把這個時間與伺服器上的實際檔案的最後修改時間進行對比

程式碼生成資料庫更新資料庫Entity Framework first codehttp://www.cnblogs.com/haogj/archive/2012/02/17/2356537.ht

準備工作 在開始之前,我們需要一個專案,以及一個 Code First 的模型,對於這次演示,我們使用典型的部落格 Blog 和回覆 Post 模型。 1. 建立新的  MigrationsCodeDemo 控制檯應用程式 2. 為專案新增最新版本的 Entity

Oracle資料庫學習3之修改插入更新語句

修改語句:alter語句 1.增加一列:alter table 表名 add (欄位名 欄位型別)2.刪除一列:alter table 表名 drop(列名)3.修改某一列的名字:alter table 表名 rename column 舊名 to 新名4.修改某一列的屬性

mysql-插入更新刪除數據

sta row code ica update tab -- affect nbsp 1、插入: ① mysql中有三種插入:insert into、replace into、insert ignore insert into:表示插