Database – Execute, exec_immediate – Oracle, IBM DB2, Microsoft SQL Server – Python

Publicado: 5 de junho de 2014 em Python

Na linguagem de programação Python você pode executar instruções SQL diretas, utilizando o método execute para os bancos de dados Oracle e Microsoft SQL Server e o método exec_immediate para executar instruções sobre o banco de dados IBM DB2.

Neste método utilizamos as APIs de conexão cx_oracle para o banco de dados Oracle, a API ibm_db para o banco de dados DB2 e a API win32 para criar uma conexão ODBC com o banco de dados MSSQL Server.

Execute

O método execute() analisa e executa uma instrução SQL.

exec_immediate

Este procedimento prepara e executa uma única instrução SQL.

API

Para saber mais sobre como utilizar estas APIs utilize nossa categoria Python ou digite a palavra “Conexão” no item de busca do menu deste site.

Python - Database

Python – Database

Exemplo:

Este programa executa as quatro operações básicas em diferentes bancos de dados.

Python

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# campos.py

# importa modulos
from Tkinter import *
import tkMessageBox
import cx_Oracle
import ibm_db
import odbc

# Cria formulario
formulario = Tk(className='Desenvolvimento Aberto')
formulario.geometry("400x330+300+300")

# Cria janela para menssagem
janela = Tk()
janela.wm_withdraw()

# Define banco de dados
# oracle = Oracle Database
# db2 = IBM DB2 Database
# mssql = Microsoft SQL Server
DBconexao = "mssql"

# Cria conexão com o banco de dados
def conectar(banco):
    # Cria string de conexão Oracle
    if (banco == "oracle"):
        sconexao = "user/pass@localhost/XE"
        try:
            con = cx_Oracle.connect(sconexao)
        except ValueError:
            tkMessageBox.showinfo(title="Menssagem", message="Erro de Conexão", parent=janela)

    if (banco == "db2"):
        # Cria string de conexão IBM
        sconexao = "DATABASE=DEVA" +  \
                   ";HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;" + \
                   "UID=user;" + \
                   "PWD=pass"
        try:
            con = ibm_db.connect(sconexao, "", "")
        except ValueError:
            tkMessageBox.showinfo(title="Menssagem", message="Erro de Conexão", parent=janela)

    if (banco == "mssql"):
        # Cria string de conexão MSSQL ODBC
        sconexao =  "MSSQLSERVER/user/pass"
        try:
            con = odbc.odbc(sconexao)
        except ValueError:
           tkMessageBox.showinfo(title="Menssagem", message="Erro de Conexão", parent=janela)

    return con

# Executa e retorna cursor
def retornaFuncionarioID(sql, con, banco):
    if (banco == "oracle"):
        cursor = con.cursor()
        cursor.execute(sql)
    if (banco == "db2"):
        cursor = ibm_db.exec_immediate(con, sql)
    if (banco == "mssql"):
        cursor = con.cursor()
        cursor.execute(sql)
    return cursor

# Limpa campo
def limpar():
    tcodigo.delete(0, END)
    tpnome.delete(0, END)
    tsnome.delete(0, END)
    tcargo.delete(0, END)
    tsalario.delete(0, END)

# Evento do botão
def on_Pesquisar():
    # Exibe banco de dados
    titulo['text'] = "Database: " + DBconexao

    # Cria conexão
    con = conectar(DBconexao)

    # Define e executa SQL
    sql = "Select * From FUNCIONARIOS Where  ID_FUNCIONARIO = " + tpesquisa.get()
    tabela = retornaFuncionarioID(sql, con, DBconexao)

    # Cria cursor
    if (DBconexao == "oracle"):
        dados = tabela.fetchone()
    if (DBconexao == "db2"):
        dados = ibm_db.fetch_tuple(tabela)
    if (DBconexao == "mssql"):
        dados = tabela.fetchone()

    # Exibe dados
    limpar()
    tcodigo.insert(0, str(dados[0]))
    tpnome.insert(0, dados[1])
    tsnome.insert(0, dados[2])
    tcargo.insert(0, dados[3])
    tsalario.insert(0, str(dados[4]))

# limpa widgets
def on_novo():
    limpar()
    tcodigo.focus()

# Insere dados
def on_inserir():
    con = conectar(DBconexao)
    if (DBconexao != "db2"): cursor = con.cursor()

    sql ="Insert into Funcionarios Values (" + \
          tcodigo.get() + ", '" + \
          tpnome.get() + "', '" + \
          tsnome.get() + "', '" + \
          tcargo.get() + "', " + \
          str(tsalario.get()).replace(",",".") + ")"
    try:
        if (DBconexao != "db2"):
            cursor.execute(sql)
            con.commit()
        else:
            cursor = ibm_db.exec_immediate(con, sql)
        tkMessageBox.showinfo(title="Menssagem", message="Dados inseridos com sucesso!", parent=janela)
    except ValueError:
        tkMessageBox.showinfo(title="Menssagem", message="Erro ao inserir dados!", parent=janela)

# Altera dados
def on_alterar():
    con = conectar(DBconexao)
    if (DBconexao != "db2"): cursor = con.cursor()

    sql ="Update Funcionarios set " + \
          "ID_FUNCIONARIO = " + tcodigo.get() + ", NOME= '" + \
          tpnome.get() + "', SOBRENOME= '" + \
          tsnome.get() + "', CARGO= '" + \
          tcargo.get() + "', SALARIO= " + \
          str(tsalario.get()).replace(",",".") + " Where ID_FUNCIONARIO=" + tcodigo.get()

    try:

       if (DBconexao != "db2"):
           cursor.execute(sql)
           con.commit()
       else:
           cursor = ibm_db.exec_immediate(con, sql)            

       tkMessageBox.showinfo(title="Menssagem", message="Dados alterados com sucesso!", parent=janela)
    except ValueError:
        tkMessageBox.showinfo(title="Menssagem", message="Erro ao alterar dados!", parent=janela)

# Exclui dados
def on_apagar():
    con = conectar(DBconexao)
    if (DBconexao != "db2"): cursor = con.cursor()

    sql ="Delete From Funcionarios Where ID_FUNCIONARIO = " + tcodigo.get()

    try:
        if (DBconexao != "db2"):
            cursor.execute(sql)
            con.commit()
        else:
            cursor = ibm_db.exec_immediate(con, sql)
        limpar()
        tkMessageBox.showinfo(title="Menssagem", message="Dados excluidos com sucesso!", parent=janela)
    except ValueError:
        tkMessageBox.showinfo(title="Menssagem", message="Erro ao excluir dados!", parent=janela)

# Cria componentes widgets
titulo = Label(formulario, text="Database: Nenhum")

# labels
lcodigo = Label(formulario, text="Codigo:")
lpnome = Label(formulario, text="Nome:")
lsnome = Label(formulario, text="Sobrenome:")
lcargo = Label(formulario, text="Cargo:")
lsalario = Label(formulario, text="Salario:")

# Entry
tcodigo = Entry(formulario)
tpnome = Entry(formulario)
tsnome = Entry(formulario)
tcargo = Entry(formulario)
tsalario = Entry(formulario)

# Pesquisa
lpesquisa = Label(formulario, text="Pesquisa:")
tpesquisa = Entry(formulario)
botao = Button(formulario, text = "Pesquisar", command=on_Pesquisar)

#Ações
painel = Frame()
bnovo = Button(painel, text="Novo", command=on_novo)
binserir = Button(painel, text="Inserir", command=on_inserir)
balterar = Button(painel, text="Alterar", command=on_alterar)
bapagar = Button(painel, text="Apagar", command=on_apagar)

# Define Layout
titulo.grid(row=0, sticky=W+E+N+S, pady=20)
lcodigo.grid(row=2, sticky=W, padx=20)
tcodigo.grid(row=2, column=1, pady=5)
lpnome.grid(row=3,sticky=W, padx=20)
tpnome.grid(row=3, column=1, pady=5)
lsnome.grid(row=4,sticky=W, padx=20)
tsnome.grid(row=4, column=1, pady=5)
lcargo.grid(row=5, sticky=W, padx=20)
tcargo.grid(row=5, column=1, pady=5)
lsalario.grid(row=6, sticky=W, padx=20)
tsalario.grid(row=6, column=1, pady=5)

# Layout pesquisa
lpesquisa.grid(row=1, column=0, pady=20)
tpesquisa.grid(row=1, column=1, pady=20)
botao.grid(row=1, column=2,pady=20)

# Loayout Ações
bnovo.grid(row =1, column=0, pady=15)
binserir.grid(row =1, column=1, pady=15)
balterar.grid(row =1, column=2, pady=15)
bapagar.grid(row =1, column=3, pady=15)
painel.grid(row=7, columnspan= 3, padx=100, pady=10)

# loop do tcl
mainloop()
Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s