Python MySQL – Leia e atualize BLOB no banco de dados MySQL

Resumo : neste tutorial, você aprenderá como trabalhar com dados MySQL BLOB em Python, incluindo atualização e leitura BLOBde dados.

Este tutorial continua de onde o tutorial Chamando procedimentos armazenados em Python  parou.

authorstabela possui uma coluna chamada  photocujo tipo de dados é BLOB . Leremos os dados de uma imagem e os atualizaremos na photocoluna.

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 photoLinguagem 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 photoa coluna de um autor especificado por author_id. A argsvariável é uma tupla que contém dados de arquivo e arquivos author_id. Passaremos essa variável para o  execute()método junto com o arquivo query.
  • Terceiro, dentro do  try...exceptbloco, conecte-se ao banco de dados, crie um cursor e execute a consulta com args. Para aplicar a alteração permanente ao banco de dados, chame o commit()método do MySQLConnectionobjeto.
  • Por fim, feche o cursor e a conexão com o banco de dados no  finallybloco.

Terceiro, use a  update_blob()função para ler uma imagem ( images/francis_tugwell.png) do imagesdiretó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 imagesdiretório:

Lendo dados BLOB em Python

O programa a seguir recupera dados BLOB da  authorstabela 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 )

read_blob()função lê BLOBos dados da  authorstabela e os grava em um arquivo especificado pelo  filenameparâ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 imagesdiretó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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *