您的位置:首页 > 编程语言 > Python开发

python3利用pandas将csv文件中的数据导入mysql数据库

2020-02-17 04:16 225 查看

先定义一个函数将csv文件的数据类型与mysql的数据类型匹配,主要是日期与时间这两个数据类型的匹配。

[code]def make_table_sql(df):
columns = df.columns.tolist()
types = df.ftypes
# 添加id 制动递增主键模式
make_table = []
for item in columns:
if 'int' in types[item]:
char = item + ' INT'
elif 'float' in types[item]:
char = item + ' FLOAT'
elif 'object' in types[item]:
char = item + ' VARCHAR(255)'
elif 'datetime' in types[item]:
char = item + ' DATETIME'
make_table.append(char)
return ','.join(make_table)

定义建立数据库与表的函数

[code]def csv2mysql(db_name, table_name,df):
# 创建database
cursor.execute('CREATE DATABASE IF NOT EXISTS {} DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci'.format(db_name))
# 选择连接database
conn.select_db(db_name)
# 创建table
cursor.execute('DROP TABLE IF EXISTS {}'.format(table_name))
cursor.execute('CREATE TABLE {}({})'.format(table_name, make_table_sql(df)))

定义往表中插入数据的函数

[code]def insert_data(db_name, table_name,data):
# 提取数据转list 这里有与pandas时间模式无法写入因此换成str 此时mysql上格式已经设置完成
df['DATE'] = df['DATE'].astype('str')
df['LIVE_START'] = df['LIVE_START'].astype('str')
df['LIVE_END'] = df['LIVE_END'].astype('str')
values = df.values.tolist()
# 根据columns个数
s = ','.join(['%s' for _ in range(len(df.columns))])
# executemany批量操作 插入数据 批量操作比逐个操作速度快很多
cursor.executemany('INSERT INTO {} VALUES ({})'.format(table_name, s), values)

连接数据库

[code]config = dict(host='localhost', user='root', password='123456',
cursorclass=pymysql.cursors.DictCursor
)
# 建立连接
conn = pymysql.Connect(**config)
# 自动确认commit True
conn.autocommit(1)
# 设置光标
cursor = conn.cursor()

对于需要批量处理的csv文件,需要遍历文件夹目录下的文件,然后逐个读取插入

[code]i=0
rootdir = 'D:\huashu'
list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
for i in range(0,len(list)):
path = os.path.join(rootdir, list[i])
if os.path.isfile(path):
print('huashu'+path[18:26])
df = pd.read_csv(path, encoding='gbk', parse_dates=['DATE', 'LIVE_START', 'LIVE_END'])
df.fillna('', inplace = True)
if i == 0:
csv2mysql(db_name='huashu', table_name='time',df=df)
i=1
insert_data(db_name='huashu', table_name='time',data=df)

这里的read_csv函数中有很多参数,可以根据自己的需要选取,比如选择自己想导入的字段,编码格式等,

我这里的parse_dates用于转换csv中的日期时间格式到mysql中。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_40208466 发布了1 篇原创文章 · 获赞 0 · 访问量 231 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: