我有一个应用程序在多个 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)
... CALL ups_poll_ins( ... )
您正在调用一个存储过程来插入七个值。 我们看不到该程序的文本。 但其余的代码是标准的, 所以“卡住锁”的问题肯定就在那里。
更愿意插入七个值。
另外,考虑通过连接到 MariaDB sqlalchemy。 它可以让您在例如上运行相同的代码本地测试 sqlite 数据库, 这可以方便自动化 测试套件。