当前位置:   article > 正文

python访问pg数据库,并将查询结果保存到文件(txt,word,Excel)_python pg

python pg

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

例如:学习locust时,需要读取数据库的用户信息,涉及多个环境,手动一个环境一个环境数据库查询后复制到文件里太麻烦。


一、安装pg数据库驱动程序

首先,你需要确定你要连接的数据库类型,并安装相应的数据库驱动程序。常见的数据库驱动程序包括psycopg2(PostgreSQL),mysql-connector-python(MySQL),pyodbc(Microsoft SQL Server),cx_Oracle(Oracle)等。你可以使用Python的包管理器(如pip)来安装这些驱动程序。

pip install psycopg2
  • 1

二、使用步骤

1.引入库

代码如下(示例):

import psycopg2  # 导入psycopg2驱动程序
  • 1

2.连接pg数据库,执行操作语句

使用数据库驱动程序提供的函数来建立与数据库的连接。你需要提供数据库的连接参数,例如主机名、端口号、用户名、密码等。
具体的连接参数取决于你要连接的数据库类型
这里我读取的是单独建的一个字典文件config中的配置
连接pg数据库,执行查询代码如下:

def pg_sql(sql):
    result = []
    conn = None
    cur = None
    try:
        # 连接到数据库
        conn = psycopg2.connect(
            host=config.DB["host"],
            port=config.DB["port"],
            database=config.DB["database"],
            user=config.DB["user"],
            password=config.DB["password"]
        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

执行SQL查询:一旦连接成功,你可以使用conn对象来执行SQL查询并获取结果。

        cur = conn.cursor()  # 创建游标
        cur.execute(sql)  # 执行语句
        rows = cur.fetchall()  # 处理查询结果
        for row in rows:
            result.append(row[0])  # 这里的[0]表示只保存了查询出来的第一列数据
    except psycopg2.Error as err:
        print('Error msg: ' + str(err))
    # finally 是一个在 try-except 语句块中的可选部分用于定义无论是否发生异常都会被执行的代码块
    finally:  
        if cur is not None:
            cur.close()  # 关闭游标
        if conn is not None:
            conn.close()  # 关闭数据库连接
    return result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.将查询结果保存到文件中

results的值为sql的查询结果
name的值为config.HT[“name”]

curPath获取当前文件的绝对路径

file 是一个内置变量,表示当前文件的路径。os.path.dirname(file) 可以获取当前文件所在的目录路径,而 os.path.abspath() 则将相对路径转换为绝对路径。

rootPath为获取当前文件所在目录的父级目录路径

os.path.split() 函数将路径分割为目录和文件名,返回一个元组。通过取元组中的第一个元素,即可获取当前文件所在目录的父级目录路径。

curPath = os.path.abspath(os.path.dirname(__file__))  # 此处用绝对路径
rootPath = os.path.split(curPath)[0]
  • 1
  • 2

rootPath为项目根目录
文件保存到项目根目录下的docs文件夹下,名称为***_station.txt

保存为txt文件

def get_result(results, name):
    filename = f"{rootPath}/docs/{name}_station.txt"
    with open(filename, 'w') as file:
        for result in results:
            file.write(str(result) + '\n')
    return results
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

保存为Excel 文件

import openpyxl

def get_result(results, name):
    filename = f"{rootPath}/docs/{name}_station.xlsx"

    # 创建一个新的工作簿
    workbook = openpyxl.Workbook()
    sheet = workbook.active

    # 将结果写入工作表
    for row, result in enumerate(results, start=1):
        sheet.cell(row=row, column=1, value=result)

    # 保存工作簿为 XLSX 文件
    workbook.save(filename)
    
    return results
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

保存为Word 文件

from docx import Document

def get_result(results, name):
    filename = f"{rootPath}/docs/{name}_station.docx"

    # 创建一个新的 Word 文档
    document = Document()

    # 将结果写入文档
    for result in results:
        document.add_paragraph(str(result))

    # 保存文档为 Word 文件
    document.save(filename)

    return results
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

总结

修修改改了一下午,之前改配置需要改两三行,现在单独拎出来,改配置就只要改一行了,要加啥配置信息,在yaml文件里面加就可以了,说起来yaml还真好用的。
conn和cur可能会在赋值前引用,所以提前建立一个None。
之前一直有各种奇怪的报错(报找不到文件路径,No module named ‘base’),网上也没找到原因,试了半天发现是引用字典的方式有问题,换了个方式就可以了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/686382
推荐阅读
相关标签
  

闽ICP备14008679号