这篇文章上次修改于 601 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
平时刷推和各种图片网站收集了大量图片,舍不得删除全存进了硬盘,大概已经达到了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:数据库名
没有评论