Na linguagem de programação Python você pode usar os módulos, cx_Oracle, ibm_db e odbc para se conectar aos bancos de dados Oracle, IBM DB2 e MSSQL Server e manipular dados através de um cursor.
Exemplo:
Este programa foi escrito para retornar uma linha de dados de uma tabela e exibir os campos em caixas de textos.
SQL
Oracle
create table Funcionarios ( ID_Funcionario NUMBER(5), Nome VARCHAR2(30), Sobrenome VARCHAR2(70), Cargo VARCHAR2(30), Salario NUMBER(9,2) ); Insert into FUNCIONARIOS values (1,'Steve','Gates','Programador',2550.56); Insert into FUNCIONARIOS values (2,'Bill','Jobs','Diretor',5143.71);
DB2
create table Funcionarios ( ID_Funcionario INTEGER, Nome VARCHAR(30), Sobrenome VARCHAR(70), Cargo VARCHAR(30), Salario NUMERIC(9,2) ); Insert into FUNCIONARIOS values (1,'Steve','Gates','Programador',2550.56); Insert into FUNCIONARIOS values (2,'Bill','Jobs','Diretor',5143.71);
Mssql
create table Funcionarios ( ID_Funcionario Int, Nome VARCHAR(30), Sobrenome VARCHAR(70), Cargo VARCHAR(30), Salario Decimal(9,2) ); Insert into FUNCIONARIOS values (1,'Steve','Gates','Programador',2550.56); Insert into FUNCIONARIOS values (2,'Bill','Jobs','Diretor',5143.71);
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("350x280+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 = "oracle" # Cria conexão com o banco de dados def conectar(banco): # Cria string de conexão Oracle if (banco == "oracle"): sconexao = "user/p@55w0rd@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=p@55w0rd" 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/p@55w0rd" 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 # 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 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])) # 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) # Define Layout titulo.grid(row=0, sticky=W+E+N+S, pady=20) lcodigo.grid(row=1, sticky=W, padx=20) tcodigo.grid(row=1, column=1, pady=5) lpnome.grid(row=2,sticky=W, padx=20) tpnome.grid(row=2, column=1, pady=5) lsnome.grid(row=3,sticky=W, padx=20) tsnome.grid(row=3, column=1, pady=5) lcargo.grid(row=4, sticky=W, padx=20) tcargo.grid(row=4, column=1, pady=5) lsalario.grid(row=5, sticky=W, padx=20) tsalario.grid(row=5, column=1, pady=5) # Layout pesquisa lpesquisa.grid(row=6, column=0, pady=20) tpesquisa.grid(row=6, column=1, pady=20) botao.grid(row=6, column=2,pady=20) # loop do tcl mainloop()