这篇文章上次修改于 1136 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
平时刷推和各种图片网站收集了大量图片,舍不得删除全存进了硬盘,大概已经达到了46000多张,以前不多的时候还可以用Nginx做索引,多了加载会非常慢,只能换一种方法来查看这些图片了。
- 将这些图片归档入库,数据库暂时选定MySQL5.7,图片数量巨大,一条一条INSERT肯定不现实,故需要写点代码来实现
首先先创建数据库
CREATE DATABASE `images` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
创建表
CREATE TABLE `images`.`img_images` ( `id` varchar(32) NOT NULL, `name` varchar(255) NOT NULL, `date` varchar(50) NULL, `tag` varchar(255) NULL, PRIMARY KEY (`id`) );
- id作为主键,存储图片名称的MD5值,同一目录下文件名称不存在同名故MD5也不会重复
- name存储文件名称
- date存储图片创建(存入硬盘)的日期
- 以上操作完成后检查数据库和数据表是否创建成功
使用Python,上代码(main.py)
import pymysql import json import os import hashlib import time from datetime import datetime def findAllFile(base): for root, ds, fs in os.walk(base): for f in fs: yield f def main(): with open('config.json', 'r') as f: data = json.load(f) address = data['address'] port = data['port'] user = data['mysql-user'] passwd = data['mysql-pass'] database = data['database'] base = data['local'] db = pymysql.connect(host=address, user=user, password=passwd, database=database, charset='utf8mb4') cursor = db.cursor() for i in findAllFile(base): filedatetime = time.ctime(os.path.getctime(base + "/" + i)) filedatetimes = datetime.strptime(filedatetime, '%a %b %d %H:%M:%S %Y') filetime = filedatetimes.strftime("%Y-%d-%m %H:%M:%S") hl = hashlib.md5() hl.update(i.encode(encoding='utf-8')) id_hl = hl.hexdigest() id = str(id_hl) sql = 'INSERT INTO img_images(id, name, date) VALUES ("%s", "%s", "%s") ON duplicate KEY UPDATE id = id ' % ( id, i, filetime) cursor.execute(sql) db.commit() print(i) db.close() if __name__ == '__main__': main()
此外还需要一个配置文件(config.json),与mian.py在同一目录
{ "local": "J:\\images", "address": "localhost", "port": 3306, "mysql-user": "root", "mysql-pass": "root", "database": "images", "pic-url": "http://localhost:81/" }
- local:图片路径
- address:数据库IP地址
- port:数据库端口
- mysql-user:数据库用户名
- mysql-pass:数据库密码
- database:数据库名
没有评论