示例代码说明:
有多个数据库需要导出为.sql格式,数据库名与sql文件名一致,读取的数据库名需要根据文件名进行拼接
import psycopg2 import subprocess import os folder_path = 'D:/HQ/chongqing_20241112' # 获取文件夹下所有文件和文件夹的名称 filenames = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] # 遍历文件列表并以.提取名称 for filename in filenames:name_parts = filename.split('.')if name_parts:# 提取第一部分作为提取的名称extracted_name = name_parts[0]# 定义其他数据库连接信息database_name = 'hqdb_'+extracted_name + '_20241112'username = 'postgres'password = 'postgres'host = 'localhost'port = '5435'output_file = 'D:/HQ/chongqingsql/' + database_name + '.sql'# 由于直接在命令行中传递密码不安全,我们可以使用 subprocess 的 input 参数# 但 pg_dump 不支持直接从 input 读取密码,因此我们需要通过环境变量传递# 请注意,这种方法在多线程或多进程环境中可能不安全os.environ['PGPASSWORD'] = passwordtry:# 构建 pg_dump 命令commandsql = f'C:/Program Files/PostgreSQL/10/bin/pg_dump -U {username} -h {host} -p {port} -F p -f {output_file} {database_name}'# 执行命令subprocess.run(commandsql, check=True)print(f"Database {database_name} on host {host} and port {port} successfully exported to {output_file}")# 注意:这里我们没有在输出中显示密码,但密码已经通过环境变量传递给了 pg_dumpfinally:# 清除环境变量以防止密码泄露(虽然在这个脚本的上下文中可能不是必需的,因为脚本结束后环境变量会自动消失)del os.environ['PGPASSWORD']D:/HQ/chongqing_20241112 文件下文件示例