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