Curs 3 - Python Oracle
Curs 3 - Python Oracle
- ORACLE
CURS
CONECTAREA LA BAZE DE DATE ORACLE – PACHETUL
CX_ORACLE
• Pachetul cx_Oracle conține metode pentru realizarea unei conexiuni cu o bază de date
Oracle, pentru gestiunea interogărilor și a tranzacțiilor (comenzile
SELECT/INSERT/UPDATE/DELETE/MERGE și COMMIT/ROLLBACK).
• Lista completă a metodelor pachetului cx_Oracle este disponibilă aici:
https://cx-oracle.readthedocs.io/en/latest/user_guide/introduction.html
• Pentru realizarea conexiunii cu o bază de date Oracle este necesar clientul
pentru Oracle Database (Oracle Instant Client), iar in cadrul conexiunii se precizează:
- userul, parola, serverul (host/ip) și denumirea bazei de date (service name/SID).
Python
connection = cx_Oracle.connect("student_ps",
"oracle", "37.120.250.20/oracle")
cursor = connection.cursor()
cursor.execute("""SELECT nume_client, profesia,
venit_anual FROM T_CLIENTI_LEASING""")
lista_clienti=cursor.fetchall()
cursor.close() Oracle Database
connection.close() 1. Autentificare utilizator
2. Execuție comandă
SQL
3. Returnare set activ de
Cursor T_CLIENTI_LEASING
date
Setul de date returnat de
Oracle Database T_CLIENTI_DAUNE
METODELE FETCH, INTEROGARI CU PARAMETRI
• Pentru prelucrarea unui cursor se pot utiliza listele de tupluri, înregistrările putând fi
încărcate cu ajutorul metodelor cursorului (exemplul1):
fetchone() – încarcă o singură înregistrare;
fetchmany(n) – încarcă n înregistrări;
fetchall() – încarcă toate înregistrările din cursor.
• Interogări cu parametri:
- Parametrii se pot specifica direct în cadrul metodei execute() (a se vedea exemplul
2);
- O altă variantă presupune utilizarea metodei prepare() pentru realizarea interogării
cu parametru (a se vedea exemplul 3).
EXEMPLUL 1 INTEROGARI
Să se returneze numele, profesia, venitul anual și suma solicitată în cazul clienților care au solicitat mai mult de
5000 lei credit.
import cx_Oracle
from pprint import pprint
cursor = connection.cursor()
#finalizarea tranzactiei
connection.commit()
connection.close()
EXEMPLUL 8 INCARCARE IN PANDAS
• Înregistrările returnate de o interogare SQL se pot încărca direct într-un DataFrame Pandas prin metoda
pandas.read_sql(comanda SQL, conexiunea, lista de parametri).
• În acest caz nu mai este necesară încărcarea înregistrărilor în cursor, acestea fiind gestionate automat
de către DataFrame.
Să se selecteze din tabela T_CLIENTI_DAUNE marca, modelul, anul de fabricație, componenta, prețul
manoperei și valoarea daunei pentru autoturismele mai noi de 2010.
import pandas as pd
import cx_Oracle
from pprint import pprint
# Connect to oracle.
connection = cx_Oracle.connect("student_ps", "oracle",
"37.120.250.20/oracle")
#incarcam in DataFrame inregistrarile returnate de SELECT
an=2010
query ="""Select marca, model, an_fabricatie, componenta, pret_manopera,
valoare_dauna
from t_clienti_daune
where an_fabricatie>:an"""
df = pd.read_sql(query, con=connection, params={'an': an})
pprint(df)
connection.close()
EXEMPLUL 9 PRELUCRARE IN PANDAS
Pornind de la exemplul anterior, în exemplul de mai sus să se adauge o nouă coloană în df pentru a calcula
ponderea manoperei din valoarea totală a daunei. Să se afișeze marca și componentele înlocuite în cazul în
care ponderea depășește 30% din valoarea daunei.
import pandas as pd
import cx_Oracle
from pprint import pprint
# Connect to oracle.
connection = cx_Oracle.connect("student_ps", "oracle",
"37.120.250.20/oracle")
#incarcam in DataFrame inregistrarile returnate de SELECT
an=2010
query ="""Select marca, model, an_fabricatie, componenta, pret_manopera,
valoare_dauna
from t_clienti_daune
where an_fabricatie>:an"""
df = pd.read_sql(query, con=connection, params={'an': an})
connection.close()
df["PROCENT"]=df["VALOARE_DAUNA"]/df["PRET_MANOPERA"]
pprint(df.loc[(df["PROCENT"]>30), ["MARCA","COMPONENTA"]])
EXERCIȚII PROPUSE (I)
1. Să se returneze într-un df componenta, anul de fabricatie și
pretul manoperei pentru autoturismele Ford și Jeep. Pe setul din
df, majorați cu 10% pretul manoperei pentru autoturismele
fabricate inainte de 2010 și care au componenta BATTERY
defectă. Salvați modificările într-un fișier .csv.
EXERCIȚII PROPUSE (II)
2. Încărcați într-un df marca, modelul, valoarea medie și numărul
de daune pe fiecare model și marcă. Afișați numărul de
autoturisme pentru care valoarea medie depășește 400 lei.
Reprezentați grafic modelele care au înregistrat mai mult de 200
de daune.
EXERCIȚII PROPUSE (III)
3. Încărcați într-un df numele, suma solicitată, suma din
depozite și fidelitatea clienților cu vârsta > 30 de ani care au
solicitat un credit mai mare de 10.000 lei. Verificați în df dacă
suma din depozit este mai mare decât suma solicitată și pentru
acești clienți modificați fidelitatea în 5 (doar în df).
EXERCIȚII PROPUSE (IV)
4. Încărcați într-un df profesia, venitul anual, suma din depozite
și suma solicitată pe fiecare profesie. În df adăugați o nouă
coloană pentru a calcula gradul de îndatorare pe fiecare profesie
(suma_solicitata/(venit_anual+suma_depozit)*100).
EXERCIȚII PROPUSE (V)
5. Încărcați într-un df starea civilă, profesia și suma totală
solicitată grupată în funcție de aceste atribute. Introduceți de la
tastatură profesia și afișati înregistrările returnate.
• Using Python with Oracle Database 11g,
https://www.oracle.com/technetwork/articles/dsl/pyth
on-091105.html
• Developing a Python Web Application with Oracle
SURSE Database 11g,
BIBLIOGRAFICE https://www.oracle.com/webfolder/technetwork/tutor
ials/obe/db/OOW11/python_django/python_django.ht
m
• https://learncodeshare.net/2015/06/26/insert-crud-
using-cx_oracle/