在Python中将CSV数据加载到MySQL中

问题描述:

不知道我在这里丢失了什么,但是此代码在没有任何错误消息的情况下运行,但表中没有任何内容。我将三列中的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" 

如果其他人可以看看,我们将不胜感激。

谢谢。

我觉得你必须做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

如果是大熊猫的数据帧,你可以这样做:

发送数据

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

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