大家好,我叫徐锦桐,个人博客地址为www.xujintong.com,github地址为https://github.com/xjintong。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。
自己写一个了python脚本用于将PicoShare的sqlite数据库中下载图片。
这个放出PicoShare的数据库结构。
这里entries是图片的信息(文件名、类型等等),entries_data是图片的二进制也就是实际图片的数据。downloads就是访问图片的信息。entries
和entries_data
通过id连接在一起。
下面这个是将sqlite中的图片保存到当前目录的image文件夹中,将该程序与store.db
放到一个根目录。
import sqlite3
import os
# 连接到SQLite数据库
conn = sqlite3.connect('store.db')
cursor = conn.cursor()
# 执行查询以检索图像数据
cursor.execute("SELECT e.id, e.filename, e.content_type, ed.id, ed.chunk FROM entries e JOIN entries_data ed ON e.id = ed.id WHERE e.content_type LIKE 'image/%' ORDER BY e.id")
# 创建一个名为 "image" 的文件夹,如果它不存在
if not os.path.exists("image"):
os.mkdir("image")
image_data = b''
for row in cursor.fetchall():
entry_id, filename, content_type, data_id, chunk = row
# 合并块数据
image_data += chunk
# 获取下一行数据
next_row = cursor.fetchone()
# 如果下一行数据不存在或者与当前行的 entry_id 不同,表示下一个图像
if not next_row or entry_id != next_row[0]:
# 使用实际存储的文件名作为构建的文件名
constructed_filename = filename
# 将数据保存为图像文件
image_filename = os.path.join("image", constructed_filename)
with open(image_filename, 'wb') as file:
file.write(image_data)
# 重置图像数据
image_data = b''
conn.close()