db2 package

Subpackages

Module contents

class db2.DB2Connection(filename: str, late_commit=False)

Base: object

Classe para conectar-se com um banco de dados DB2.

Esta classe abstrai a maioria das funções do módulo ibm_db, enquanto oferece métodos de conveniência para inserir, modificar e recuperar linhas do banco de dados.

Parâmetros:
  • filename – Nome de um arquivo json com os dados de login para o banco de dados.

  • late_commit – Se as modificações no banco de dados devem ser retardadas até o fim da execução da cláusula with.

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    conn.modify('''
        CREATE TABLE TEST (
            A1 INTEGER NOT NULL,
            A2 VARCHAR(9) NOT NULL
        );
    ''')

    conn.insert("TEST", {'A1': 1, 'A2': 'olá mundo'})
create_tables(filename: str)

Cria tabelas, se elas não existirem, a partir de um arquivo em disco.

Tabelas também podem ser criadas a partir do comando modify.

Parâmetros:

filename – Caminho para um arquivo SQL com os comandos para criar as tabelas. Cada comando de criação de tabelas deve estar separado por dois espaços em branco.

Exemplo:

caminho_para_arquivo_com_comandos.sql

CREATE TABLE USERS_TEST_IBMDB2(
    ID INTEGER NOT NULL PRIMARY KEY,
    NAME VARCHAR(10) NOT NULL,
    AGE INTEGER NOT NULL
);

INSERT INTO USERS_TEST_IBMDB2(ID, NAME, AGE) VALUES (1, 'HENRY', 32);
INSERT INTO USERS_TEST_IBMDB2(ID, NAME, AGE) VALUES (2, 'JOHN', 20);

main.py

import os
from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as db2_conn:
    db2_conn.create_tables(caminho_para_arquivo_com_comandos.sql)
    query_str = '''
        SELECT *
        FROM USERS_TEST_IBMDB2;
     '''
    df = db2_conn.query_to_dataframe(query_str)

    print(df)
get_columns(table_name: str, schema_name: str = None) list

Retorna um dicionário com o tipo de dados das colunas de uma tabela.

Parâmetros:
  • table_name – O nome da coluna, com ou sem o SCHEMA prefixado.

  • schema_name – Opcional - o nome do schema do qual a tabela pertence. O padrão é None (schema padrão do banco)

Retorna:

Uma lista de dicionários, onde para cada dicionário contém as informações da coluna. O tipo das colunas é o tipo no formato IBM DB2 (e.g. DECIMAL(10, 2), FLOAT, INTEGER, VARCHAR, etc).

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    column_types = conn.get_columns(schema_name=None, table_name='DB2_TEST_TABLE_1')
    print(column_types)
insert(table_name: str, row: dict, suppress=False, throw=False) int

Insere uma tupla (apresentada como um dicionário) em uma tabela.

Parâmetros:
  • table_name – Nome da tabela onde os dados serão inseridos.

  • row – Um dicionário onde as chaves são nomes de colunas e seus valores os valores de uma tupla em um banco de dados.

  • suppress – Opcional - se warnings devem ser suprimidos na saída do console.

  • throw – Opcional - se, ao ocorrer um erro no comando SQL, uma exceção deve ser lançada

Retorna:

A quantidade de linhas inseridas

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    to_input = [
        {'A1': 1, 'A2': 1.17, 'A3': 3.2, 'A4': '2024-12-31', 'A5': 'olá mundo'},
        {'A1': 2, 'A2': 32.500, 'A3': 7.2, 'A4': '1970-01-01', 'A5': 'olá henry'}
    ]
    for inp in to_input:
        n_rows_affected = conn.insert('DB2_TEST_TABLE_1', inp)
        print(n_rows_affected)
insert_or_update_table(table_name: str, where: dict, row: dict, suppress: bool = False, throw: bool = False) int

Dada uma tabela em DB2 e um conjunto de informações (apresentados como um dicionário), insere OU atualiza estas informações no banco de dados.

No parâmetro where, deve ser passado as informações que localizam a linha no banco de dados. No parâmetro row, devem ser passadas todas as informações, inclusive as que estão contidas na cláusula where.

Parâmetros:
  • table_name – Nome da tabela onde os dados serão inseridos ou atualizados.

  • where – Dicionário com a cláusula WHERE. As chaves do dicionário são os nomes das colunas, e seus valores os valores da tupla a ser buscada.

  • row – Um dicionário onde as chaves são nomes de colunas e seus valores os valores de uma tupla em um banco de dados.

Retorna:

Quantidade de linhas que foram afetadas pelo comando SQL

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    conn.insert_or_update_table(
        'DB2_TEST_TABLE_1',
        {'A1': 4, 'A2': 1.17},
        {'A1': 4, 'A2': 1.17, 'A3': 3.2, 'A4': '2024-12-31', 'A5': 'olá mundo'}
    )
    # valor de A3: 3.2

    conn.insert_or_update_table(
        'DB2_TEST_TABLE_1',
        {'A1': 4, 'A2': 1.17},
        {'A1': 4, 'A2': 1.17, 'A3': 4.0, 'A4': '2024-12-31', 'A5': 'olá mundo'}
    )
    # valor de A3: 4.0
modify(sql: str, suppress=False, throw=False) int

Realiza modificações (inserções, modificações, deleções) na base de dados.

Esse método é reservado a instruções que alteram o estado do banco de dados, Data Manipulation Language (DML).

Parâmetros:
  • sql – O comando em SQL.

  • suppress – Opcional - se warnings devem ser suprimidos na saída do console.

  • throw – Opcional - se, ao ocorrer um erro no comando SQL, uma exceção deve ser lançada

Retorna:

Quantidade de linhas que foram afetadas pelo comando SQL

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    conn.modify('DROP TABLE DB2_TEST_TABLE_1;')
query(sql: str, as_dict: bool = False) TupleIterator | DictIterator

Realiza consultas à base de dados DB2.

Esse método é reservado a consultas do tipo Data Query Language (DQL).

Parâmetros:
  • sql – A consulta em SQL.

  • as_dict – Opcional - se o resultado deve ser um dicionário, ao invés de uma tupla.

Retorna:

Um iterator para as tuplas a serem retornadas.

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    tuple_factory = conn.query(f'''
        SELECT *
        FROM DB2_TEST_TABLE_1;
    '''))
    # resultados são no formato (1, 1.17, 3.2, ...)

    dict_factory = conn.query(f'''
        SELECT *
        FROM DB2_TEST_TABLE_1;
    ''', as_dict=True))
    # resultados são no formato {'A1': 1, 'A2': 1.17, 'A3': 3.2, ...}
query_to_dataframe(sql: str) DataFrame

Realiza uma consulta à base de dados DB2, convertendo automaticamente o resultado em um pandas.DataFrame.

IMPORTANTE: Se a consulta retornar uma tabela que ocupa muito espaço em disco (ou muitos recursos de rede), prefira definir o parâmetro fetch_first para um valor (e.g. 500 linhas).

Parâmetros:

sql – A consulta em SQL.

Retorna:

um pandas.DataFrame com o resultado da consulta.

Exemplo:

from db2 import DB2Connection
import pandas as pd

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    conn.insert(
        'DB2_TEST_TABLE_1',
        {'A1': 5, 'A2': 1.17, 'A3': 3.2, 'A4': '2024-01-01', 'A5': '2010_2020'}
    )
    conn.insert(
        'DB2_TEST_TABLE_1',
        {'A1': 6, 'A2': 32.500, 'A3': 7.2, 'A4': '2050-12-31', 'A5': '2011_2021'}
    )

    df = conn.query_to_dataframe('''SELECT * FROM DB2_TEST_TABLE_1;''')
update(table_name: str, where: dict, values: dict, suppress=False, throw=False) int

Atualiza os valores de uma tupla (apresentada como um dicionário) em uma tabela.

Parâmetros:
  • table_name – Nome da tabela onde os dados serão atualizados.

  • where – Dicionário com a cláusula WHERE. As chaves do dicionário são os nomes das colunas, e seus valores os valores da tupla a ser atualizada.

  • values – Valores a serem atualizados na tabela do banco de dados.

  • suppress – Opcional - se warnings devem ser suprimidos na saída do console.

  • throw – Opcional - se, ao ocorrer um erro no comando SQL, uma exceção deve ser lançada

Retorna:

A quantidade de linhas afetadas pelo comando update

Exemplo:

from db2 import DB2Connection

with DB2Connection(caminho_para_arquivo_com_credenciais.json) as conn:
    conn.insert(
        'DB2_TEST_TABLE_1',
        {'A1': 3, 'A2': 1.17, 'A3': 3.2, 'A4': '2024-12-31', 'A5': 'olá mundo'}
    )
    # valor de A3: 3.2

    conn.update(
        'DB2_TEST_TABLE_1',
        {'A1': 3, 'A2': 1.17},
        {'A3': 4}
    )
    # valor de A3: 4.0
exception db2.IBMDBError

Base: Exception