使用pyodbc和ping状态更新多行

时间:2015-07-02 20:57:22

标签: python operating-system pyodbc

我希望使用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]中的每一行都以相同的值更新。如何更新每行的具体状态?

感谢。

2 个答案:

答案 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地址并相应地更新。