if year in Year:
#print 'executing'
for rows in range(1,sheet.nrows):
records = []
FIP = str(sheet.cell(rows, 1).value)
for cols in range(9,sheet.ncols):
records.append(str(sheet.cell(rows,cols).value))
cur.execute("UPDATE " + str(table_name) + " SET " + (str(variables[0]) + "= \'{0}\', ".format(records[0])
+ str(variables[1]) + " = \'{0}\', ".format(records[1])
+ str(variables[2]) + " = \'{0}\', ".format(records[2])
+ str(variables[3]) + " = \'{0}\', ".format(records[3])
+ str(variables[4]) + " = \'{0}\',".format(records[4])
+ str(variables[5]) + " = \'{0}\', ".format(records[5])
+ str(variables[6]) + " = \'{0}\' ".format(records[6])+
"WHERE DATA_Year='2010'AND FIPS='{0}'".format(FIP)))
以上代码正在更新7个列,其名称存储在列表'变量'中。 我想让它变得动态,以便如果列表中的元素(列)数量变化'增加了,它应该更新所有列而不仅仅是7 我尝试使用此代码执行此操作:
if year in Year:
#print 'executing'
for rows in range(1,sheet.nrows):
records = []
FIP = str(sheet.cell(rows, 1).value)
for cols in range(9,sheet.ncols):
records.append(str(sheet.cell(rows,cols).value))
for x in range(0,len(variables)):
#print x
cur.execute("UPDATE " + str(table_name) + " SET " + (str(variables[x])) + "= \'{0}\', ".format(records[x])
+ "WHERE DATA_Year='2010' AND FIPS='{0}'".format(FIP))
但是我收到了错误:
pypyodbc.ProgrammingError: (u'42000', u"[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WHERE'.")
如果有人可以帮助我弄清楚我的代码有什么问题,以及是否有其他办法可以做我想做的事情,那将会很棒。
答案 0 :(得分:0)
您会发现使用参数替换更容易。请参阅params,并注意执行采用序列参数。那条线开始看起来像,
cur.execute(sql, records)
如果内存允许(可能确实如此),您可能会发现 executemany 表现更好:您使用一系列记录调用它一次。
考虑到这一点,您问题的动态部分成为焦点。在迭代cols
时构造参数化查询字符串。完成后,您应该在records
中有一个匹配的(有效的)参数占位符和元素集。然后添加WHERE子句,将FIP附加到记录,然后执行。
HTH。