在Python中,有沒有辦法讓MySQL數據庫中的特定表發生變化?python:如何獲取mysql數據庫更改的通知?
回答
不可能使用標準的SQL功能。
這是理論上的可能,但我不會推薦它:
基本上你有一個觸發器在表中的呼叫UDF它以某種方式與您的Python應用程序進行通信。
陷阱包括如果出現錯誤會發生什麼?
如果它阻止?理想情況下,觸發器內發生的任何事情都應該是近乎即時的。
如果它在回滾的事務中呢?
我確定還有很多其他問題,我沒有想到。
如果可能,更好的方法是讓您的數據訪問層通知應用程序的其餘部分。如果你正在尋找一個你的控制之外的程序修改了數據庫,那麼你可能會運氣不好。
另一種不太理想的方式,比從觸發器中調用另一個程序更好的方法是設置某種「LastModified」表,該觸發器通過觸發器進行更新。然後在您的應用程序中檢查日期時間是否大於上次檢查時的日期時間。
如果更改了您的意思,如果某行已更新,刪除或插入,則有解決方法。
你可以在MySQL
DELIMITER $$
CREATE TRIGGER ai_tablename_each AFTER INSERT ON tablename FOR EACH ROW
BEGIN
DECLARE exec_result integer;
SET exec_result = sys_exec(CONCAT('my_cmd '
,'insert on table tablename '
,',id=',new.id));
IF exec_result = 0 THEN BEGIN
INSERT INTO table_external_result (id, tablename, result)
VALUES (null, 'tablename', 0)
END; END IF;
END$$
DELIMITER ;
創建觸發器,這將調用可執行腳本my_cmd
在服務器上。 (請參閱sys_exec返回更多信息)與一些參數。
my_cmd可以是一個Python程序或任何可以使用MySQL使用的用戶帳戶從命令行執行的任何東西。
您必須爲每個變更(INSERT
/UPDATE
/DELETE
)創建一個觸發器,以便您希望程序得到通知,併爲每個表格創建觸發器。
此外,您還需要找到某種方法將運行的Python程序鏈接到您通過sys_exec()
調用的命令行util。
不推薦
這種行爲是不推薦,因爲它很可能是:
- 慢下來的MySQL;
- 如果my_cmd沒有返回,就會掛起/超時;
- 如果您正在使用交易,您會在之前通知交易結束;
- 我不確定如果交易回滾,您是否會收到
delete
的通知; - 這是一個醜陋的設計
鏈接
sys_exec:http://www.mysqludf.org/lib_mysqludf_sys/index.php
它可能不是一個壞主意,嘗試使用網絡監視器,而不是一個MySQL觸發器。擴展網絡監視器這樣的:
http://sourceforge.net/projects/pynetmontool/
然後編寫的活動等待在端口3306(或任何與你的MySQL服務器偵聽),然後腳本檢查數據庫在網絡活動符合一定過濾條件。
這是,你必須要進一步研究的非常高的水平的想法,但你沒有碰到DB觸發的問題,你會不會寫在每週二cron作業。
是的,可能不是SQL標準。但是PostgreSQL支持這與LISTEN和自各地9.x版
- 1. 如何獲取有關數據庫列更改的通知
- 2. 如何獲取更新數據庫的推送通知
- 3. 關於數據庫更改的實時更新通知MYSQL PHP
- 4. 如何通知Java程序數據庫的數據已更改
- 5. 如何獲取數據更改通知OPC UA Java客戶端
- 6. 如何從SQL Express 2012獲取數據更改通知?
- 7. 通知數據庫更改的用戶
- 8. 數據庫更改DB2的通知?
- 9. 如何使用MSSQL在ASP.Net中獲取實時數據庫更改通知
- 10. 數據庫更改時通知
- 11. Eclipse鏈接數據庫更改通知
- 12. 如何獲取數據庫中已更改的數據?
- 13. Mysql數據庫更改狀態時使用Push.js推送通知
- 14. 如何獲取網絡更改通知(連接,斷開,更改)
- 15. 從數據庫獲取通知
- 16. 如何通過python修改mysql數據庫中存在的列?
- 17. 獲取後端數據更新通知
- 18. 如何爲用戶通知取消規範化mysql數據庫?
- 19. 如何從Android的數據庫內容中獲取通知?
- 20. 如何通過dbgrid更改mysql數據庫的值?
- 21. 如何從數據庫中獲取數據後更改圖像
- 22. 使用Python的odo庫從mysql數據庫獲取數據
- 23. 獲取館藏更改的通知
- 24. 使用Oracle數據庫更改通知檢測更改
- 25. 當數據庫中的數據更改時收到通知
- 26. 如何從Xamp獲取MYSQL數據庫
- 27. 在推送通知中獲取數據庫通知ID
- 28. 如何通過查詢獲取MySQL中的數據庫結構
- 29. 獲取商傢俬人數據,以便狀態更改通知
- 30. 如何通過mysql獲取數據
真正NOTIFY,雖然OP有這個特別標記「MySQL的」而不是「SQL」 – Seaux 2013-07-23 15:25:02