使用 pyodbc 和 ping status 更新多行
Updating multiple rows using pyodbc and ping status
我希望使用 os 和 pyodbc 更新单列中的多行。我的代码如下:
def poll():
for x in device_query():
command = os.system('ping -n 1 %s' % x[4])
if command == 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus)', 'online')
cnxn.commit()
elif command == 0 and x[8] == 'offline':
cursor.execute("update CamTable set UnitStatus=? where UnitStaus='offline'", 'online')
cnxn.commit()
elif command != 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus)', 'offline')
cnxn.commit()
elif command != 0 and x[8] == 'online':
cursor.execute('update CamTable set UnitStatus=?', 'offline')
cnxn.commit()
else:
pass
但是,x[8] 中的每一行都更新为相同的值。如何更新每一行的具体状态?
谢谢。
您需要一个 WHERE 子句,否则它将更新 table:
中的所有行
cursor.execute('update CamTable set UnitStatus=?', 'offline')
请阅读此处有关 UPDATE 查询和 INSERT 查询的文档,您的语法似乎有误:
https://code.google.com/p/pyodbc/wiki/GettingStarted
作为语法错误的另一个例子,这个:
cursor.execute('insert into CamTable (UnitStatus)', 'online')
应该是这样的:
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'online')
更多上下文也会有帮助,在您修复语法后,我们可以确定您实际执行的 if 子句中的位置。你从哪里得到 device_query()?
更新后的代码如下:
def poll():
for x in device_query():
command = os.system('ping -n 1 %s' % x[4])
if command == 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'online')
cnxn.commit()
elif command == 0 and x[8] == 'offline':
print 'update'
cursor.execute("update CamTable set UnitStatus=? where ip=?", 'online', str(x[4]))
cnxn.commit()
elif command != 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'offline')
cnxn.commit()
elif command != 0 and x[8] == 'online':
print 'update'
cursor.execute("update CamTable set UnitStatus=? where ip=?", 'offline', str(x[4]))
cnxn.commit()
else:
pass
x[4] 将在我的数据库中轮询设备的 IP 地址并进行相应更新。
我希望使用 os 和 pyodbc 更新单列中的多行。我的代码如下:
def poll():
for x in device_query():
command = os.system('ping -n 1 %s' % x[4])
if command == 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus)', 'online')
cnxn.commit()
elif command == 0 and x[8] == 'offline':
cursor.execute("update CamTable set UnitStatus=? where UnitStaus='offline'", 'online')
cnxn.commit()
elif command != 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus)', 'offline')
cnxn.commit()
elif command != 0 and x[8] == 'online':
cursor.execute('update CamTable set UnitStatus=?', 'offline')
cnxn.commit()
else:
pass
但是,x[8] 中的每一行都更新为相同的值。如何更新每一行的具体状态?
谢谢。
您需要一个 WHERE 子句,否则它将更新 table:
中的所有行cursor.execute('update CamTable set UnitStatus=?', 'offline')
请阅读此处有关 UPDATE 查询和 INSERT 查询的文档,您的语法似乎有误:
https://code.google.com/p/pyodbc/wiki/GettingStarted
作为语法错误的另一个例子,这个:
cursor.execute('insert into CamTable (UnitStatus)', 'online')
应该是这样的:
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'online')
更多上下文也会有帮助,在您修复语法后,我们可以确定您实际执行的 if 子句中的位置。你从哪里得到 device_query()?
更新后的代码如下:
def poll():
for x in device_query():
command = os.system('ping -n 1 %s' % x[4])
if command == 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'online')
cnxn.commit()
elif command == 0 and x[8] == 'offline':
print 'update'
cursor.execute("update CamTable set UnitStatus=? where ip=?", 'online', str(x[4]))
cnxn.commit()
elif command != 0 and x[8] == '':
cursor.execute('insert into CamTable (UnitStatus) VALUES (?)', 'offline')
cnxn.commit()
elif command != 0 and x[8] == 'online':
print 'update'
cursor.execute("update CamTable set UnitStatus=? where ip=?", 'offline', str(x[4]))
cnxn.commit()
else:
pass
x[4] 将在我的数据库中轮询设备的 IP 地址并进行相应更新。