Resumo : neste tutorial, você aprenderá como trabalhar com dados MySQL BLOB em Python, incluindo atualização e leitura BLOB
de dados.
Este tutorial continua de onde o tutorial Chamando procedimentos armazenados em Python parou.
A authors
tabela possui uma coluna chamada photo
cujo tipo de dados é BLOB . Leremos os dados de uma imagem e os atualizaremos na photo
coluna.
Atualizando dados BLOB em Python
O programa a seguir lê dados de um arquivo e os atualiza no banco de dados:
from mysql.connector import MySQLConnection, Error
from config import read_config
def read_file(filename):
with open(filename, 'rb') as f:
photo = f.read()
return photo
def update_blob(author_id, filename):
# Read file data
data = read_file(filename)
# Prepare update query and data
query = "UPDATE authors " \
"SET photo = %s " \
"WHERE id = %s"
args = (data, author_id)
config = read_config()
try:
# Establish a connection to the MySQL database
with MySQLConnection(**config) as conn:
# Create a cursor to execute SQL queries
with conn.cursor() as cursor:
# Execute the update query with the provided arguments
cursor.execute(query, args)
# Commit the changes to the database
conn.commit()
except Error as e:
print(e)
if __name__ == '__main__':
try:
author_id = 3
filename = 'images/francis_tugwell.png'
update_blob(author_id, filename)
except Error as e:
print(e)
Linguagem de código: PHP ( php )
Como funciona.
Primeiro, defina uma função chamada read_file()
que leia um arquivo e retorne o conteúdo do arquivo:
def read_file(filename):
with open(filename, 'rb') as f:
photo = f.read()
return photo
Linguagem de código: Python ( python )
Segundo, crie uma nova função chamada update_blob()
que atualiza a foto para um autor especificado por author_id
.
def update_blob(author_id, filename):
# Read file data
data = read_file(filename)
# Prepare update query and data
query = "UPDATE authors " \
"SET photo = %s " \
"WHERE id = %s"
args = (data, author_id)
config = read_config()
try:
# Establish a connection to the MySQL database
with MySQLConnection(**config) as conn:
# Create a cursor to execute SQL queries
with conn.cursor() as cursor:
# Execute the update query with the provided arguments
cursor.execute(query, args)
# Commit the changes to the database
conn.commit()
except Error as e:
print(e)
Linguagem de código: Python ( python )
Como funciona:
- Primeiro, chame a
read_file()
função para ler os dados de um arquivo e retornar os dados binários. - Segundo, componha uma instrução UPDATE que atualize
photo
a coluna de um autor especificado porauthor_id
. Aargs
variável é uma tupla que contém dados de arquivo e arquivosauthor_id
. Passaremos essa variável para oexecute()
método junto com o arquivoquery
. - Terceiro, dentro do
try...except
bloco, conecte-se ao banco de dados, crie um cursor e execute a consulta comargs
. Para aplicar a alteração permanente ao banco de dados, chame ocommit()
método doMySQLConnection
objeto. - Por fim, feche o cursor e a conexão com o banco de dados no
finally
bloco.
Terceiro, use a update_blob()
função para ler uma imagem ( images/francis_tugwell.png
) do images
diretório do diretório do projeto:
if __name__ == '__main__':
try:
author_id = 3
filename = 'images/francis_tugwell.png'
update_blob(author_id, filename)
except Error as e:
print(e)
Linguagem de código: Python ( python )
Observe que você pode baixar a seguinte foto e colocá-la no images
diretório:
Lendo dados BLOB em Python
O programa a seguir recupera dados BLOB da authors
tabela e os grava em um arquivo:
from mysql.connector import MySQLConnection, Error
from config import read_config
def write_file(data, filename):
with open(filename, 'wb') as f:
f.write(data)
def read_blob(author_id, filename):
# Select the 'photo' column of a specific author
query = "SELECT photo FROM authors WHERE id = %s"
# Read database configuration
config = read_config()
try:
# Establish a connection to the MySQL database
with MySQLConnection(**config) as conn:
# Create a cursor to execute SQL queries
with conn.cursor() as cursor:
# Execute the query to retrieve the blob data
cursor.execute(query, (author_id,))
# Fetch the blob data from the result set
photo = cursor.fetchone()[0]
# Write the blob data into a file
write_file(photo, filename)
except Error as e:
print(e)
if __name__ == '__main__':
try:
author_id = 3
filename = 'images/3.png'
read_blob(author_id, filename)
except Error as e:
print(e)
Linguagem de código: PHP ( php )
Como funciona.
Primeiro, defina uma write_file()
função que grave dados binários em um arquivo:
def write_file(data, filename):
with open(filename, 'wb') as f:
f.write(data)
Linguagem de código: Python ( python )
Segundo, crie uma nova função chamada read_blob()
que recupera dados BLOB do banco de dados:
def read_blob(author_id, filename):
# Select the 'photo' column of a specific author
query = "SELECT photo FROM authors WHERE id = %s"
# Read database configuration
config = read_config()
try:
# Establish a connection to the MySQL database
with MySQLConnection(**config) as conn:
# Create a cursor to execute SQL queries
with conn.cursor() as cursor:
# Execute the query to retrieve the blob data
cursor.execute(query, (author_id,))
# Fetch the blob data from the result set
photo = cursor.fetchone()[0]
# Write the blob data into a file
write_file(photo, filename)
except Error as e:
print(e)
Linguagem de código: Python ( python )
A read_blob()
função lê BLOB
os dados da authors
tabela e os grava em um arquivo especificado pelo filename
parâmetro.
Terceiro, chame a read_blob()
função para ler a foto do autor id 3 e grave-a em um arquivo:
if __name__ == '__main__':
try:
author_id = 3
filename = 'images/3.png'
read_blob(author_id, filename)
except Error as e:
print(e)
Linguagem de código: Python ( python )
Se você encontrar uma imagem no images
diretório do projeto, indica que você leu com sucesso o BLOB do banco de dados.
Neste tutorial, você aprendeu como ler e escrever dados BLOB no MySQL a partir do Python.