示例代码说明:
有多个数据库需要导出为.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'] = password try: # 构建 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_dump finally: # 清除环境变量以防止密码泄露(虽然在这个脚本的上下文中可能不是必需的,因为脚本结束后环境变量会自动消失) del os.environ['PGPASSWORD'] D:/HQ/chongqing_20241112 文件下文件示例