0

mysqlに入れようとしているExcelファイルがあります。Python プラグイン xlrd を使用して抽出し、mysql に入れたい 32 個のフィールドがあります。データは次のように配置されます。

データレイアウト

私の方法論は、行と列を繰り返し処理し、フィールド名を追加することです。コードはフィールド名を追加しますが、データを追加するときにエラーが発生します。(インデックスを唯一のフィールドとしてテーブル「OilProvedReservesHistory」を作成しました):

SQL レイアウト

def get_data_from_sheet(sheet_index, table, start_row, end_row, end_col):

for row in range(start_row - 1, end_row - 1):
    for col in range(end_col):
        cell = sheet.cell(row,col)
        if col == 0:        
            fieldname = cleanup_field(cell.value)
            if fieldname != ("Blank Cell"):
                sql = "ALTER TABLE OilProvedReservesHistory ADD %s VARCHAR(20)" % fieldname
                c.execute(sql)                  
        else:
            data = cleanup_data(cell)
            if data != ("Blank Cell"):
                postToMySQL(data,fieldname,table)


def postToMySQL(data,fieldname,table):
#Generate sql query string                
sql = "INSERT INTO " + table + " ("+ fieldname + ") VALUES %s"
c.execute(sql, data)
# Executes: ("""INSERT INTO OilProvedReservesHistory (US) VALUES 36.533""")

table = create_table_from_sheet_name()

sheet_index = 0
start_row = 5
end_row = 68
end_col = 32

get_data_from_sheet(sheet_index, table, start_row, end_row, end_col)

私が得るエラーは次のとおりです。

_mysql_exceptions.ProgrammingError: (1064、「SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルの 1 行目の ''36.533'' 付近で使用する正しい構文を確認してください」)

これを機能させるのを手伝ってもらえますか? どうもありがとう!

4

1 に答える 1

1

私の推測では、VALUES 句の括弧を忘れただけです。

INSERT INTO OilProvedReservesHistory (US) VALUES (36.533)

コードを次のように変更してみてください。

sql = "INSERT INTO " + table + " ("+ fieldname + ") VALUES (%s)"
于 2012-05-07T15:01:21.893 に答える