Python MySQL

发布于 更新于

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 "替换完成"