2016-10-26 9 views
0

私は、実践のためにPythonを使ってmysqlにcsvファイルをインポートしようとしています。私は正しいライブラリをダウンロードしたと信じています。コードを実行するたびにエラーが発生します。MysqlにCSVをインポートするPython 3.x

mysql.connector.errors.ProgrammingError:1064(42000):SQL構文にエラーがあります。 '%s、%s、%s、%s、%s、%s、%s、%s、%s、%s'の近くで使用する正しい構文については、ご使用のMySQLサーバのバージョンに対応するマニュアルを参照してください。 1行目

これがうまくいかず、すべての答えが、python 3.xをサポートしていないmysqldbを使用しているように思えます。

マイコード:

import mysql.connector 
import pandas as pd 

cnx = mysql.connector.connect(user='root', password='comeonin', host='127.0.0.1', database='boxresults') 
cursor = cnx.cursor() 
csv_data = pd.read_csv('Betting/boxresults3.csv') 

for row in csv_data: 
    cursor.execute("INSERT INTO table1(Week, Day, Date, Winner, Loser, PtsW, PtsL, YdsW, TOW, YdsL, TOL) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s, %s)", row) 


cursor.close() 
cnx.close() 

新しいコード:

import mysql.connector 
import pandas as pd 

cnx = mysql.connector.connect(user='root', password='comeonin', host='127.0.0.1', database='boxresults') 
cursor = cnx.cursor() 
csv_data = pd.read_csv('Betting/boxresults3.csv') 

for row in csv_data.iterrows(): 
    list = row[1].values 
    cursor.execute("INSERT INTO table1(Week, Day, Date, Winner, Loser, PtsW, PtsL, YdsW, TOW, YdsL, TOL) VALUES('%d','%s','%s','%s','%s','%d','%d','%d','%d','%d', '%d')" % tuple(list)) 

cursor.close() 
cnx.close() 
+0

印刷 '行あなたが何をしているのかを見てください。 'execute()'は11要素のタプルが必要です。 – furas

+0

私は11行の列名を取得する行を印刷するときに、私はそれがタプルではないと思う。 1で1をプリントしています。 – Evy555

+0

パンダのオーバーヘッドはなぜですか? CSVモジュールはうまくいくでしょう。また、使用している場合、pandasは[to_sql](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html)を1回の呼び出しで一括して追加すると考えています。それでもなお、MySQLには、テキストファイル用の[LOAD DATA INFILE](http://dev.mysql.com/doc/refman/5.7/en/load-data.html)コマンドがあります。 – Parfait

答えて

0

あなたは間違っrowを持っています。

for row in csv_data 

あなたは

for row in csv_data.iterrows(): 

iterrows()を必要とする行取得するにはrow

であなたに列名を与えます。しかし、このrowだけではなくvaluesが、他の情報があります。あなたの値はrow[1]にあるが、Seriesオブジェクトとして、あなたはリスト

for row in csv_data.iterrows(): 
    print(row[1].values) 

全作業の例として、値を取得するvaluesを必要とするので:

import pandas as pd 

df = pd.DataFrame([[1,2,3], [4,5,6]], columns=['a','b','c']) 

print(df) 

for row in df.iterrows(): 
    print('type:', type(row[1])) 
    print('values:', row[1].values) 

結果:

a b c 
0 1 2 3 
1 4 5 6 
type: <class 'pandas.core.series.Series'> 
values: [1 2 3] 
type: <class 'pandas.core.series.Series'> 
values: [4 5 6] 
+0

それは私が各列を分割するのに役立ちます。しかし、リストはまだmysqlに入力できません。同じエラーが発生しています。このリストは、実行中の11個の値の期待値に対して11個の値として正しく入力されていませんか? – Evy555

+0

引用符 '( '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s'、 '%s') ' – furas

+0

私のコードにいくつか微調整を加えなければなりませんでした。私はエラーなしで実行するようにしましたが、テーブルには何も入力されていません。上記の新しいコードを追加しました。 – Evy555

関連する問題