👁
发布于
更新于
AI总结: 本文介绍了一个Python脚本和一个Bash脚本的组合,前者用于查询MySQL数据库中所有包含'url'字段的表,并查找这些字段中包含'xxx.com'的记录,后者则从一个CSV文件中读取数据库表信息,并批量替换指定字段中的内容。Python脚本通过连接到数据库获取表和字段信息,并执行相应的查询,而Bash脚本则负责读取CSV文件并执行更新操作。改进建议包括:在Python脚本中增加对数据库连接错误的处理,在Bash脚本中增加对SQL执行结果的详细日志记录,以及对CSV文件格式的验证,以确保数据的准确性和完整性。
python test.py > test.csv
"""
查询所有表中带url的字段 取值包含xxx.com内容的字段
"""
import pymysql
# MySQL连接配置
DB_HOST = '127.0.0.1' # 数据库主机
DB_USER = 'root' # 数据库用户名
DB_PASSWORD = '123456' # 数据库密码
DB_NAME = 'INFORMATION_SCHEMA' # 数据库名称
# 连接到MySQL数据库
connection = pymysql.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=DB_NAME
)
# 创建游标对象
cursor = connection.cursor()
def get_tables_with_url_fields():
# 查询所有包含'url'字段的表和字段
query = """
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE "%url%";
"""
cursor.execute(query)
return cursor.fetchall()
def search_url_in_table(table_schema, table_name, column_name):
# 查询表中字段包含'xxx.com'的记录
query = f"SELECT * FROM {table_schema}.`{table_name}` WHERE {column_name} LIKE '%xxx.com%' limit 1"
cursor.execute(query)
results = cursor.fetchall()
if results:
print(f"{table_schema},{table_name},{column_name}");
def main():
try:
# 获取所有包含'url'字段的表和字段
tables_and_columns = get_tables_with_url_fields()
# 逐个表和字段查询
for table_schema, table_name, column_name in tables_and_columns:
search_url_in_table(table_schema, table_name, column_name)
except Exception as e:
print(f"发生错误: {e}")
finally:
# 关闭游标和连接
cursor.close()
connection.close()
if __name__ == "__main__":
main()
批量替换
#!/usr/bin/bash
# 设置当前脚本使用的编码
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
# 数据库连接配置
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_USER="root"
DB_PASSWORD="123456"
# 输入文件路径
INPUT_FILE="/root/test.csv"
# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
echo "文件 $INPUT_FILE 不存在。"
exit 1
fi
# 逐行读取文件内容
while IFS=$',' read -r DB_NAME TABLE_NAME COLUMN_NAME; do
# 构建SQL更新语句
SQL="USE $DB_NAME; UPDATE $DB_NAME.$TABLE_NAME SET $COLUMN_NAME = REPLACE($COLUMN_NAME, 'aaa', 'bbb') WHERE $COLUMN_NAME LIKE '%aaa%';"
# 使用mysql客户端执行SQL语句
mysql -u"$DB_USER" -p"$DB_PASSWORD" -h"$DB_HOST" -P"$DB_PORT" -e "$SQL"
if [ $? -eq 0 ]; then
echo "在 $DB_NAME.$TABLE_NAME 的 $COLUMN_NAME 列中替换成功"
else
echo "在 $DB_NAME.$TABLE_NAME 的 $COLUMN_NAME 列中替换失败"
fi
done < "$INPUT_FILE"
echo "替换完成"