python csv文件创建时间_记录 python 根据csv文件自动创建表插入数据

这篇博客展示了如何使用Python连接MySQL数据库,并自动根据CSV文件内容创建数据库表,然后将CSV数据批量插入到新建的表中。首先,通过pymysql库连接数据库,接着读取指定文件夹下的CSV文件,利用pandas读取数据并确定字段类型,构造SQL语句创建表和插入数据,最后执行插入操作。
摘要由CSDN通过智能技术生成

# -*- coding: utf-8 -*-

importos

importpymysql

importpandas aspd

# 1.连接 Mysql 数据库

try:

conn = pymysql.connect(host='localhost', user='root', password='sq8813', db='db_test', charset='utf8')

cur = conn.cursor()

print('数据库连接成功!')

print(' ')

except:

print('数据库连接失败!')

# 2.读取任意文件夹下的csv文件

#获取程序所在路径及该路径下所有文件名称

path = os.getcwd()

files = os.listdir(path)

#遍历所有文件

i = 0

forfile infiles:

#判断文件是不是csv文件

iffile.split('.')[-1] in['csv']:

i += 1

#构建一个表名称,供后期SQL语句调用

filename = file.split('.')[0]

filename = 'tab_'+ filename

#使用pandas库读取csv文件的所有内容,结果f是一个数据框,保留了表格的数据存储方式,是pandas的数据存储结构。

f = pd.read_csv(file, encoding='gbk') # 注意:如果报错就改成 encoding='utf-8' 试试

#print(f)

# 3.计算创建字段名称和字段类型的 SQL语句片段

# 3.1 获取数据框的标题行(即字段名称),将来作为sql语句中的字段名称。

columns = f.columns.tolist()

print(columns)

# 3.2 将csv文件中的字段类型转换成mysql中的字段类型

types = f.ftypes

field = [] #用来接收字段名称的列表

table = [] #用来接收字段名称和字段类型的列表

foritem incolumns:

if 'int' intypes[item]:

char = item + ' INT'

elif 'float' intypes[item]:

char = item +' FLOAT'

elif 'object' intypes[item]:

char = item +' VARCHAR(255)'

elif 'datetime' intypes[item]:

char = item + ' DATETIME'

else:

char = item + ' VARCHAR(255)'

table.append(char)

field.append(item)

# 3.3 构建SQL语句片段

# 3.3.1 将table列表中的元素用逗号连接起来,组成table_sql语句中的字段名称和字段类型片段,用来创建表。

tables = ','.join(table)

print(tables)

#3.3.2 将field列表中的元素用逗号连接起来,组成insert_sql语句中的字段名称片段,用来插入数据。

fields = ','.join(field) #字段名

print(fields)

# 4. 创建数据库表

# 4.1 #如果数据库表已经存在,首先删除它

cur.execute('drop table if exists {};'.format(filename))

conn.commit()

# 4.2 构建创建表的SQL语句

table_sql = 'CREATE TABLE IF NOT EXISTS '+ filename + '('+ 'id0 int PRIMARY KEY NOT NULL auto_increment,'+ tables + ');'

print('table_sql is: '+ table_sql)

# 4.3 开始创建数据库表

print('表:'+ filename + ',开始创建…………')

cur.execute(table_sql)

conn.commit()

print('表:'+ filename + ',创建成功!')

# 5.向数据库表中插入数据

print('表:'+ filename + ',开始插入数据…………')

# 5.1 将数据框的数据读入列表。每行数据是一个列表,所有数据组成一个大列表。也就是列表中的列表,将来可以批量插入数据库表中。

values = f.values.tolist() #所有的数据

print(values)

# 5.2 计算数据框中总共有多少个字段,每个字段用一个 %s 替代。

s = ','.join(['%s' for_ inrange(len(f.columns))])

print("s is ",s)

# 5.3 构建插入数据的SQL语句

insert_sql = 'insert into {}({}) values({})'.format(filename,fields,s)

print('insert_sql is:'+ insert_sql)

# 5.4 开始插入数据

cur.executemany(insert_sql, values) #使用 executemany批量插入数据

conn.commit()

print('表:'+ filename + ',数据插入完成!')

print(' ')

print('任务完成!共导入 {} 个CSV文件。'.format(i))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值