Python 应用程序的第二个实例未提交到 MariaDB 表

问题描述 投票:0回答:1

我有一个应用程序在多个 Raspberry Pi 上运行,使用带有所有最新更新的 Python 3.12.3 和在单独的专用 Pi 上运行的 MariaDB 10.5.21。该应用程序以一定的时间间隔检索 UPS 值,并使用存储过程将这些值记录到公用表中。

在单个 Pi 上运行时,一切都按预期工作,但一旦在多个 Pi 上运行,第一个启动的就是唯一登录到表的 Pi。如果我停止第一个,然后重新启动第二个,那么那个将开始记录,而第一个则不会。

下面是我正在使用的代码。 DatabaseConnection() 仅返回一个连接,上面的代码片段使用该连接。 DatabaseConnection() 中的 autocommit=True 是我添加显式 conn.commit() 之前留下的,但在添加提交之前我遇到了同样的问题,我认为显式提交不会造成任何损害。

我来自 Windows/SQL Server/C# 世界,退休后我只是想将其转变为一种爱好。

知道什么会导致这种行为吗?

# Save the poll value to the database
conn = DatabaseConnection()
cur = conn.cursor()
cur.execute("CALL ups_poll_ins(?, ?, ?, ?, ?, ?, ?)",(ups.PiId, ups.SerialNo, ups.Status == 'ONLINE', ups.Load, ups.BatteryCharge, ups.TimeLeft, ups.TimeOnBattery))
conn.commit()
cur.close()
conn.close()`
def DatabaseConnection():
    config = configparser.ConfigParser()
    config.sections()
    config.read('/opt/database.ini')

    return mariadb.connect(
        host=config['DATABASE']['Host'],
        user=config['DATABASE']['User'],
        password = config['DATABASE']['Password'],
        database="home_monitoring",
        autocommit=True)
python raspberry-pi mariadb
1个回答
0
投票
    ... CALL ups_poll_ins( ... )

您正在调用一个存储过程来插入七个值。 我们看不到该程序的文本。 但其余的代码是标准的, 所以“卡住锁”的问题肯定就在那里。

更愿意插入七个值。

另外,考虑通过连接到 MariaDB sqlalchemy。 它可以让您在例如上运行相同的代码本地测试 sqlite 数据库, 这可以方便自动化 测试套件

© www.soinside.com 2019 - 2024. All rights reserved.