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.
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()