我希望使用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]中的每一行都以相同的值更新。如何更新每行的具体状态?
感谢。
答案 0 :(得分:0)
您需要一个WHERE子句,否则它将更新表中的所有行:
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()?
答案 1 :(得分:0)
更新后的代码如下:
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地址并相应地更新。