一直不大懂csv怎么通过mysql图形化的界面直接导入,看了很多帖子,总觉得自己会了,但实际导入中又总是出问题。一个是如果直接一个csv导入自动创建新表,所有列的数据类型都是text好像,然后导入时间巨长;另一个是有时我直接卡在了data import 那里,mysql告诉我数据类型错误,我学网上说的把csv用记事本txt打开,改文字类型为中文GB2312后仍然报错(大概是我有些地方没弄明白orz)。所以干脆通过python的pymysql库将csv写入mysql吧。
import pymysql
import pandas as pd
#pandas 数据处理
time_df=pd.read_csv(r'full_music_data.csv', sep = ',', header = None,low_memory=False)
k=time_df.loc[1:,:].values # 去掉原列名
k=k.tolist()
# mysql 批量导入
conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='dongman2',charset='utf8') # dongman2 是原来就有的一个数据库
cursor=conn.cursor()
cursor.execute('CREATE DATABASE IF NOT EXISTS MCM2021 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.execute('USE MCM2021;')
cursor.execute('DROP TABLE IF EXISTS `full_music_data`;')
cursor.execute('CREATE TABLE `full_music_data`(`artist_names` VARCHAR(500) NULL,`artists_id` VARCHAR(500) NULL,`danceability` FLOAT NULL,`energy` FLOAT NULL,`valence` FLOAT NULL,`tempo` FLOAT NULL,`loudness` FLOAT NULL,`mode` BOOLEAN NULL,`key` INT(11) NULL,`acoustiness` FLOAT NULL,`instrumentalness` FLOAT NULL,`liveness` FLOAT NULL,`speechiness` FLOAT NULL,`explicit` BOOLEAN NULL,`duration_ms` INT(11) NULL,`popularity` INT(11) NULL,`year` VARCHAR(50) NULL,`release_date` VARCHAR(50) NULL,`song_title` VARCHAR(500) NULL) ENGINE = InnoDB, DEFAULT CHARACTER SET = utf8mb4') # 第一张表
# 所有用到的列名 artist_names artists_id danceability energy valence tempo loudness mode key acousticness instrumentalness liveness speechiness explicit duration_ms popularity year release_date song_title (censored)
cursor.executemany("INSERT INTO full_music_data VALUE(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",k)
conn.commit()
cursor.close()
conn.close()
说实话,建表那步写列名写吐了,但能力有限只知道用这种笨办法。。