在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

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐