Bonjour,
je cherche à inclure dans une base de données mysql des fichiers joints (pdf, image et autre extensions type pack office...).
après quelques recherches, il semble que cela doit se dérouler via l’utilisation de la typologie BLOB de la colonne servant à accueillir le/les fichiers.
aussi, il semble que les fichiers doivent être binarisés pour être stockés dans la table.
pour la binarisation j'utilise les deux ligne suivantes (pj = chemin du fichier à joindre):
par la suite j'insère le fichier via la ligne suivante (exemple):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 with open(pj, 'rb') as file: binaryData = file.read()
jusque là, pas de plantage... ça tourne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 data = ("AAAA","BBBB", binaryData) sql_add_query = """INSERT INTO table (Col1, Col2, Attached_file) VALUES (%s,%s,%s)""" cursor.execute(sql_add_query, data)
maintenant pour revenir lire le fichier attaché dans la BDD, j'utilise les lignes suivantes:
ici aussi, ça tourne... sauf que le fichier généré est impossible à ouvrir...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 sql_fetch_blob_query = """SELECT * FROM table where colonne_visee = 'test'""" cursor.execute(sql_fetch_blob_query) record = cursor.fetchall() for row in record: print(row[2]) with open(r"chemin", 'wb') as file: file.write(row[2])
à priori, j'ai l'impression que ce qui ne va pas c'est une histoire de format.
je fait un binaire (b'\xff...') qui se transforme en str ("b'\xff...'").
sauf que je n'arrive ni à intégrer dans la base de données directement un format bytes ni à re-convertir correctement le str en bytes... pour le lire
qu'est qui ne va pas? est-ce la bonne méthode pour attacher des fichiers à une colonne? au fait possible de mettre plusieurs fichiers dans une "cellule" d'une colonne?
NB: je débute à peine en mysql! je suis preneur de tout conseils :-)
merci,
cordialement,
Partager