鱼C论坛

 找回密码
 立即注册
查看: 1742|回复: 5

[已解决]本地电脑有个access库,数据增加时发送新增数据到指定api

[复制链接]
发表于 2023-7-10 20:12:37 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在有这样一个案例,局域网电脑上有个数据库,要实现的功能是:
当access数据库某个表内数据新增时,就将新增的数据发送到指定api。这种触发条件怎么实现呢?
最佳答案
2023-7-10 23:12:56
rsj0315 发表于 2023-7-10 22:12
这个脚本的话,可以让他在后台默认运行吗?是不是任务栏一直挂着ide呢?担心谁不小心给误操作关闭呢。

确实,如果您直接在IDE中运行此脚本,IDE窗口需要一直开着。如果想要让这个脚本在后台运行,可以将其转变为守护进程或者服务。

在Windows中,您可以使用任务计划程序来运行这个Python脚本,设置为用户登录时自动运行。您也可以使用工具像 NSSM(Non-Sucking Service Manager)将您的Python脚本设置为服务,这样它就会在后台运行,即使关闭了所有的命令行窗口,它也不会被终止。

如果在Linux系统上,您可以使用nohup命令或者使用systemd来管理您的Python脚本作为一个后台服务。

另外,您可能需要考虑将此脚本转化为可执行文件(.exe文件),这样用户就不需要Python环境也能直接运行。Python有一些第三方库,如pyinstaller、cx_Freeze等,可以帮助您将Python脚本转换为可执行文件。

但是需要注意的是,让程序在后台运行可能会带来一些额外的问题,比如错误日志的处理、进程监控等,这些都是需要考虑的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-10 20:12:48 | 显示全部楼层
要实现当Access数据库中某个表内数据新增时触发发送到指定API的功能,您可以考虑以下几种方式:

1. 轮询检测:编写一个后台程序或脚本,定期轮询检查数据库中的新增数据。您可以使用编程语言(如C#、Python等)结合数据库连接库(如pyodbc或ODBC)来查询数据库表,找出新增的数据,并将其发送到指定API。但这种方法可能对系统性能产生一定负担,并且响应时间会有一定的延迟。

2. 数据库触发器:在Access数据库中创建一个触发器,在数据插入操作时触发相应的动作。您可以在触发器中编写代码来发送新增数据到指定API。但需要注意的是,Access数据库自身的触发器功能相对有限,不如其他主流数据库(如SQL Server、MySQL等)强大。

3. 使用外部工具:您可以使用一些第三方工具来监控数据库变化,并在数据新增时触发相应的操作。例如,您可以使用触发器工具(如Triggers for Access、Access Data Change Monitor等)来监视数据库变化,并在新增数据时调用外部脚本或程序发送数据到API。

请根据您的具体需求和技术能力选择适合您的方法。每种方法都有其优势和限制,请确保根据实际情况进行评估和选择。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 21:21:09 | 显示全部楼层
要实现这个功能,您需要进行以下步骤:

1. 监控数据库变化:MS Access本身并不提供直接的触发器(Trigger)或事件来通知您数据的改变,所以需要使用其他方式来监控数据库变化。一个常见的方法是使用定时任务(例如Windows计划任务)定期查询Access数据库并与前一次的查询结果进行比较。

2. 发送API请求:一旦发现有新的数据添加,您需要构建一个API请求将数据发送到指定的API。您可以使用诸如Python,C#等语言中的HTTP客户端库(例如requests库)来完成这个任务。

以下是使用Python实现的基本示例:
import requests
import pyodbc
import schedule
import time

prev_data = None

def job():
    global prev_data
    conn_str = (
        r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
        r'DBQ=path_to_your_database;'
    )
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()

    # 用你实际的表名和字段名替换 "table_name" 和 "field_names"
    cursor.execute("SELECT field_names FROM table_name")
    
    rows = cursor.fetchall()

    if prev_data is None:
        prev_data = rows
    else:
        new_data = [row for row in rows if row not in prev_data]

        if new_data:
            for row in new_data:
                # 用你实际的API URL和数据格式替换 "api_url" 和 "data"
                response = requests.post('api_url', data = row)
            
        prev_data = rows

    conn.close()

schedule.every(10).seconds.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

这段代码实现的功能是每10秒检查一次数据库,如果发现有新的数据,就通过POST请求发送到指定的API。请记住替换代码中的  "path_to_your_database" , "table_name" , "field_names" ,和  "api_url" 。如果需要的话,您可能还需要调整API请求的格式和参数。

这只是一个基础示例,实际的实现可能需要考虑更多因素,比如错误处理、并发、效率等问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 22:05:42 | 显示全部楼层
isdkz 发表于 2023-7-10 21:21
要实现这个功能,您需要进行以下步骤:

1. 监控数据库变化:MS Access本身并不提供直接的触发器(Trigge ...

太强了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-10 22:12:02 | 显示全部楼层
isdkz 发表于 2023-7-10 21:21
要实现这个功能,您需要进行以下步骤:

1. 监控数据库变化:MS Access本身并不提供直接的触发器(Trigge ...

这个脚本的话,可以让他在后台默认运行吗?是不是任务栏一直挂着ide呢?担心谁不小心给误操作关闭呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-10 23:12:56 | 显示全部楼层    本楼为最佳答案   
rsj0315 发表于 2023-7-10 22:12
这个脚本的话,可以让他在后台默认运行吗?是不是任务栏一直挂着ide呢?担心谁不小心给误操作关闭呢。

确实,如果您直接在IDE中运行此脚本,IDE窗口需要一直开着。如果想要让这个脚本在后台运行,可以将其转变为守护进程或者服务。

在Windows中,您可以使用任务计划程序来运行这个Python脚本,设置为用户登录时自动运行。您也可以使用工具像 NSSM(Non-Sucking Service Manager)将您的Python脚本设置为服务,这样它就会在后台运行,即使关闭了所有的命令行窗口,它也不会被终止。

如果在Linux系统上,您可以使用nohup命令或者使用systemd来管理您的Python脚本作为一个后台服务。

另外,您可能需要考虑将此脚本转化为可执行文件(.exe文件),这样用户就不需要Python环境也能直接运行。Python有一些第三方库,如pyinstaller、cx_Freeze等,可以帮助您将Python脚本转换为可执行文件。

但是需要注意的是,让程序在后台运行可能会带来一些额外的问题,比如错误日志的处理、进程监控等,这些都是需要考虑的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表