python读取数据库PostgreSQL导出excel表格

2023-11-09

1.现有数据和目标成果

1.1现有数据

源数据保存在数据库中,使用的数据库管理软件是PostgreSQL。

本质上来说,数据存储在数据库中是以记录存储在表上实现的,在excel表格中也是以记录的形式存在。所以数据库中表的列(字段)可以与excel表的列一一对应。形式大致如下:

1.2目标成果

导出成果是excel表格,文件后缀名是.xlsx。形式大致如下:

 

2.代码过程

2.1连接数据库获取数据

要获取数据库数据必须要先连接数据库,连接PostgreSQL的方法网上很多参考,也可以参考我源代码的方式。

执行SQL(结构化查询语言),获取数据库要导出数据的表的字段数,以及要导出的记录。

一个简单的示例如下:

'''连接数据获取数据,WHU_Fan,0704'''
def getData():
    '''databese是要连接数据库的名字,user是访问用户(创建数据库时设置),password是创建数据库的密码,host填localhost,端口为安装数据库时设置的端口'''
    '''这里是PostgreSQL的连接方法,MySQL也类似,端口可能不一样'''
    conn = psycopg2.connect(database='test2',user='postgres',password='admin',host='localhost',port='5432')
    cur = conn.cursor()
    
    ''''设置自己的sql语句'''
    '''例如'''
    tableName = 'outcome'
    commandFindColumn = "select COLUMN_NAME from information_schema.COLUMNS where table_name='%s' "% (tableName)
    
    '''执行SQL语句获取数据'''
    cur.execute(commandFindColumn)
    columnRows = cur.fetchall()
    
    '''SQL语句:导出outcome表的全部'''
    commandFindRecord = "select * from %s order by 相似度  desc"%(tableName)
    
    '''执行SQL语句获取数据'''
    cur.execute(commandFindRecord)
    recordRows = cur.fetchall()
    
    '''提交确认'''
    conn.commit()
    
    '''关闭连接'''
    cur.close()
    conn.close()
    
    '''返回数据'''
    return columnRows,recordRows

 

2.2解析数据

获取的字段变量columnRows,是一个list,顺序的包含数据库对应表的每一个字段。

获取的记录信息recordRows,也是一个list,包含所有满足条件的记录。

 

2.3写到excel中

excel中写入数据相当于给键值对dic赋值一样,sheet[loc:value]

1.先创建一个excel文件,然后创建一个sheet(excel的一页,一个excel可能包含多页)。

2.创建字段行,把表的字段先写出来。第一个字段对应A1,第二个是B1,依次类推,当字段数超过26时,添加AA,AB,AC,…

3.把记录写入表中,每条记录对应A2,B2,C2,…

4.保存表格。

示例代码如下:

'''写到excel,WHU_Fan,0704'''
def writeDataToExcel(name):
    '''调用连接数据库函数'''
    columnRows,recordRows = getData()
    
    '''创建excel文件wb'''
    wb = openpyxl.Workbook()
    
    '''创建sheet,以传入的name为名字,默认索引0'''
    wb.create_sheet(name, 0)
    
    '''获取活动的sheet作为活动页面'''
    sheet = wb.get_sheet_by_name(name)
    
    '''获取当前日期,得到一个datetime对象如:(2019, 7, 2, 23, 12, 23, 424000)'''
    '''#将获取到的datetime对象仅取日期如:2019-7-2'''
    '''作为excel最后命名用'''
    today = datetime.today() 
    today_date = datetime.date(today) 
    
    '''创建每列的字母集,当列数超过26时,添加AA,AB,AC...'''
    myAlphbet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    
    '''把每一个字段写入excel中,excel写入的顺序是A1,B1,C1,…'''
    '''excel中写入数据相当于给键值对dic赋值一样,sheet[loc:value]'''
    for i in range(len(columnRows)):
        loc = myAlphbet[i] + str(1)
        sheet[loc] = columnRows[i][0]

    '''针对每条记录,写入表中,顺序是A2,B2,C2,…,A3,B3,C3,…,这解释为什么是 i+2'''
    for i in range(len(recordRows)):
        for j in range(len(recordRows[i])):
            loc = myAlphbet[j] + str(i + 2)
            sheet[loc] = recordRows[i][j]
    
    '''保存excel文件,默认文件位置是当前文件夹'''
    '''以传递的name+当前日期作为excel名称保存'''
    wb.save(name+ '_' + str(today_date) + '.xlsx')


3.源代码

# encoding:utf-8
'''written by WHU_Fan,0704'''
import psycopg2
import openpyxl
from datetime import datetime

def getData():
    conn = psycopg2.connect(database='test2',user='postgres',password='admin',host='localhost',port='5432')
    cur = conn.cursor()
    tableName = 'outcome'
    commandFindColumn = "select COLUMN_NAME from information_schema.COLUMNS where table_name='%s' "%(tableName)
    cur.execute(commandFindColumn)
    columnRows = cur.fetchall()
    '''导出outcome的全部'''
    commandFindRecord = "select * from %s order by 相似度  desc"%(tableName)
    cur.execute(commandFindRecord)
    recordRows = cur.fetchall()
    conn.commit()
    cur.close()
    conn.close()
    return columnRows,recordRows
    
def writeDataToExcel(name):
    columnRows,recordRows = getData()
    
    wb = openpyxl.Workbook()
    wb.create_sheet(name, 0)
    sheet = wb.get_sheet_by_name(name)
    
    today = datetime.today() #获取当前日期,得到一个datetime对象如:(2019, 7, 2, 23, 12, 23, 424000)
    today_date = datetime.date(today) #将获取到的datetime对象仅取日期如:2019-7-2
    
    #当列数超过26时,添加AA,AB,AC...
    myAlphbet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    for i in range(len(columnRows)):
        loc = myAlphbet[i] + str(1)
        sheet[loc] = columnRows[i][0]

    for i in range(len(recordRows)):
        for j in range(len(recordRows[i])):
            loc = myAlphbet[j] + str(i + 2)
            sheet[loc] = recordRows[i][j]

    wb.save(name+ '_' + str(today_date) + '.xlsx') #以传递的name+当前日期作为excel名称保存

if __name__ == '__main__':
    writeDataToExcel("outcome")
    print("succeed")

 

4.成果总结

导出excel本身的过程并不复杂,重要为以下几点:

1.如何给sheet赋值,excel表的loc需要与获取的字段和记录的结构对应起来。

2.如何利用循环实现赋值,详见源代码的两个循环。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python读取数据库PostgreSQL导出excel表格 的相关文章

  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • Python中Decimal类型的澄清

    每个人都知道 或者至少 每个程序员都应该知道 http docs oracle com cd E19957 01 806 3568 ncg goldberg html 即使用float类型可能会导致精度错误 然而 在某些情况下 精确的解决方
  • Python Popen 与 psexec 挂起 - 不良结果

    我对 subprocess Popen 和我认为是管道的问题有疑问 我有以下代码块 从 cli 运行时 100 都不会出现问题 p subprocess Popen psexec serverName get cmd c ver echo
  • 如何在序列化器创建方法中获取 URL Id?

    我有以下网址 url r member P
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • Django 模型在模板中不可迭代

    我试图迭代模型以获取列表中的第一个图像 但它给了我错误 即模型不可迭代 以下是我的模型和模板的代码 我只需要获取与单个产品相关的列表中的第一个图像 模型 py class Product models Model title models
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在Python中按属性获取对象列表中的索引

    我有具有属性 id 的对象列表 我想找到具有特定 id 的对象的索引 我写了这样的东西 index 1 for i in range len my list if my list i id specific id index i break
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f

随机推荐

  • VIM 快捷键(转)

    VIM快捷键 ctags 文件名 做索引 光标移动 四个方向 k h 0 l j ctrl f ctrl b 向下翻页 向上翻页 ctrl d ctrl u 向下半翻页 向上半翻页 移动行尾 0 移动行首 w 移动下一个词 b 移动到上一个
  • 树莓派Raspbian系统安装tesseract-ocr实现OCR

    第一步安装依赖 启动终端依次敲入命令 sudo apt get install g or clang presumably sudo apt get install autoconf automake libtool sudo apt ge
  • 基于matlab的dbn算法实现

    下载deeplearningtoolbox或者本人提交的zip文件包即可直接运行 command window运行以下程序 function test example DBN load mnist uint8 train x double
  • java毕业设计开题报告javaweb敬老院管理系统的设计和实现

    文末获取联系 一 项目介绍 javaweb基于Java的敬老院管理系统的设计和实现 该项目采用技术jsp servlet jdbc tomcat服务器 mysql数据库 项目含有源码 论文 配套开发软件 软件安装教程 项目发布教程 一 选题
  • Vue插槽

    Vue插槽 Vue的组件如何接受模板内容呢 在某些场景中 我们可能想要为子组件传递一些模板片段 让子组件在它们的组件中渲染这些片段 这时我们可以使用vue提供的插槽来实现 例子 父元素提供了一个模板
  • USB基本知识

    USB协议版本有USB1 0 USB1 1 USB2 0 USB3 0等 目前用的比较多的是USB2 0和USB3 0 1 USB2 0总线 USB2 0总线采用4芯的屏蔽线 一对差分线 D D 传输信号 另一对 VBUS 电源线 传输 5
  • Spring全家桶知识概括

    Spring全家桶知识概括 Springmvc与JS 拦截器与过滤器的区别 spring容器 spring MVC容器 web容器的区别 Filter与Servlet路径映射问题 Spring与JUnit SpringBoot测试与Mock
  • QCefView + QWebChannel + Vue 项目开发

    看到标题 你大概能猜到这篇我想讲述的是什么了 对的 将要同大家分享的是一种目前PC软件常见的开发方案 前言 1 桌面应用为什么要使用Vue等框架开发 而不再是Qt UI开发 界面开发我们使用java语言 通过Vue框架快速开发 好处不言而喻
  • 使用html2canvas实现HTML页面的echarts图表转成长图片

    import html2canvas from html2canvas downLoad url var oA document createElement a oA download 设置下载的文件名 默认是 下载 oA href url
  • 字符和字符串(4)——C# 截取字符串:简单易懂,小白教程

    几个经常用到的字符串的截取 string str 123abc456 int i 3 取字符串的前i个字符 str str Substring 0 i or str str Remove i str Length i 去掉字符串的前i个字符
  • web3.js

    安装 别按照官网上面 npm install web3 下载 我已经吃过一次亏了 npm init npm install ethereum web3 js save 指令 web3 isConnected 检查结点的连接是否存在 web3
  • 知识蒸馏研究综述

    知识蒸馏研究综述 论文来源于 知识蒸馏研究综述 文章目录 知识蒸馏研究综述 知识蒸馏的提出 知识蒸馏的作用机制 蒸馏的知识形式 输出特征知识 中间特征知识 知识蒸馏的方法 知识合并 多教师学习 教师助理 跨模态蒸馏 相互蒸馏 终身蒸馏 自蒸
  • XSS闯关——第三关:level3

    第三关 level3 看页面和第二关类似 先用第二关的输入测试 gt 可惜没有成功 毕竟是第三关 在第二关上肯定有所升级 查看当前网页的源代码分析 可以发现我们的输入被后台改成了如下内容 输入的 gt lt 被做了转义处理 变成了 quot
  • 安卓开发课程设计报告

    湖南科技大学计算机科学与工程学院 综合实践能力创新实训 安卓开发课程设计报告 题 目 新 闻 客 户 端 学 号 17050103XX 姓 名 白马 完成时间 2019年12月15日 安卓开发 新闻客户端 1 设计要求 1 1 技术平台要求
  • 宝藏级的开源小程序(APP)商城-CRMEBPC版前台和手机版实测

    公司最近想新上一个项目 用APP对线下门店地推做产品推广 开始我们想找个研发APP公司来做一个简易APP来的 结果打了十来通电话 基本上报价都是在三万到五万之间 而公司又恰恰在起步阶段 所以就考虑放弃了自己开发 目光转向到了微信商城 可看完
  • Python 类内直接定义属性与self.属性名的区别

    class A test value1 value1 self test value3 value3 报错 无法定义 因为self代表的是类对象 def int self self test value2 value2 if name ma
  • GT--记录android app消耗的cpu/内存/流量 /电量

    腾讯GT简介 此apk是一款可以对APP进行测试的软件 可以在任何情况下快速测试手机app的CPU 内存 流量 电量 帧率 流畅度等性能测试 有安卓版本和ios版本 分别下载 1 下载腾讯GT http gt tencent com dow
  • torch 中的detach、numel、retain_graph、repeat、repeat_interleave等参数的用法

    detach 官网解释 实验结论 import torch x torch arange 4 0 x requires grad True 等价于 x torch arange 4 0 requires grad True y x x de
  • Unity EasySave3封装管理类

    20230804 新增 加密处理接口
  • python读取数据库PostgreSQL导出excel表格

    1 现有数据和目标成果 1 1现有数据 源数据保存在数据库中 使用的数据库管理软件是PostgreSQL 本质上来说 数据存储在数据库中是以记录存储在表上实现的 在excel表格中也是以记录的形式存在 所以数据库中表的列 字段 可以与exc