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


