【发布时间】:2023-03-16 02:38:01
【问题描述】:
我有一个如下脚本:
import psutil
import sqlite3
DISK = {'1': ['C:\\', 'C:\\', 'NTFS', 'rw,fixed', '75.0Gb', '54.0Gb', '20.0Gb', '72.2%'], '2': ['D:\\', 'D:\\', 'NTFS', 'rw,fixed', '399.0Gb', '208.0Gb', '191.0Gb', '52.2%']}
conn = sqlite3.connect("Test.db")
c = conn.cursor()
result = c.execute("SELECT * FROM clientinfo WHERE IP = ?", ("192.168.10.111",))
if (len(result.fetchall()) > 0):
for x in DISK :
c.execute("UPDATE disk SET Device = ?, 'Mount Point' = ?, 'fstyle' = ?, 'opts' = ?, 'total' = ?, 'used' = ?, 'free' = ?, 'percent' = ? WHERE Client_IP = ?", (DISK[x][0], DISK[x][1], DISK[x][2], DISK[x][3], DISK[x][4], DISK[x][5], DISK[x][6], DISK[x][7], "192.168.10.111"))
else :
for x in DISK :
c.execute("INSERT INTO disk('Client_IP', 'Device', 'Mount Point', 'fstyle', 'opts', 'total', 'used', 'free', 'percent') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", ("192.168.10.111", DISK[x][0], DISK[x][1], DISK[x][2], DISK[x][3], DISK[x][4], DISK[x][5], DISK[x][6], DISK[x][7]))
conn.commit()
conn.close()
如果有任何关于 IP“192.168.10.111”的记录,脚本将检查 db。如果 db 已经有关于 IP "192.168.10.111" 的记录,脚本会将数据从 dict DISK 更新到 db 的表磁盘。 如果 db 没有关于 IP "192.168.10.111" 的记录,脚本将创建记录以将 **DISK"" 插入数据库。
INSERT 命令运行良好,但 UPDATE 命令无法正常运行。运行 INSERT 命令后,在表 disk 中,我将有两条关于磁盘 C 和磁盘 D 的记录,其列 Client_IP (192.168.10.111) 的值相同。 更新后,IP“192.168.10.111”的两条记录在每一列上都得到相同的值,这是非常错误的。一条记录必须包含有关 C 盘的信息,而另一条记录必须包含 D 盘信息。
如何使 UPDATE 正常工作? dict DISK 的长度取决于计算机安装的设备数量。所以我需要使用for循环来更新而不是静态更新。
请告诉我如何解决这个问题, 非常感谢, 弗朗西斯
【问题讨论】:
-
哪些列标识了您要更新的行?
-
它是表 disk 中的 Client_IP。请注意,SELECT 是从 clientinfo 而不是 disk 的不同表中选择的。
-
当您有多行具有相同的 Client_IP 值时,此列无法识别这些行。
-
是的,你知道如何解决它吗?
-
当你得到这两行时,你如何确定哪一行是正确的?您使用哪一列来识别具有正确磁盘的那一列?
标签: python python-2.7 sqlite