如何使用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
相关产品推荐
相关产品推荐

