當資料庫裡面的價格變化時,傳送資訊到企業微信中
mysql insert 觸發器
新增insert觸發器,在insert一條新紀錄時,當主單號不為空,並且新增價格和最近一次價格對比不相等時,說明價格有變化。這時觸發器會自動將上一次老價格新增到當前新增行的unit_price_old老價格列。
這個需求是在一個表上,更新自己身上的其他列,這時需要用before,並且set new.列名,並且new必須在等號左邊。
delimiter // create trigger insert_flight_cabin_unit_price before insert on flight_cabin_book_o_update for each row begin /*注意給變數賦值,等號右邊的select必須加括號*/ /*獲取每條主單號的最近一次更新時間*/ set @last_creat_time = (select creat from flight_cabin_book_o_update where waybill=new.waybill and flight_no=new.flight_no and flight_time=new.flight_time order by creat desc limit 1); /*獲取每條主單號的最近一次更新價格*/ set @last_unit_price = (select unit_price from flight_cabin_book_o_update where waybill=new.waybill and flight_no=new.flight_no and flight_time=new.flight_time and creat = @last_creat_time limit 1); /*如果一個主單號不為空,並且最近一次價格和現在insert的價格不相同,就說明價格更新了*/ if new.waybill is not null and new.waybill !='' and new.unit_price != @last_unit_price then set new.unit_price_old = @last_unit_price; set new.unit_price_old_time = @last_creat_time; end if; end // delimiter ;
mysql update觸發器
這個是在一個表上update自己身上的其他列,也需要用before,並且 set new.列名,並且new必須在等號左邊
delimiter // create trigger update_flight_cabin_unit_price before update on czx for each row begin if new.unit_price != old.unit_price then set new.unit_price_old = old.unit_price; set new.is_update_price = 'Y'; set new.update_price_time=now(); end if; end // delimiter ;
python指令碼動態監聽
#!/usr/bin/python # -*- coding:utf8 -*- # author: chenzhixin from contextlib import contextmanager import pymysql as mysqldb import requests import time @contextmanager def get_mysql_conn(**kwargs): """ 建立MySQL資料庫連線 :param kwargs: :return: """ conn = mysqldb.connect(host=kwargs.get('host', 'localhost'), user=kwargs.get('user'), password=kwargs.get('password'), port=kwargs.get('port', 3306), database=kwargs.get('database') ) try: yield conn finally: if conn: conn.close() def execute_mysql_select_sql(conn, sql): """ 執行mysql的select型別語句 :param conn: :param sql: :return: """ with conn as cur: cur.execute(sql) rows = cur.fetchall() return rows def execute_mysql_sql(conn, sql): """ 執行mysql的dml和ddl語句,不包括select語句 :param conn: :param sql: :return: """ with conn as cur: cur.execute(sql) def get_mysql_flight_cabin_book_o_update_data(conn): """ 獲取 kb_kettle_data.flight_cabin_book_o_update的資料 :param conn: :return: """ sql = "select " \ "id, " \ "waybill, " \ "flight_no," \ "flight_time," \ "unit_price, " \ "unit_price_old, " \ "unit_price_old_time," \ "creat " \ "from flight_cabin_book_o_update " \ "where unit_price_old is not null" mysql_table_rows = execute_mysql_select_sql(conn, sql) if mysql_table_rows: print('檢測到價格變化:\n', mysql_table_rows) for index, row in enumerate(mysql_table_rows, 1): id = row[0] waybill = row[1] flight_no = row[2] flight_time = row[3] unit_price = row[4] unit_price_old = row[5] unit_price_old_time = row[6] creat = row[7] yield {'id': id, 'waybill': waybill, 'flight_no': flight_no, 'flight_time': flight_time, 'unit_price': unit_price, 'unit_price_old': unit_price_old, 'unit_price_old_time': unit_price_old_time, 'creat': creat } def send_to_qyweixin(dic): """ 傳送訊息到企業微信 :param dic: :return: """ headers = {"Content-Type": "text/plain"} # s = "--石墨價格變化通知--\n主單號:{waybill}\n航班號:{flight_no}\n航班日期:{flight_time}\n\n時間1:{unit_price_old_time}\n-----------------------\n價格1:{unit_price_old}\n-----------------------\n{creat}\n主單號:{waybill}\n價格變為: {unit_price}".format( # waybill=dic['waybill'], # unit_price_old=dic['unit_price_old'], # unit_price_old_time=dic['unit_price_old_time'], # creat=dic['creat'], # unit_price=dic['unit_price'] # ) s = """ ---石墨價格變化通知--- 主單號:{waybill} 航班號:{flight_no} 航班日期:{flight_time} 時間1:{unit_price_old_time} 價格1:{unit_price_old} 時間2:{creat} 價格2:{unit_price} """.format( waybill=dic['waybill'], flight_no=dic['flight_no'], flight_time=dic['flight_time'], unit_price_old=dic['unit_price_old'], unit_price_old_time=dic['unit_price_old_time'], creat=dic['creat'], unit_price=dic['unit_price'] ) data = { "msgtype": "text", "text": { "content": s, } } r = requests.post( url='https://qyapi.weixin.qq.com/cgi-bin/webhook/sexxxd5-eb13', headers=headers, json=data) print(r.text) def main(): mysql_conn_args = dict(user='user1', host='10.xx.xx.xx', password='123456', database='xxxxx') with get_mysql_conn(**mysql_conn_args) as mysql_conn: while True: print('正在監聽價格是否有變化.....') # 1、首先獲取mysql_flight_cabin_book_o_update表中有價格更新的所有行資料 mysql_data_dic = get_mysql_flight_cabin_book_o_update_data(mysql_conn) # 2、其次遍歷有價格變化的行資料,傳送給企業微信 for dic in mysql_data_dic: # 傳送到企業微信 send_to_qyweixin(dic) # 3、最後把mysql_flight_cabin_book_o_update表中的標記位is_update_price置為空 update_flag_sql = "update flight_cabin_book_o_update set unit_price_old=null,unit_price_old_time=null where waybill='{}'".format(dic['waybill']) execute_mysql_sql(mysql_conn, update_flag_sql) time.sleep(60) if __name__ == '__main__': main()
執行指令碼
[root@gfs02 wangsn]# nohup python /usr/local/shell/monitor_price_qywx/monitor_price_to_qiyeweixin.py > /dev/null 2>&1 &
效果圖
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2678564/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Zabbix 5.0 LTS 配置企業微信(Webhook)自動傳送告警資訊WebHook
- Python接入企業微信 - 推送資訊到內部群裡Python
- 雲資料庫時代:企業資料架構的雲化智慧重構和變革資料庫架構
- 企業資訊化管理:銷售出庫單資料整合案例
- 使用gitlab ci構建IOS包併傳送通知訊息到企業微信GitlabiOS
- connection事件當有資料傳送過來時會被觸發事件
- 個人資訊保護法生效,企業資料安全合規正當時
- 如何在微信中釋出動態資訊
- 利用Oracle資料庫傳送郵件Oracle資料庫
- 智慧客服的演變:從傳統到向量資料庫的新時代資料庫
- config 裡面的database 資料庫 連線取不到 .env 裡面的資料庫配置,所有快取已清,求解Database資料庫快取
- 使用 laravel-wechat-notification 傳送微信模板訊息、企業微信應用訊息Laravel
- 資料夾怎麼拖到微信 微信傳送資料夾的辦法
- 自動發郵件做成視覺化可以連線資料庫取資料可設定定時傳送等視覺化資料庫
- 微盟刪庫事件,企業如何保障資料安全?事件
- [20180606]如何dump資料庫裡面的漢字.txt資料庫
- 資訊化 VS 數字化,哪個更適合當代企業?
- 中小微企業如何快速開發資訊化系統
- 使用 requests 庫傳送多部分表單資料
- 資訊化發展時代,美雲智數走進企業成為企業的大資料管家大資料
- python 傳送buffer型別資料, 傳送octet-stream型別資料, 傳送Uint8Array型別資料Python型別UI
- 企業高效資料對接:金蝶到泛微的供應商資料整合
- 30332資料傳送指令
- 新數科技:讓雲時代企業資料庫轉型變得簡單資料庫
- Kubernetes 將徹底改變企業資料庫管理? - thenewstack資料庫
- 把Github當作資料庫,搭建部落格Github資料庫
- 微信分享、網頁授權、客服傳送資訊外掛網頁
- 你的企業把資料當資產了嗎?
- 2023企業資訊中心價值幾何?
- 浪潮卓數:釋放資料要素價值 助力中小微企業數字化轉型
- 怎麼把資料夾變成壓縮包傳送
- 微信如何在群裡進行資料統計,教你傳送表單網頁輕鬆統計資料網頁
- 企業生產發展從第一次工業革命到資訊化時代
- 如何將EXCEL資料表裡面的資料逆時針旋轉90度Excel
- liunx通過TCP傳送資訊TCP
- DNS域傳送資訊洩露DNS
- 從資訊到數字,構建企業精益化管理
- 當下企業資訊化的痛點以及相關解決方案