Documente Academic
Documente Profesional
Documente Cultură
Pentru realizarea conexiunii este necesară instalarea clientului Oracle Client 12c
(https://www.oracle.com/database/technologies/instant-client/downloads.html). Versiunea de
Oracle Client trebuie să corespundă versiunii de Oracle Database (a se vedea lista de
compatibilități pe site-ul Oracle) dar și versiunii de Python instalată (32 sau 64 biți).
Instrucțiunile sunt detaliate aici: https://cx-
oracle.readthedocs.io/en/latest/user_guide/installation.html
Pentru gestiunea interogărilor sau a tranzacțiilor este necesară utilizarea unui cursor:
cursor = connection.cursor()
Obiectul de tip cursor dispune de toate metodele necesare gestiunii tranzacțiilor și procesării
interogărilor.
Metoda Explicații
1
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
SQL)
Realizarea interogărilor
Pentru exemplificare se utilizează tabelele T_CLIENTI_DAUNE și T_CLIENTI_LEASING
din schema utilizatorului STUDENT_PS.
Vă conectați în SQL Developer utilizând următoarele informații:
Connection Name: Seminar 2
Username: student_ps
Parola: oracle
Server
Host: 37.120.250.20
Port 1521
Service_name: oracle
După prelucrarea cursorului se recomandă închiderea sa, iar la final închiderea conexiunii cu
baza de date:
cursor.close()
connection.close()
2
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
Pentru prelucrarea unui cursor se pot utiliza listele de tupluri, înregistrările putând fi încărcate
cu ajutorul metodelor cursorului:
- fetchone() – încarcă o singură înregistrare;
- fetchmany(n) – încarcă n înregistrări;
- fetchall() - încarcă toate înregistrările din cursor.
Interogări cu parametrii
Parametrii se pot sepcifica direct în cadrul metodei execute() sub forma
cursor.execute(comanda SQL, parametri). În cadrul interogării, parametrii se specific
sub forma :param.
Exemplul 2. Să se returneze valoarea totală a daunelor înregistrate pentru o anumită marcă
auto introdusă de utilizator de la tastatură.
import cx_Oracle
from pprint import pprint
3
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
Gestiunea tranzacțiilor
Operațiile DML (INSERT, UPDATE și DELETE) sunt realizate tot prin intermediul unui
cursor cu ajutorul metodei execute() sub forma cursor.execute(comanda SQL
INSERT/UPDATE/DELETE, parametri).
În cazul INSERT, se pot transmite mai multe înregistrări prin metoda executemany(). În aest
caz se recomandă să se precizeze numărul de înregistrări prin proprietatea bindarraysize și
tipul parametrilor prin metoda setinputsizes.
Tranzacțiile se pot finaliza sau anula prin precizarea opțiunilor COMMIT sau ROLLBACK
ale conexiunii: connection.commit() sau connection.rollback()
Exemplul 3. Să se adauge o listă de tupluri în tabela CLIENTI_NOI care are următoarea
structură: id_client number, nume_client varchar2(150), profesia varchar2(150), sex
varchar2(3), varsta number, stare_civila varchar2(1),suma_solicitata number.
cursor = connection.cursor()
#adaugarea listei de clienti noi in tabela
cursor.bindarraysize = 3
cursor.setinputsizes(int, 150, 150, 3, int, 1, float)
cursor.executemany("insert into clienti_noi(id_client, nume_client, profesia,
sex, varsta, stare_civila,suma_solicitata) values (:1, :2, :3, :4, :5, :6, :7)",
lista_clienti_noi)
cursor.close()
#finalizarea tranzactiei
connection.commit()
4
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
cursor = connection.cursor()
#precizarea instructiunii update cu parametru
statement="update clienti_noi set suma_solicitata=suma_solicitata*1.10 where
lower(nume_client) like :p_nume"
#finalizarea tranzactiei
connection.commit()
cursor = connection.cursor()
#stergerea clientilor cu numele Popa
statement="delete from clienti_noi where nume_client like 'Popa%'"
cursor.execute(statement)
cursor.close()
#finalizarea tranzactiei
connection.commit()
connection.close()
# Connect to oracle.
connection = cx_Oracle.connect("student_ps", "oracle", "37.120.250.20/oracle")
5
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
connection.close()
# Connect to oracle.
connection = cx_Oracle.connect("student_ps", "oracle", "37.120.250.20/oracle")
df["PROCENT"]=df["VALOARE_DAUNA"]/df["PRET_MANOPERA"]
pprint(df.loc[(df["PROCENT"]>30), ["MARCA","COMPONENTA"]])
1.
6
Seminar 2 – Prelucrarea datelor în Python. Connexiunea cu Oracle Database
Referințe
1 Using Python with Oracle Database 11g
- https://www.oracle.com/technetwork/articles/dsl/python-091105.html
https://www.oracle.com/webfolder/technetwork/tutorials/obe/db/OOW11/python_djang
o/python_django.htm
3 https://learncodeshare.net/2015/06/26/insert-crud-using-cx_oracle/
4 https://cx-oracle.readthedocs.io/en/latest/user_guide/sql_execution.html