当在 Mysql 数据库服务器中触发触发器时,我可以在我的树莓派上运行 python 脚本吗?
Posted
技术标签:
【中文标题】当在 Mysql 数据库服务器中触发触发器时,我可以在我的树莓派上运行 python 脚本吗?【英文标题】:Can i run a python script on my raspberry pi when a trigger is triggered in Mysql database server? 【发布时间】:2019-04-02 19:58:35 【问题描述】:我正在研究一个项目,该项目检查数据库中的 LEDSTATUS 是否具有值“0”然后 LED 熄灭,如果值为“1”则 LED 点亮。 我搜索并发现有一个叫做 UDF 的东西可以运行脚本,但不确定如果数据库不是本地的(在服务器上)是否有可能。 是否可以?如果是怎么办?
我创建了两个 python 脚本,一个打开 led,另一个关闭它。
我将创建一个包含一个 LEDSTATUS 表的数据库,并将创建一个触发器,该触发器将在 LEDSTATUS 的值发生更改时运行,如果值为 0,则运行关闭 led 的 python 脚本,如果值为 1,则运行另一个脚本。
【问题讨论】:
【参考方案1】:如果您无权访问远程数据库服务器,则可能没有。
您可以运行定期检查数据库并运行适当脚本的 cronjob(或任何计划任务),但在数据库更改和脚本运行之间会有延迟,具体取决于它的运行频率。
编辑(2019 年 4 月 2 日)
我认为trigger 不是正确的解决方案。触发器旨在在执行某些操作时在内部运行查询,而不是触发外部脚本。可能有办法做到这一点,但我不熟悉任何方法,所以我无法提供任何建议。
我会推荐以下两种选择之一:
编写一个 python 脚本,定期检查您的数据库(称为polling)的 LED 状态,并与树莓派交互以更新 LED。
将您的数据库放在可以更新数据库和 LED 的 API 后面,并直接更改更新 LED 状态数据库的任何内容,以与 API 交互。 Flask 是一个很棒的 Python web 框架,你可以使用它,requests 包可以用来与之交互。
我会推荐选项 1,但选项 2 会更容易实现。这两种解决方案都可以从您的树莓派中运行。
【讨论】:
那么计划任务可以通过触发远程数据库服务器的触发器在树莓派上执行 python 脚本吗? @TheRealBanana 如果您能提供有关更新数据库的更多详细信息会有所帮助,但请参阅我的编辑。【参考方案2】:数据库触发器用于 DELETE、INSERT、UPDATE sql 查询。你不能用它触发 python 脚本。
在某些时候,您使用 UPDATE SQL 查询将数据库字段设置为 0 或 1。
基于事件的方法是在执行 sql 更新查询之前或之后运行相应的 python 脚本。 Python 可以在 pi 上作为网络服务器运行,您可以通过 GET 或 POST 发送值。
轮询方法是每 x (mili) 秒使用 python 脚本或类似脚本查询数据库,并相应地执行打开/关闭功能。
【讨论】:
以上是关于当在 Mysql 数据库服务器中触发触发器时,我可以在我的树莓派上运行 python 脚本吗?的主要内容,如果未能解决你的问题,请参考以下文章