【Postgres_Python】使用python脚本批量导出PG数据库

发布于:2024-12-06 ⋅ 阅读:(90) ⋅ 点赞:(0)

示例代码说明:
有多个数据库需要导出为.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 文件下文件示例


网站公告

今日签到

点亮在社区的每一天
去签到