python 执行mysql文件

MySQL 5.7 之前的版本在某些方面对存储过程的支持可能有限,通过 Python 脚本调用 SQL 文件是一种有效的方法来自动化数据库任务和提高运维效率。具体操作如下:

# python 执行sql脚本
def execute_sql_script(mysql_params, script_name):
    # 使用 with 语句自动管理连接和游标的打开与关闭
    try:
        # 连接到数据库
        with pymysql.connect(host=mysql_params.get('ip'),
                             user=mysql_params.get('username'),
                             port=mysql_params.get('port'),
                             password=mysql_params.get('passwd'),
                             database=mysql_params.get('database'),
                             cursorclass=pymysql.cursors.DictCursor) as connection:

            with connection.cursor() as cursor:
                # 读取 SQL 脚本文件
                with open(script_name, 'r', encoding='utf-8') as file:
                    sql_script = file.read()

                    # 如果 SQL 脚本包含多条语句,可以使用 cursor.executemany(),但通常对于脚本文件,需要分割语句
                # 这里我们假设脚本中的语句以分号结束(这可能需要额外的逻辑来正确处理包含分号但不应分割的情况)
                statements = sql_script.split(';')
                for statement in statements:
                    stripped = statement.strip()
                    if stripped:  # 忽略空语句
                        try:
                            cursor.execute(stripped)
                            connection.commit()  # 如果需要,提交更改
                            print(f"成功执行 SQL ")  # 截断输出以避免过长
                        except pymysql.Error as e:
                            print(f"执行 SQL 语句时出错: {stripped[:100]}... 错误信息: {e}")
    except Exception as e:
        print(f"执行脚本 {script_name} 时发生错误: {e}")

调用方式如下:

if __name__=="__main__":
    import datetime
    from dateutil.relativedelta import relativedelta
    now_time = datetime.datetime.now()
    ## 数据库链接信息
    mysql_params_read =  {'ip' : ip,
                          'port': 端口,
                          'username':用户名,
                          'passwd':密码,
                          'charset':'utf8',
                          'database': 数据库
                          }  
        execute_sql_script(mysql_params_read, '路径/文件名.sql')

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值