场景:历史数据存在部分为二进制数组格式存在数据库中,需将历史数据转为图片文件,改为路径映射访问
解决思路:1.代码转换成图片格式存在服务器本地目录,完成后再使用linux sync命令
scp -r /home/sourceFilePath/* username@remote:/home/file/
迁移到远程服务器图片文件夹
实现步骤:编写python转换脚本(python更简便,java也能实现),然后再源服务器创建对应镜像运行转换脚本,脚本代码末尾,下列步骤主要为服务器容器运行python脚本步骤说明
1.拉取python运行环境容器
2.运行python环境镜像(需设置为永不退出)
设置容器运行不挂起
docker run -it -d python:3.9.4 /bin/bash
3.将主机python脚本拷贝到容器内
docker cp 本地文件路径 容器ID/容器NAME:容器内路径
4.进入容器运行脚本
docker exec -it 容器ID/容器NAME bash
5.运行脚本
自定义python模块引用依赖包构建:
1. 执行`pip uninstall 代码包模块名称` # 卸载当前工具包
2. pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装模块需要的公共包
3. 进入`工具包`文件夹,执行 python setup.py bdist_wheel
4. 执行 python setup.py install
安装脚本公共依赖包:
1. `pipreqs ./ --force --encoding=utf-8` #获取当前目录下项目包依赖并强制更新requirement.txt文件
2. `pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple` #根据requirement.txt文件更新加载依赖
可能缺少的相关命令:
pip install pipreqs # pipreqs: command not found
脚本运行:
python test.py > output.log #日志打印输出到output.log
python转换代码:
import mysql.connector
import os
# 连接数据库
cnx = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name')
# 获取数据库游标
cursor = cnx.cursor()
# 查询图片数据
query = "SELECT image_data FROM images_table"
cursor.execute(query)
# 遍历结果集
for (image_data,) in cursor:
# 创建本地文件路径
file_path = "/home/file/image_" + str(cursor.rowcount) + ".jpg"
# 将二进制图片数据写入本地文件
with open(file_path, 'wb') as file:
file.write(image_data)
# 关闭游标和数据库连接
cursor.close()
cnx.close()