You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将PDF文件保存至SQLite数据库?求转二进制函数示例

使用Python将PDF文件存入SQLite数据库

SQLite支持BLOB类型字段存储二进制数据,我们可以将PDF文件读取为二进制流后存入该类型字段,以下是完整的实现示例:

1. 创建存储PDF的数据库表

首先需要创建一个包含BLOB字段的表,用于存储PDF的文件名和二进制数据:

import sqlite3

def create_pdf_table(db_name):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS pdf_files (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            filename TEXT NOT NULL,
            pdf_data BLOB NOT NULL
        )
    ''')
    conn.commit()
    conn.close()

2. 读取PDF并写入数据库的函数

该函数负责读取本地PDF文件,转换为二进制格式后插入SQLite数据库:

def save_pdf_to_sqlite(pdf_path, db_name):
    # 以二进制只读模式读取PDF
    with open(pdf_path, 'rb') as pdf_file:
        pdf_binary = pdf_file.read()
    
    # 提取文件名
    filename = pdf_path.split('/')[-1]
    
    # 插入数据库
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    cursor.execute('''
        INSERT INTO pdf_files (filename, pdf_data)
        VALUES (?, ?)
    ''', (filename, pdf_binary))
    conn.commit()
    conn.close()
    print(f"{filename} 已成功存入数据库")

3. 从数据库读取PDF并导出的函数

用于验证数据是否正确存入,可将数据库中的二进制数据还原为PDF文件:

def retrieve_pdf_from_sqlite(pdf_id, save_dir, db_name):
    conn = sqlite3.connect(db_name)
    cursor = conn.cursor()
    cursor.execute('SELECT filename, pdf_data FROM pdf_files WHERE id = ?', (pdf_id,))
    result = cursor.fetchone()
    
    if result:
        filename, pdf_binary = result
        save_path = f"{save_dir}/{filename}"
        with open(save_path, 'wb') as output_file:
            output_file.write(pdf_binary)
        print(f"PDF已导出至: {save_path}")
    else:
        print(f"未找到ID为 {pdf_id} 的PDF记录")
    
    conn.close()

示例用法

if __name__ == "__main__":
    DB_NAME = "pdf_storage.db"
    # 初始化数据表
    create_pdf_table(DB_NAME)
    # 存入本地PDF文件
    save_pdf_to_sqlite("test.pdf", DB_NAME)
    # 读取并导出PDF(假设ID为1)
    retrieve_pdf_from_sqlite(1, "./exported_pdfs", DB_NAME)

注意事项

  • 如果PDF文件体积过大(如超过1GB),不建议直接存入数据库,更优方案是将文件存储在文件系统,仅在数据库中保存文件路径。
  • 操作数据库时,推荐使用with语句自动管理连接,避免因忘记关闭连接导致资源泄漏,示例如下:
with sqlite3.connect(DB_NAME) as conn:
    cursor = conn.cursor()
    # 执行SQL操作

内容的提问来源于stack exchange,提问作者Diego Marin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:06:17