Python:Chevereto根据图片信息恢复数据库信息

由于服务器迁移导致自用图床chevereto的数据库丢失(忘记备份是大锅,那段时间忙于考试了),但多处引用了外链不方面自身再次上传,所以根据数据文件补全数据库

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import os
import hashlib
from PIL import Image

def update_info(path,f,root): #查询图片信息,生成SQL语句
image_name=os.path.splitext(f)[0]
image_extension=f.split(".")[-1]
file=open(path,"rb")
image_size=os.path.getsize(path)
im=Image.open(path)
image_width=im.size[0]
image_height=im.size[1]
image_date=path.split("\\")[2]+'-'+path.split("\\")[3]+"-"+path.split("\\")[4]+" 12:00:00"
image_user_id=1
image_uploader_ip="60.211.13.123"
image_md5=hashlib.md5(file.read()).hexdigest()
image_original_filename=f
i_th=os.path.join(root,image_name+".th."+f.split(".")[-1])
i_md=os.path.join(root,image_name+".md."+f.split(".")[-1])
if(os.path.exists(i_th) and os.path.exists(i_md)):
image_chain=7
image_thumb_size=os.path.getsize(i_th)
image_medium_size=os.path.getsize(i_md)
else:
image_chain=5
image_thumb_size=os.path.getsize(i_th)
image_medium_size=0
info="INSERT INTO `chv_images` (`image_id`, `image_name`, `image_extension`, `image_size`, `image_width`, `image_height`, `image_date`, `image_date_gmt`, `image_title`, `image_description`, `image_nsfw`, `image_user_id`, `image_album_id`, `image_uploader_ip`, `image_storage_mode`, `image_storage_id`, `image_md5`, `image_source_md5`, `image_original_filename`, `image_original_exifdata`, `image_views`, `image_category_id`, `image_chain`, `image_thumb_size`, `image_medium_size`, `image_expiration_date_gmt`, `image_likes`, `image_is_animated`) VALUES (NULL, '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{5}', '{6}', NULL, '0', '1', NULL, '60.211.13.123', 'datefolder', NULL, '{7}', NULL, '{8}', NULL, '0', NULL, '{9}', '{10}', '{11}', NULL, '0', '0');".format(image_name,image_extension,image_size,image_width,image_height,image_date,image_name[:99],image_md5,f,image_chain,image_thumb_size,image_medium_size)
return info

#遍历图片储存文件夹,所有SQL语句写入文本
total =0
new_info=open("update_info.txt","w")
for root,dirs,files in os.walk(r"D:\images"):#这里写路径
for f in files:
#print(f)
if f.split(".")[-1] not in ["jpg","png"]:
#print(f.split(".")[-1])
continue
if f.split(".")[-2] in ["th","md"]:
#print(f.split(".")[-2])
continue
#print(root)
str_info=update_info(os.path.join(root,f),f,root)
#print(str_info)
new_info.write(str_info)
new_info.write("\n")
total=total+1
print(total)
#print(f)

说明

  • 可以通过pymysql直接写入数据库,我不想开远程数据库访问权限没有使用
  • 直接通过服务端命令行或者PHPmyadmin上传mysql执行即可
  • total的值很有用,本代码默认图床个人使用,图片所有者为id为1的用户。请在数据库chv_users中的user_image_count和chv_stats中total的stat_images加上total的值,否则仪表台的统计数据有误。
  • 修改数据库chv_stats中total的stat_disk_used为images文件夹实际大小,否则仪表台统计数据有误
  • 上述两条不影响使用,只影响观感
  • 另外由于服务器时间和照片时间不一致,容易存在照片信息时间与上传图片的时间文件夹不同,所以图片时间为按照真实时间填写,均设置为上传当天的中午12点,不影响使用。如果使用真实时间戳,导致与文件夹名对不上,后台图片会显示为空。