2012-04-14 54 views
28

不知道我在這裏丟失了什麼,但是此代碼在沒有任何錯誤消息的情況下運行,但表中沒有任何內容。我將三列中的CSV值加載到mysql表中在Python中將CSV數據加載到MySQL中

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

感謝的作品:)但是,你知道爲什麼值都在數據庫中單引號? – 2012-04-14 15:48:28

+4

嘗試''插入testcsv(名稱,類,標記)值(%s,%s,%s)「,行' – 2012-04-14 15:51:01

+0

@HelenNeely還記得接受答案和upvote。 – 2012-04-14 15:51:46

0

如果是大熊貓的數據幀,你可以這樣做:

發送數據

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

,以避免使用for的。

+2

看來你是從手冊中引用的?請在這種情況下添加引用,以便人們可以閱讀,以防他們感興趣(併爲原作者提供適當的參考)。 – 2016-10-08 16:43:20

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()