在MySQL数据库中,表和列名可以使用驼峰命名法或下划线命名法,不过在一个项目中,有时会需要统一使用一种方式,这时我们就需要批量修改数据库中的表和列名了。
以将驼峰命名法修改为下划线命名法为例:
-- 修改表名
RENAME TABLE `tableName` TO `table_name`;
-- 修改列名
ALTER TABLE `tableName` CHANGE COLUMN `columnName` `column_name` 数据类型;
如果表和列名比较多,手动修改也是很费时费力的,可以考虑使用脚本批量修改。
以下是一个简单的Python脚本示例:
import pymysql
def camel_to_underline(camel_format):
'''
驼峰命名格式转下划线命名格式
'''
underline_format = ''
if isinstance(camel_format, str):
for _s_ in camel_format:
underline_format += _s_ if _s_.islower() else '_' + _s_.lower()
return underline_format
def underline_to_camel(underline_format):
'''
将下划线命名格式转为驼峰命名格式
'''
camel_format = ''
if isinstance(underline_format, str):
for _s_ in underline_format.split('_'):
camel_format += _s_.capitalize()
return camel_format
# 数据库连接信息
config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'password',
'db': 'database_name',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
# 连接数据库
conn = pymysql.connect(**config)
# 获取表和列名
sql = "SELECT `table_name`, `column_name` FROM `information_schema`.`columns` WHERE `table_schema`='{}';".format(config['db'])
cur = conn.cursor()
cur.execute(sql)
rows = cur.fetchall()
cur.close()
# 修改表和列名
for row in rows:
old_table_name = row['table_name']
old_column_name = row['column_name']
new_table_name = camel_to_underline(old_table_name)
new_column_name = camel_to_underline(old_column_name)
if old_table_name != new_table_name:
sql = "RENAME TABLE `{}` TO `{}`;".format(old_table_name, new_table_name)
cur = conn.cursor()
cur.execute(sql)
cur.close()
if old_column_name != new_column_name:
sql = "ALTER TABLE `{}` CHANGE COLUMN `{}` `{}` {};".format(new_table_name, old_column_name, new_column_name, '数据类型')
cur = conn.cursor()
cur.execute(sql)
cur.close()
conn.close()
需要注意的是,这个脚本只是一个示例,实际使用时应根据需要进行调整。另外,在使用脚本批量修改表和列名时,要确保备份好原数据库,避免数据丢失。