在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