【问题标题】:Convert jpg images to blob and store it in a .sql file将 jpg 图像转换为 blob 并将其存储在 .sql 文件中
【发布时间】:2019-01-03 23:40:30
【问题描述】:

我将 jpg 图像存储到 mysql 数据库中。

我使用BLOB类型将jpg图片存储在mysql数据库中。

我使用 mysqldump 生成一个 .sql 文件。

我使用 .sql 文件作为备份和恢复数据库。

如何将 jpg 直接转换为 .sql 文件?

我试过这个python代码:

import os

import base64

archivo_destino = ".\\portada_sql\\archivo.sql"

imagen_origen = ".\\libros_nuevos_jpg\\03000\\000.jpg"

archivo = open(archivo_destino, 'w')

imageFile = open(imagen_origen, "rb") 

mi_blob = base64.b64encode(imageFile.read())

archivo.write("INSERT INTO libro_portada VALUES ('"+mi_blob+"');")

archivo.close()

但它不起作用。

是否可以使用存储为 blob usign python 的图像创建一个 sql 文件?

我尽量避免:

  • 上传jpg到服务器
  • 导入jpg到mysql
  • 将mysql导出到.sql文件

我想直接生成.sql文件。

有可能吗?

1。 马格努斯: 我提到了 php,因为我也可以使用 php,如果 php 可以的话。

2。 埃里克: 从上面提到的python代码,我得到:

插入 libro_portada 值('b'/9j/4RivRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAE'');

从 mysqldump 我得到:

插入libro_portada 值('ÿ\؀ÿ\ကJExif\0\0MM\0*\0\0\0\0\0\0\0\0\0\0\0\Z\ 0\0\0\0\0\0\0b');

【问题讨论】:

  • 为什么用 PHP 标记?
  • 您能否详细说明“它不起作用”的含义?您是否遇到任何异常,它会默默地失败吗?请创建一个minimal reproducible example,以便人们更轻松地为您提供帮助。
  • 1. Magnus Eriksson:我正在尝试用 python 来做。但是,它可以用 php 来做吗? 2. 这是一个 mysqldump 结果:当我运行我的代码时,我得到这个:
  • 您可能可以使用大多数语言(取决于您期望的实际结果),因此您需要选择您想要帮助的语言。你越缩小你的问题越好。
  • 一个被忽视的问题:为什么您将图像存储在数据库中,而不是“作为文件系统上的图像”,仅将元数据存储在数据库中?

标签: php python mysql jpeg


【解决方案1】:

我知道在 mysql 中存储文件很疯狂,但我在这个项目中只作为猴子代码工作。

最后我使用了 MYSQL LOAD_FILE() 函数

我将我的 jpg 文件上传到服务器并使用以下命令导入 mysql:MYSQL LOAD_FILE()

有成千上万的文件要上传,所以我创建了一个 python 脚本来创建 sql 代码并将其存储在 sql 文件中。

# coding=utf-8
#! python3
# crea el comando mysql para importar los archivos .jpg a mysql
# para cada libro crea un archivo sql
# para cada archivo crea un comando insert
# INSERT INTO  archivo  SET libro_fk =,orden =,nombre =,archivo =,mime_type ="image/jpeg",numero_pagina =,libro_completo =0;

import os


libros = [
"K0LEM",
"K3J2S"
]


ids = [

"2390",
"2399"
]




total = len(libros)

#para cada libro...
for i in range(total):
    #crearemos un archivo sql para cada libro
    archivo_destino = ".\\archivos_sql\\" + ids[i] + ".sql"
    archivo = open(archivo_destino, 'w')
    carpeta_a_explorar = ".\\libros_nuevos_jpg\\" + libros[i] + "\\"
    archivos = os.listdir(carpeta_a_explorar)
    #crear una lista con los archivos
    archivos.sort()
    #ordena la lista
    cuantos_archivos = len(archivos)
    #cuantos archivos
    #
    # para cada archivo encontrado se creara un insert...
    #
    for jpg_file in range(cuantos_archivos):
        archivo.write("INSERT INTO  archivo  SET libro_fk ="+ ids[i] +",orden = "+str(jpg_file)+",nombre ='"+ archivos[jpg_file] +"',archivo = LOAD_FILE('/var/lib/mysql-files/"+ libros[i] +"/"+ archivos[jpg_file] +"'),mime_type ='image/jpeg',numero_pagina = "+str(jpg_file)+",libro_completo =0;")
        archivo.write("\n")
    archivo.close()

结果是一个 sql 文件,每行使用 MYSQL LOAD_FILE() 插入命令

INSERT INTO  archivo  SET libro_fk =2390,orden = 0,nombre ='000.jpg',archivo = LOAD_FILE('/var/lib/mysql-files/K0LEM/000.jpg'),mime_type ='image/jpeg',numero_pagina = 0,libro_completo =0;
INSERT INTO  archivo  SET libro_fk =2390,orden = 1,nombre ='001.jpg',archivo = LOAD_FILE('/var/lib/mysql-files/K0LEM/001.jpg'),mime_type ='image/jpeg',numero_pagina = 1,libro_completo =0;
INSERT INTO  archivo  SET libro_fk =2390,orden = 2,nombre ='002.jpg',archivo = LOAD_FILE('/var/lib/mysql-files/K0LEM/002.jpg'),mime_type ='image/jpeg',numero_pagina = 2,libro_completo =0;

我将 jpg 文件存储在 /var/lib/mysql-files/ 以便 mysql 可以导入它。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 2016-07-18
    • 2015-03-06
    • 2020-11-09
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多