python将csv(中⽂)导⼊mysql数据库的简单代码
python怎么读csv数据昨天⽼师让我在服务器上尝试安装⼀下php写的简单脚本:把csv导⼊mysql数据库,链接如下:
使⽤php写的,源码我就不贴上来了,写的⽐较简单,先是读取了csv的第⼀⾏,根据这个创建了表格,然后再利⽤sql⾃带的语句 “load ”将剩下的数据读⼊到这个表格中。但是刚好服务器的后台command line 执⾏的php没有安装好,放在browser上的话处理数据⼜不太适合,于是我就⾃⼰写了⼀个简单的python的脚本。
⾸先csv读⼊mysql 可以使⽤sql语句直接读⼊ 代码如下:
LOAD DATA INFILE 'csv_file'
IGNORE INTO TABLE table_name
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
但是这样读⼊的前提是必须创建⼀个table之后才能导⼊到指定的table,下⾯就是⽤python先提取了⾸⾏(前提是⾸⾏就是table的fields),然后再利⽤上⾯的sql语句把剩下的导⼊:
#coding=utf-8
import csv
import sys
import codecs
import MySQLdb
reload(sys)
sys.setdefaultencoding('utf-8')
csv_filename=sys.argv[1]
database=sys.argv[2]
table_name=sys.argv[3]
file=codecs.open(csv_filename,'r','utf-8')
adline()
b=reader.split(',')
colum=''
for a in b:
colum=colum+a+' varchar(255),'
colum=colum[:-1]
create='create table if not exists '+table_name+' '+'('+colum+')'+' DEFAULT CHARSET=utf8'
data='LOAD DATA LOCAL INFILE \''+csv_filename+'\' INTO TABLE '+table_name +' character set utf8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES T e=unicode(data,'utf8')
t(
host='localhost',
port=3306,
user='root',
passwd='',
db=database)
conn.set_character_set('utf8')
cursor=conn.cursor()
connmit()
cursor.close()
print('OK')
⽤法在命令⾏中: python csv_to_sql.py csv_file database_name table_name
第⼀个参数csv⽂件(可以不和python脚本放在⼀个位置,路径写对就可以,不过放在⼀起更⽅便)
第⼆个参数选择存放的数据库名
第三个需要存⼊的表格名字。(不需要再去单独建⽴表格)
直接在命令⾏运⾏,没有报error错误就可以(会报warnning没关系)
这⾥有⼀点要注意的是,从代码就可以看出,创建的table的字段都是定义好的了,都是varchar(255),如果需要修改的话,可以到数据
库根据⾃⼰的需要修改相应的field的属性。
另外⼀点就是csv中⽂的问题了,我要导⼊就是⾄少⼏⼗M的中⽂数据,所以⼀开始也遇到了点⿇烦(不过python对中⽂的⽀持也不是很
好)。这⾥要先明⽩⼀个问题就是csv的⽂件是什么编码的,我的 csv是utf8编码的,如果不是utf8最好先转成utf8的编码格式。上⾯的代
码是在Linux服务器下测试成功的,如果是windows的话,有问题也因该是编码的问题。
还有就是创建数据库的时候也⼀定要记得统⼀⽤utf8的格式
1、建⽴数据库连接后
conn.set_character_set('utf8')
2、建⽴数据库游标后:
SET NAMES 'utf8';
它相当于下⾯的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
3、创建表格的时候在表格后⾯加上:
DEFAULT CHARSET=utf8
这样就没有问题,其实就是要保证在整个数据流动过程中的编码要⼀致就可以了
ps:python有 CSV模块可以⽽⽀持读写csv⽂件,不过由于我只是提取⼀⾏建⽴表格所以就这⾥就没有⽤,不过我也尝试了⼀下,csv模块,如果要读取csv内容的话可以⽤这个模块,但是这个模块只⽀持utf8格式的,其它的格式的需要转码⼀下,这个看官⽅⽂档就可以了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论