在Python里通过Pandas和pymysql库批量修改MySQL数据库的字段名称和字段类型
在Python做一个关键词排名处理程序的时候,使用Pandas将处理好的数据以pd.to_sql的方法写入MYSQL数据库,带有日期的字段名自动加了时分秒这样的"00:00:00"字符,比如原来列名称为2020-02-29,pandas处理并导入数据库后,字段名变为了2020-02-29 00:00:00,并且字段类型自动设置成了DOUBLE,由于有几十个字段,手动一个个修改太麻烦,而且容易出错。
在Python做一个关键词排名处理程序的时候,使用Pandas将处理好的数据以pd.to_sql的方法写入MYSQL数据库,带有日期的字段名自动加了时分秒这样的"00:00:00"字符,比如原来列名称为2020-02-29,pandas处理并导入数据库后,字段名变为了2020-02-29 00:00:00,并且字段类型自动设置成了DOUBLE,由于有几十个字段,手动一个个修改太麻烦,而且容易出错。于是想到了用Pandas和pymysql库来处理。
核心思路如下:
- 用pymysql库来建立数据库连接引擎
- 用Pandas的pd.read_sql()方法来从mysql数据库读取1条记录,返回的数据为DataFrame, pd.columns就算这个数据表的全部字段名称,然后用for col in pd.columns.tolist()就可以把这个数据表的字段名称全部读取出来,再用字符替换函数replace把 00:00:00替换成空值。
- 再用这个新的值生成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 TABLEkeywords_para
CHANGE COLUMN2018-11-30 00:00:00
2018-11-30
MEDIUMINT UNSIGNED NULL DEFAULT NULL
成功执行SQL: ALTER TABLEkeywords_para
CHANGE COLUMN2018-12-31 00:00:00
2018-12-31
MEDIUMINT UNSIGNED NULL DEFAULT NULL
成功执行SQL: ALTER TABLEkeywords_para
CHANGE COLUMN2019-01-31 00:00:00
2019-01-31
MEDIUMINT UNSIGNED NULL DEFAULT NULL
执行SQL错误: ALTER TABLEkeywords_para
CHANGE COLUMN2021-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 TABLEkeywords_para
CHANGE COLUMN2021-03-13 00:00:00
2021-03-13
MEDIUMINT UNSIGNED NULL DEFAULT NULL

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