当前位置: 首页 > news >正文

Python中使用sqlite3模块和panel完成SQLite数据库中PDF的写入和读取

常规笔记软件在管理非文本文件时存在较大局限。尽管Notion等工具能便捷管理PDF等文件,但在批量处理方面仍有不足。

采用数据库系统管理笔记内容具有一定优势,但MySQL和PostgreSQL等数据库需要复杂的安装配置流程,显得过于笨重。相比之下,SQLite作为轻量级数据库引擎,具有自包含、无服务器、零配置和事务支持等特性。作为全球应用最广泛的SQL引擎之一,SQLite不受版权限制,可轻松实现本地数据库创建。配合云盘同步,还能实现跨设备操作,是个人文件管理的理想选择。

SQLite

SQL语法的内容参考下面内容

SQLite教程(菜鸟教程)

DataSpell

建议使用JetBrains的DataSpell软件进行数据库操作,该软件不仅支持数据库连接,还提供了便捷的Jupyter Notebook和Python脚本编写功能。此外,PyCharm也是不错的选择,同样具备数据库连接能力。

panel

panel 是一个用于构建交互式 Web 应用和仪表板的 Python 库,由 HoloViz 项目开发。它基于 Bokeh 构建,可以轻松地将数据、图表、小部件(widgets)等组合成美观且响应式的 Web 界面,适用于 Jupyter Notebook、独立服务器或嵌入到其他 Web 应用中。使用panel可以很方便的创建Python的网页端应用,快速实现可视化。

https://panel.holoviz.org/

代码实现

设置路径,创建或连接数据库:

folder_path = r"your_folder_path"# 你想读取或者创建(读取不存在的数据库时会自动创建)的数据库的文件夹
import sqlite3,os #使用os模块方便路径的操作
conn = sqlite3.connect(os.path.join(folder_path, "your_database.db")) #your_database可以使用自己想要的名称
cur = conn.cursor()

在数据库中创建表格:

cur.execute("""
CREATE TABLE IF NOT EXISTS Writings (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
illustration TEXT NOT NULL,
writing BLOB NOT NULL
)
""")

记得需要提交,才能在数据中看到表格:

conn.commit()

在DataSpell或者PyCharm中可以参考下面指引查看数据库:

选择你的SQLite数据库:

点开表,你就可以看到新建的表了!

制定你需要写入的PDF的文件路径以及文件:

downloads = "your_pdf_file_folder"
pdf_file_path = os.path.join(downloads, "your_pdf_file_name.pdf")
with open(pdf_file_path, "rb") as f:data = f.read()
illustration = """
# 这时一个说明
时间:2025年11月8日你可以这样使用markdown的语法书写,并在后面调取相关内容的时候使用markdown渲染,就可以实现类似笔记的效果。
"""

写入说明以及PDF的二进制数据:

cur.execute("""
INSERT INTO Writings (illustration, writing) VALUES (?, ?)
""",(illustration,data))
conn.commit()
cur.close()
conn.close()

接下来介绍数据的读取。想要将PDF读取出来保存在指定文件夹,可以利用如下代码实现:

cur.execute("""
SELECT writing FROM Writings WHERE id = 1
""")
pdf = cur.fetchone()
with open(os.path.join(folder_path, "you_subfolder", "your_pdf_name.pdf"), "wb") as f:f.write(pdf[0])

可以去对应文件夹检查文件是否存在,或者用os模块查看:

os.listdir(os.path.join(folder_path, "your_subfolder"))

接下来使用panel实现数据库存储的PDF的网页查看:

import panel as pn
import base64pn.extension(sizing_mode="stretch_width")# 获取 PDF 二进制
pdf_bytes = pdf[0] #这里和上面写入文件的是一致的,都是使用从数据库中得到的二进制数据。# 转为 Base64
b64_pdf = base64.b64encode(pdf_bytes).decode("utf-8")
pdf_data_url = f"data:application/pdf;base64,{b64_pdf}"# 构造 HTML 内容(使用 iframe 嵌入)
html_content = f"""
<iframe src="{pdf_data_url}"width="100%"height="800px"style="border: none;">
</iframe>
"""# 使用 Panel 显示
pdf_pane = pn.pane.HTML(html_content, sizing_mode="stretch_both")# 构建应用
app = pn.Column(pn.pane.Markdown("## 数据库中的 PDF 预览"),pdf_pane,sizing_mode="stretch_both"
)# 启动
if __name__ == "__main__":app.show()  # 或 pn.serve(app, port=5006)

效果:

http://www.dtcms.com/a/589113.html

相关文章:

  • 佛山网站建设网络公司上海网站seo诊断
  • 操作系统面试题学习
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用
  • .NET Core 如何使用 Quartz?
  • excel下拉选项设置
  • 深入解析:利用EBS直接API实现增量快照与精细化数据管理(AWS)
  • 专门做石材地花设计的网站有哪些网站是免费学做网页的
  • [Godot] Google Play审核反馈:如何应对“您的游戏需要进行更多测试才能发布正式版”?
  • Rust 练习册 :深入探索可变长度数量编码
  • dify二次开发部署服务器
  • webrtc降噪-NoiseEstimator类源码分析与算法原理
  • 4.3 Boost 库工具类 optional 的使用
  • 帮人做网站要怎么赚钱吗吉林平安建设网站
  • 文广网站建设sq网站推广
  • Nop平台拆分出核心部分nop-kernel
  • 结构型设计模式1
  • 普中51单片机学习笔记-中断
  • 二十六、STM32的ADC(DMA+ADC)
  • 网站开发的著作权和版权网站品牌推广
  • 【Docker】docker compose
  • 4.1.8 【2022 统考真题】
  • 深圳网站设计官网番禺人才网上
  • Tailwind CSS的Flex布局
  • 深入解析 LeetCode 1:两数之和
  • 重庆网站制作福州嘉兴网络科技有限公司
  • OpenCV(二十二):图像的翻转与旋转
  • 权限维持:操作系统后门技术分析与防护
  • 网闸与防火墙:构建纵深防御的“门卫”与“断桥”
  • 室内设计找工作网站wordpress app源码
  • 河北seo网站优化公司光辉网站建设