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

127 阅读4分钟

1.引入库

代码如下(示例):

import psycopg2  # 导入psycopg2驱动程序

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"]
        )

执行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

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]

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

保存为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

保存为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


总结

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

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

了解详情:docs.qq.com/doc/DSnl3ZG…