2016-07-15 5 views
0
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))) 

上記のコードは、名前がリスト 'variables'に格納されている7つの列を更新しています。 私はこのコードを使用していることをやってみましリスト「変数」の要素(列)の数が増加した場合、それはすべての列を更新していないだけで7
なければならないように、それを動的にしたい:Pythonでリストを使用してデータベースを動的に更新する方法

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

パラメータ置換を使用する方が簡単です。 paramsを参照してください。executeがシーケンス引数を取ることに注意してください。メモリが許す場合は、その行が(それはおそらくない)、何かのように見え始める

cur.execute(sql, records) 

、あなたはより良いexecutemany行いを見つけることがあります。あなたはレコードの配列で一度それを呼び出します。

これを念頭に置いて、の動的の部分が注目されます。 colsを反復処理するときに、パラメータ化されたクエリ文字列を作成します。それが完了したら、パラメータプレースホルダと要素の一致したセット(実質的に)がrecordsにあるはずです。次に、WHERE句をタックし、レコードにFIPを追加して実行します。

HTH。

関連する問題