200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 在Python里通过Pandas和pymysql库批量修改MySQL数据库的字段名称和字段类型

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

时间:2024-07-26 09:16:28

相关推荐

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

在Python做一个关键词排名处理程序的时候,使用Pandas将处理好的数据以pd.to_sql的方法写入MYSQL数据库,带有日期的字段名自动加了时分秒这样的"00:00:00"字符,比如原来列名称为-02-29,pandas处理并导入数据库后,字段名变为了-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.connectionsimport pandas as pddef connect_mysql(): #连接数据库#下面数据库连接信息是瞎编的conn = pymysql.connect(host='110.110.119.112', user='coolyl',passwd='fakeg@',db='testdb',port=3306,charset='utf8')print('数据库连接成功')return connif __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_paraCHANGE COLUMN-11-30 00:00:00-11-30MEDIUMINT UNSIGNED NULL DEFAULT NULL

成功执行SQL: ALTER TABLEkeywords_paraCHANGE COLUMN-12-31 00:00:00-12-31MEDIUMINT UNSIGNED NULL DEFAULT NULL

成功执行SQL: ALTER TABLEkeywords_paraCHANGE COLUMN-01-31 00:00:00-01-31MEDIUMINT UNSIGNED NULL DEFAULT NULL

执行SQL错误: ALTER TABLEkeywords_paraCHANGE COLUMN-03-06 00:00:00-03-06MEDIUMINT UNSIGNED NULL DEFAULT NULL

错误信息:(1054, “Unknown column ‘-03-06 00:00:00’ in ‘keywords_para’”)

成功执行SQL: ALTER TABLEkeywords_paraCHANGE COLUMN-03-13 00:00:00-03-13MEDIUMINT UNSIGNED NULL DEFAULT NULL

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。