我有每 2 小时更新一次的文件。我必须自动检测文件并将从中提取的信息插入数据库。
我们的 DBMS 是 Postgresql,编程语言是 Python。你会建议我怎么做?
我想利用 DAL(数据库抽象层)在文件和数据库之间建立连接,并使用 postgresql LISTEN
/NOTIFY
技术来检测新文件。如果您同意我的观点,请告诉我如何使用LISTEN
/NOTIFY
函数来检测文件。
谢谢
我有每 2 小时更新一次的文件。我必须自动检测文件并将从中提取的信息插入数据库。
我们的 DBMS 是 Postgresql,编程语言是 Python。你会建议我怎么做?
我想利用 DAL(数据库抽象层)在文件和数据库之间建立连接,并使用 postgresql LISTEN
/NOTIFY
技术来检测新文件。如果您同意我的观点,请告诉我如何使用LISTEN
/NOTIFY
函数来检测文件。
谢谢
您需要编写一个作为守护程序保持运行的脚本,使用文件系统通知 API 在文件更改时运行回调函数。当通知脚本文件更改时,它应该连接到 PostgreSQL 并执行所需的工作,然后返回睡眠状态等待下一次更改。
监视目录更改的唯一真正跨平台的方法是使用延迟循环来轮询os.listdir
并os.stat
检查新文件和更新的修改时间。这是对电源和磁盘 I/O 的浪费;对于大量文件,它也会变慢。如果您的操作系统在目录中的文件更改时可靠地更改目录修改时间,您可以只os.stat
在延迟循环中使用目录,这会有所帮助。
使用操作系统特定的通知 API 要好得多。如果您使用 Java,我会告诉您使用 NIO2监视服务,它为您处理所有平台细节。看起来Watchdog可能会为 Python 提供类似的东西,但我不需要在我的 Python 编码中进行目录更改通知,所以我没有对其进行测试。如果它不起作用,您可以使用特定于平台的技术,例如 Linux 的 inotify/dnotify 和 Windows 的各种观察程序 API。
也可以看看:
您不能使用 LISTEN/NOTIFY,因为它只能从数据库中发送消息,而您的文件显然不在那里。
您需要让您的 python 脚本扫描文件所在的目录并检查它们的修改时间 (mtime)。如果它们被更新,您需要读入文件,解析数据并将其插入数据库。在不知道文件格式的情况下,没有办法更具体。