如何在 python 中使用 SQLalchemy 在数据库中有新条目时运行脚本?

Posted

技术标签:

【中文标题】如何在 python 中使用 SQLalchemy 在数据库中有新条目时运行脚本?【英文标题】:How to run a script when ever there is a new entry in database using SQLalchemy in python? 【发布时间】:2021-08-10 09:54:25 【问题描述】:

我是 SQL Alchemy 的新手,我需要一种在向表中添加新条目时运行脚本的方法。我目前正在使用以下方法来完成任务,但我确信必须有更有效的方法。

我的项目使用 python 2,数据库使用 MS SQL。

假设我的表是 carData,我为网站上的汽车详细信息添加了一个新行。新的汽车数据被添加到 carData。我的代码工作如下

class CarData:
    <fields for table class>

with session_scope() as session:
    car_data = session.query(CarData)
    reference_df = pd.read_sql_query(car_data.statement, car_data.session.bind)

while True:
    with session_scope() as session:
        new_df = pd.read_sql_query(car_data.statement, car_data.session.bind)
        if len(new_df) > len(reference_df):
            print "New Car details added"
            <code to get the id of new row added>
            <run script>
            reference_df = new_df
    sleep(10)

上面当然是我正在使用的代码的一个更简单的版本,但想法是有一个参考点,然后每 10 秒检查一次是否有新条目。然而,即使在使用 session_scope() 之后,我还是在几天后看到了连接问题,因为这个脚本应该无限期地运行。

有没有更好的方法可以知道已经添加了新行,获取新行的 id 并运行所需的脚本?

【问题讨论】:

请停止使用 Python 2! “几天后”您遇到了什么问题?看起来您正在不断地将数据附加到数据框中,因此您有可能遇到内存问题。我们需要更多关于您遇到的问题(例如异常)的背景信息,或许还需要了解您想对新行做什么? 感谢@gvee 的评论。它不太可能会遇到内存问题,因为新条目几天就会出现一次。我收到“OperationalError:TCP 提供程序:错误代码 0x68”。另外这似乎是很多手动检查,sqlalchemy中是否有任何模块或方法可以更好地完成任务。 【参考方案1】:

我相信您描述的错误是与数据库的连接问题,例如临时网络问题

OperationalError:TCP 提供程序:错误代码 0x68

所以你需要做的就是通过错误处理来解决这个问题!

try:
    new_df = pd.read_sql_query(car_data.statement, car_data.session.bind)
except:
    print("Problem with query, will try again shortly")

【讨论】:

我会试试看的。

以上是关于如何在 python 中使用 SQLalchemy 在数据库中有新条目时运行脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量

如何避免在 SQLAlchemy - python 的多对多关系表中添加重复项?

如何使用 Python+SQLAlchemy 远程连接 MySQL 数据库?

如何在 Django Python 中使用 PostgreSQL 为 SQLAlchemy 连接池设置方言?需要启用预 ping 功能

我不知道如何使用 sqlalchemy.create_engine 在 python 中编写 sql 查询

Python-Sqlalchemy-Postgres:如何将子查询结果存储在变量中并将其用于主查询