python批量导入MySQL的表头、扩展插入(datetime)类型主键

python批量导入MySQL的表头 、扩展插入(datetime)类型主键

目标:1.在EXCEL中编辑table name、数据格式、数据类型和备注等信息,把excel中col_1列的值作为表头,col_2列的值作为数据类型,col_3列的值作为约束类型,在mysql中创建table。
	 2.以datetime类型为主键,先按一定顺序扩展主键列,然后更新数据。
目的(起因):1.需要在创建一个table来存储数据,大约300列。通过敲create、alter来创建表,太累,容易出错,日后维护修改麻烦。2.更新时间序列数据,虽然有某些行无数据的情况,但想在tables中保留改行,以便分析数据缺失情况。在网上找了很多,各种出bug。下面分享下自己的解决办法。
配置及工具:win10(LTSC)、python3.7.5、mysql(8.0)、pycharm、jupyter notebook、mysql.connector(我是初学者,随机选的这个)、其它库(pandas,datetime,numpy)
方法:
一、表头问题
字符串拼接的方法拼接出sql,通过cursor.execute(sql),create、alter实现目标
二、扩展datetime主键列
pandas.date_range生成时间序列,用numpy.array().reshape(len(),1)把一维转置成二维,最后格式换成tuple组成的list,最后用cursor.executemany(sql),inset into命令扩展数据列。
目标格式:[('2020-01-02 00:00:06',), ('2020-01-02 00:10:06',), ('2020-01-02 00:20:06',)],
错误格式(['2020-01-02 00:00:06'], ['2020-01-02 00:10:06'], ['2020-01-02 00:20:06'])
、[['2020-01-02 00:00:06'], ['2020-01-02 00:10:06'], ['2020-01-02 00:20:06']]
、[('2020-01-02 00:00:06'), ('2020-01-02 00:10:06'), ('2020-01-02 00:20:06')],。为什么时候元组,我也不懂,别人的测试中,其它格式都行,我这里只有这个格式可以。视乎元组中那个逗号(",")很重要。
很多东西还不懂,望指教。
import mysql.connector
import pandas
import datetime
import numpy
config={'user':'root','password':'~~','database':'~~'}
con=mysql.connector.connect(**config)#可变长变量**config
cursor=con.cursor()
#问题一解决办法
path=r'~~'
df_bi = pandas.read_excel(path)
#
sqa = 'CREATE TABLE test('
sqb = 'date_time DateTime PRIMARY KEY'
sqc = df_bi.loc[1]['col_1'] + ' ' + df_bi.loc[1]['col_2'] + ' ' + df_bi.loc[1]['col_3'] + ' '
sqn = ');'
#col_1:表头,col_2:数据类型,col_3:约束类型
cursor.execute(sql)
con.commit()
#问题二解决办法
#创建时间序列
ds = pandas.date_range(start='2020-01-02 0:0:6',periods =3,freq ='10T')
#转换时间序列
str=pandas.to_datetime(ds).strftime("%Y-%m-%d %H:%M:%S")
#print(str)
#Index(['2020-01-02 00:00:06', '2020-01-02 00:10:06', '2020-01-02 00:20:06'], dtype='object')
val =numpy.array(str).reshape(len(str),1)
val=val.tolist()
for i in range(len(val)):
    val[i]=tuple(val[i])
#print(val)
#[('2020-01-02 00:00:06',), ('2020-01-02 00:10:06',), ('2020-01-02 00:20:06',)]
sql= "INSERT INTO test(date_time) VALUES(%s);"
cursor.executemany(sql,val)
con.commit()
cursor.close()
con.close()
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值