python读取SQLite表个并生成pdf文件

news2025/6/10 11:50:31

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。

# 导入所需库
import sqlite3                  # 用于操作SQLite数据库
import random                   # 用于生成随机数据
from reportlab.lib.pagesizes import landscape, letter  # 报表实验室库:页面尺寸(横向letter纸)
from reportlab.platypus import SimpleDocTemplate, LongTable  # 报表实验室组件:文档模板、长表格
from reportlab.lib import colors  # 报表实验室颜色库
from reportlab.lib.styles import getSampleStyleSheet  # 报表实验室预定义样式

# ==================== 步骤1:创建数据库并生成测试数据 ====================
# 连接到SQLite数据库(如果不存在则自动创建)
conn = sqlite3.connect('mydatabase.db')
# 创建数据库游标对象,用于执行SQL语句
c = conn.cursor()

# 动态生成50个列名(col1到col50)
columns = [f'col{i+1}' for i in range(50)]
# 构建创建表的SQL语句:50个REAL类型(浮点数)的列
create_table_sql = f'CREATE TABLE IF NOT EXISTS tab1 ({", ".join([f"{col} REAL" for col in columns])})'
# 执行SQL语句创建表(IF NOT EXISTS避免重复创建报错)
c.execute(create_table_sql)

# 生成500行随机数据(每行50个0-100之间的浮点数)
data = []
for _ in range(500):  # 循环500次生成500行
    # 每行包含50个随机浮点数(范围0-100)
    row = [random.uniform(0, 100) for _ in range(50)]
    data.append(row)

# 使用executemany批量插入数据(比循环execute更高效)
# SQL语句中的?是占位符,对应data中的每个元素
c.executemany(f'INSERT INTO tab1 VALUES ({", ".join(["?"]*50)})', data)
# 提交事务(将缓存中的数据写入数据库)
conn.commit()
# 关闭数据库连接
conn.close()

# ==================== 步骤2:从数据库读取数据 ====================
# 重新连接数据库(因为之前已关闭)
conn = sqlite3.connect('mydatabase.db')
c = conn.cursor()
# 执行查询语句获取所有数据
c.execute('SELECT * FROM tab1')
# 获取所有查询结果(返回元组的列表,每个元组代表一行数据)
rows = c.fetchall()
# 获取表的列名(通过cursor.description属性,每个元素的第一个值是列名)
columns = [desc[0] for desc in c.description]
# 关闭数据库连接
conn.close()

# ==================== 步骤3:生成PDF报表 ====================
# 创建PDF文档模板(横向letter纸尺寸,文件名为tab1_data.pdf)
doc = SimpleDocTemplate("tab1_data.pdf", pagesize=landscape(letter))
# 获取预定义的文本样式(用于表格内容)
styles = getSampleStyleSheet()

# 格式化数据为字符串(保留2位小数,提高可读性)
formatted_rows = []
for row in rows:
    # 将每个单元格的浮点数格式化为"%.2f"形式的字符串
    formatted_row = [f"{cell:.2f}" for cell in row]
    formatted_rows.append(formatted_row)

# 在表格顶部插入表头行(使用原始列名)
formatted_rows.insert(0, columns)

# 创建长表格(支持跨页显示)
# colWidths参数设置每列宽度(这里每列固定80点,总宽度50 * 80=4000点,适合横向纸)
table = LongTable(formatted_rows, colWidths=[80] * 50)

# 设置表格样式(通过元组列表定义不同区域的样式)
table.setStyle([
    # 表头区域样式(第0行,所有列)
    ('BACKGROUND', (0,0), (-1,0), colors.grey),          # 背景色(灰色)
    ('TEXTCOLOR', (0,0), (-1,0), colors.whitesmoke),     # 文字颜色(白色)
    ('ALIGN', (0,0), (-1,-1), 'CENTER'),                 # 所有单元格文字居中
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),       # 表头字体(加粗)
    ('BOTTOMPADDING', (0,0), (-1,0), 12),                # 表头底部内边距(12点)
    
    # 数据行区域样式(第1行到最后一行,所有列)
    ('BACKGROUND', (0,1), (-1,-1), colors.beige),        # 背景色(米色)
    
    # 全局网格线样式(所有单元格)
    ('GRID', (0,0), (-1,-1), 1, colors.black),           # 网格线宽度1点,黑色
    
    # 全局垂直对齐方式(所有单元格顶部对齐)
    ('VALIGN', (0,0), (-1,-1), 'TOP')
])

# 将表格添加到PDF文档并构建输出
doc.build([table])

# 输出完成提示
print("PDF已成功生成: tab1_data.pdf")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2406582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积&#xff0c;这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能&#xff0c;常用的API…

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…

云原生时代的系统设计:架构转型的战略支点

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生的崛起&#xff1a;技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深&#xff0c;传统的 I…

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…

英国云服务器上安装宝塔面板(BT Panel)

在英国云服务器上安装宝塔面板&#xff08;BT Panel&#xff09; 是完全可行的&#xff0c;尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎&#xff0c;虽然官方主要面向中国大陆…

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df

【Qt】控件 QWidget

控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态&#xff1a;enabled几何&#xff1a;geometrywindows frame 窗口框架的影响 窗口标题&#xff1a;windowTitle窗口图标&#xff1a;windowIconqrc 机制 窗口不透明度&#xff1a;windowOpacity光标&#xff1a;cursor…