如何在 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 功能