SQL 数据库插入到表适用于 1 个项目,但不适用于多个项目



我有一个SQL数据库,我也试图通过python脚本编写。该 python 脚本解析 DC 开关,然后将其吐出results_list。然后,我过滤以下 2 项描述和界面。

该应用程序的前端是一个烧瓶页面,我分配了按钮,这些按钮将查询x机柜并执行上述所有操作。我想将以下所有数据发送到sql数据库。我还想防止重复/更新表,如果项目已更改。

现在,当我运行查询时,如果工作参数被传递给 SQL,并且 Flask 脚本的其余部分被处理。当我传递包含多个项目的参数时,出现以下错误。

OperationalError: (1241, 'Operand should contain 1 column(s)')

工作参数:

params = ([('TECH2_5750',)], [('Gi1/0/7',)], [(u'10.210.44.5',)])

不工作的参数:

params = ([('TECH2_5252',), ('TECH2_5261',), ('TECH2_5857',), ('TECH2_5278',), ('TECH2_5855',), ('TECH2_5207',), ('TECH2_6539',), ('TECH2_6363',), ('TECH2_5253',), ('TECH2_5030',), ('TECH2_6575',), ('TECH2_5839',), ('TECH2_6953',), ('TECH2_6133',), ('TECH2_5046',), ('TECH2_6152',), ('TECH2_5267',), ('TECH2_5847',), ('TECH2_5748',), ('TECH2_5104',), ('TECH2_5649',), ('TECH2_5103',)], [('Gi2/0/11',), ('Gi1/0/11',), ('Gi2/0/7',), ('Gi3/0/27',), ('Gi1/0/7',), ('Gi2/0/9',), ('Gi3/0/7',), ('Gi2/0/27',), ('Gi1/0/29',), ('Gi3/0/25',), ('Gi2/0/25',), ('Gi2/0/29',), ('Gi2/0/31',), ('Gi1/0/31',), ('Gi2/0/5',), ('Gi1/0/25',), ('Gi1/0/5',), ('Gi3/0/5',), ('Gi1/0/9',), ('Gi1/0/35',), ('Gi1/0/27',), ('Gi1/0/33',)], [(u'10.210.45.5',)])

法典:

local1 = []
device1 = []
items = len(filtered_interface)
for item in range(0, items):
    t = filtered_tech[item].split(' ')
    hostname = t[1]
    device1.append((hostname,))
    t = filtered_interface[item].split(' ')
    interfacelocal = t[1]
    local1.append((interfacelocal,))
cab1 = []
cab1.append((cab,))
params = (device1,  local1, cab1,)
connection1 = MySQLdb.connect(user="user", passwd="password", db="db",host="127.0.0.1")
mycursor = connection1.cursor()
sql = """
        INSERT INTO devices (hostname, localint, cab) VALUES (%s, %s, %s)"""
mycursor.execute(sql, params)
        connection1.commit()

mycursur.execute()要求params具有与查询中的占位符相同的元素数。由于您有 3 个占位符,因此params必须有 3 个元素。

如果要插入多行,则需要使用 mycursor.executemany .这将对参数序列的每个元素重复执行查询。 然后params应该是二维序列,顶级序列的每个元素都是 3 个参数的序列,用于填充占位符。

params = [('TECH2_5252', 'Gi1/0/7', u'10.210.44.5'),
          ('TECH2_5261', 'Gi1/0/11', u'10.210.45.5'),
          ('TECH2_5857', 'Gi2/0/7', u'10.210.45.5'),
          ...]
sql = """
        INSERT INTO devices (hostname, localint, cab) VALUES (%s, %s, %s)"""
mycursor.executemany(sql, params)

最新更新