2012-04-14 17 views
28

私はここで何が間違っているのか分かりませんが、このコードはエラーメッセージなしで実行されますが、テーブルには何もありません。私は3列のCSV値をmysqlテーブルにロードしていますPythonでMySQLにCSVデータをロード

import csv 
import MySQLdb 

mydb = MySQLdb.connect(host='localhost', 
    user='root', 
    passwd='', 
    db='mydb') 
cursor = mydb.cursor() 

csv_data = csv.reader(file('students.csv')) 
for row in csv_data: 

    cursor.execute('INSERT INTO testcsv(names, \ 
      classes, mark)' \ 
      'VALUES("%s", "%s", "%s")', 
      row) 
#close the connection to the database. 
cursor.close() 
print "Done" 

他の誰かが見ることができたら嬉しいです。

ありがとうございます。

答えて

59

あなたはmydb.commit()をすべて挿入しなければならないと思います。

この

import csv 
import MySQLdb 

mydb = MySQLdb.connect(host='localhost', 
    user='root', 
    passwd='', 
    db='mydb') 
cursor = mydb.cursor() 

csv_data = csv.reader(file('students.csv')) 
for row in csv_data: 

    cursor.execute('INSERT INTO testcsv(names, \ 
      classes, mark)' \ 
      'VALUES("%s", "%s", "%s")', 
      row) 
#close the connection to the database. 
mydb.commit() 
cursor.close() 
print "Done" 
+0

ありがとうございます:)しかし、値がすべてデータベースの単一引用符で囲まれている理由は分かりますか? –

+4

testcsv(名前、クラス、マーク)の値(%s、%s、%s)に挿入してみてください。 "、row' –

+0

@HelenNeelyは答えとupvoteを受け入れることを忘れないでください。 –

0

ような何かを、それはあなたが行うことができパンダ・データ・フレームの場合:forの使用を避けるために、データ

csv_data.to_sql=(con=mydb, name='<the name of your table>', 
    if_exists='replace', flavor='mysql') 

を送信

+2

マニュアルから引用したようですか?そのような場合には参照を追加してください。そうすれば、人々は興味がある場合に読むことができます(そして元の著者に適切な参照を与えることができます)。 –

0
from __future__ import print_function 
import csv 
import MySQLdb 

print("Enter File To Be Export") 
conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="", db="database") 
cursor = conn.cursor() 
#sql = 'CREATE DATABASE test1' 
sql ='''DROP TABLE IF EXISTS `test1`; CREATE TABLE test1 (policyID int, statecode varchar(255), county varchar(255))''' 
cursor.execute(sql) 

with open('C:/Users/Desktop/Code/python/sample.csv') as csvfile: 
    reader = csv.DictReader(csvfile, delimiter = ',') 
    for row in reader: 
     print(row['policyID'], row['statecode'], row['county']) 
     # insert 
     conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="", db="database") 
     sql_statement = "INSERT INTO test1(policyID ,statecode,county) VALUES (%s,%s,%s)" 
     cur = conn.cursor() 
     cur.executemany(sql_statement,[(row['policyID'], row['statecode'], row['county'])]) 
     conn.escape_string(sql_statement) 
     conn.commit() 
関連する問題