在Python做一个关键词排名处理程序的时候,使用Pandas将处理好的数据以pd.to_sql的方法写入MYSQL数据库,带有日期的字段名自动加了时分秒这样的"00:00:00"字符,比如原来列名称为2020-02-29,pandas处理并导入数据库后,字段名变为了2020-02-29 00:00:00,并且字段类型自动设置成了DOUBLE,由于有几十个字段,手动一个个修改太麻烦,而且容易出错。于是想到了用Pandas和pymysql库来处理。
核心思路如下:

  1. 用pymysql库来建立数据库连接引擎
  2. 用Pandas的pd.read_sql()方法来从mysql数据库读取1条记录,返回的数据为DataFrame, pd.columns就算这个数据表的全部字段名称,然后用for col in pd.columns.tolist()就可以把这个数据表的字段名称全部读取出来,再用字符替换函数replace把 00:00:00替换成空值。
  3. 再用这个新的值生成SQL语句,并设定好新字段数据类型,用pymysql库的connection对象的游标cursor.execute(sql)方法来循环执行所有字段修改就可以了。

另外的方式是直接用SQL语句查询数据库里存储字段名称的系统表来获取字段名称,但是我觉得这种方法太麻烦,主要是不熟悉。所以采用了pandas来读取sql的方法。

关键代码如下:

import pymysql.connections
import pandas as pd
def connect_mysql():   #连接数据库#下面数据库连接信息是瞎编的conn = pymysql.connect(host='110.110.119.112', user='coolyl',passwd='fakeg@2021',db='testdb',port=3306,charset='utf8')print('数据库连接成功')return conn
if __name__ == '__main__':conn=connect_mysql()sql='select * from keywords_para limit 1'df=pd.read_sql(con=conn,sql=sql,index_col='ID')cursor = conn.cursor()for col in df.columns.tolist():sql = "ALTER TABLE `keywords_para` CHANGE COLUMN `" \+ str(col) + \  #这是旧字段名"` `" \     #下面是修改后的字段名和类型+ str(col).replace(' 00:00:00','') + \"` MEDIUMINT UNSIGNED NULL DEFAULT NULL"try:result=cursor.execute(sql)print('成功执行SQL:',sql)except Exception as e:print('执行SQL错误:',sql)print('错误信息:%s'%e)conn.close()  #关闭数据库连接

执行过程中会打印出实时信息,提示操作状态,因为这个表的数据很大,所以每执行一条语句,要等一会才能执行下一条。

数据库连接成功
成功执行SQL: ALTER TABLE keywords_para CHANGE COLUMN 2018-11-30 00:00:00 2018-11-30 MEDIUMINT UNSIGNED NULL DEFAULT NULL
成功执行SQL: ALTER TABLE keywords_para CHANGE COLUMN 2018-12-31 00:00:00 2018-12-31 MEDIUMINT UNSIGNED NULL DEFAULT NULL
成功执行SQL: ALTER TABLE keywords_para CHANGE COLUMN 2019-01-31 00:00:00 2019-01-31 MEDIUMINT UNSIGNED NULL DEFAULT NULL
执行SQL错误: ALTER TABLE keywords_para CHANGE COLUMN 2021-03-06 00:00:00 2021-03-06 MEDIUMINT UNSIGNED NULL DEFAULT NULL
错误信息:(1054, “Unknown column ‘2021-03-06 00:00:00’ in ‘keywords_para’”)
成功执行SQL: ALTER TABLE keywords_para CHANGE COLUMN 2021-03-13 00:00:00 2021-03-13 MEDIUMINT UNSIGNED NULL DEFAULT NULL

在Python里通过Pandas和pymysql库批量修改MySQL数据库的字段名称和字段类型相关推荐

  1. mysql数据库目标库_修改mysql数据库的库名

    假如源数据库名称为"srcdb",目标数据库名称为trgdb 首先创建目标数据库: create database trgdb; 查看源数据库中的所有表名: use informa ...

  2. 新发的日常小实验——使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍数(Unity、PIL、Pillow、压缩)

    文章目录 一.问题:图片导入Unity被调整成2的N次方 二.设置不转换成2的N次方 三.使用ETC压缩格式,图片宽高必须是4的倍数 四.使用python的PIL库批量修改图片尺寸,确保宽和高是4的倍 ...

  3. imooc的疯狂的蚂蚁的课程《Python操作MySQL数据库》 python3+pymysql模块来操作mysql数据库

    以下代码为imooc的疯狂的蚂蚁的课程<Python操作MySQL数据库>的python3版本的代码,使用的是pymysql模块来操作mysql数据库,代码与原课程有所改动,注意运行时需要 ...

  4. 计算机毕业设计python+django摄影作品相册分享系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着人们生活水平的逐步提高,旅游成了大家必不可少放松项目,每当笔者走到一个美丽的景点,就会忍不住拿起数码相机照上几张留做回忆.虽然照片最后会存入到自己的电脑里,但是时间一长.照片一多,这些有 ...

  5. linux mysql库文件路径设置_MySQL_linux修改mysql数据库文件的路径,mysql更改数据文件的存放路径 - phpStudy...

    linux修改mysql数据库文件的路径 mysql更改数据文件的存放路径感觉直接把/etc/my.cnf中的datadir改一下重启一下服务就行,但是从网上搜了n多资料,大部分都是更改my.cnf中 ...

  6. 计算机毕业设计Python+djang公务员考试信息管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着社会的发展,近些年来的毕业生大多数会选择考研,考公员和考试教师资格证以增加自己在未来社会中的竞争能力.为了让这些有志之士能够有一个更好的学习和交流平台,我们通过计Python+djang ...

  7. 宏命令对word里的图片尺寸大小进行批量修改(按比例修改)

    宏命令对word里的图片尺寸大小进行批量修改(按比例修改) Sub 批量调整图片尺寸() '锁定图片的纵横比 '设置图片大小(1cm=28.35px) SizeHeight = 22.33 * 28. ...

  8. python hive mysql_[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) 很多情况下,需要将Hive中的运算结果保存到MySQL数据库中,可以通过简单的Python脚本来实现. 例子1:如果获取Hive ...

  9. [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站 [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - ...

最新文章

  1. 写出现代计算机网络的三个方面的应用,《计算机应用基础》统考模拟试题一及参考答案0...
  2. Java泛型详解:<T>和Class<T>的使用,泛型类
  3. java中no1_Java程序设计实验(NO.1).doc
  4. 为什么Controller层注入的是Service接口,而不是ServiceImpl实现类
  5. php blowfish 解密,PHP blowfish 加密解密函数
  6. 【Elasticsearch】Lucene 8 新特性
  7. python入门到精通 pdf-运维必备Python基础入门到精通.pdf
  8. WebForm 基础
  9. 小米MIX 2最简单卡刷开发版启用root权限的方法
  10. linux配置dhcp服务器时authoritative参数的作用
  11. java茌首字母_获取输入字符的首字母(中文为拼音首字母)
  12. python tests in xxx问题
  13. 合作式智能运输系统车路协同云控系统V2X设备接入技术规范
  14. Android 控件数组
  15. 如何取得销售订单中订单货币和本位币之间的汇率 (exchange rate)
  16. geogebra画一段椭圆
  17. backpackII
  18. 华为BGP协议基础配置
  19. Mybatis 之 二级缓存
  20. 20个经典管理学定律

热门文章

  1. RedHat Linux口令恢复任我行
  2. mysql计算环比的方法(多种情况)
  3. 在家网上娱乐,网上飙歌渐成流行,炎热夏季都市白领的轻松减压十种方法,...
  4. 更改车载android系统launcher界面
  5. linux运维管理系统培训,Linux运维教程之Linux系统用户与组管理
  6. PMP中敏捷知识梳理
  7. 孤陋寡闻了,Python中类竟可以像列表一样操作
  8. selenium 自动化测试
  9. Mybatis_Plus日常开发遇到问题
  10. rm命令删除-开头命名的文件