2012-05-07 20 views
0

私はmysqlに入れようとしているExcelファイルがあります。私はpythonのプラグインxlrdを使用して抽出し、mysqlに入れたい32のフィールドがあります。データは、そのようにレイアウトされていますPythonのMysqldb INSERT INTO構文エラー

Data Layout

私の方法論は、私が行くようにフィールド名を追加し、行と列を反復することです。コードはフィールド名を追加しますが、データを追加するときにエラーが発生します。 (私はテーブルを作成した 'OilProvedReservesHistory' インデックスにのみフィールドとして):

SQL Layout

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, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''36.533'' at line 1")

あなたは私はこの作業を得るのを助けることはできますか?どうもありがとう!

答えて

1

あなたのVALUES句のかっこは忘れてしまったと思います。

INSERT INTO OilProvedReservesHistory (US) VALUES (36.533) 

はにあなたのコードを変更してみてください:

sql = "INSERT INTO " + table + " ("+ fieldname + ") VALUES (%s)" 
+0

ハ、ええ、あなたが正しいです!私がこれを投稿する前に、最初にすべてのフィールド名を作成してからデータ値をポストしようとしていましたが、エラーはただ1つの値で行を埋めようとしていたと思います。ありがとう! – user578582

+0

ようこそ。 –

関連する問題