--Utilisation d'Oracle Cloud
Fondamentalement, comme expliqué dans Partie 3, après avoir appelé la méthode execute () de l'objet Cursor, en boucle contre l'objet Cursor. Vous pouvez récupérer des enregistrements avec.
sample03b.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
for row in cursor.execute(SQL):
print(row)
D'autre part, la récupération par la méthode suivante basée sur PEP 249 (Python Database API Specification v2.0) est également possible.
fetchone()
Comme vous pouvez l'imaginer d'après le nom, c'est une méthode qui ne récupère qu'une seule ligne. Plutôt que de récupérer ligne par ligne dans une boucle comme dans l'exemple ci-dessous
select 1+1 from dual
Pour les instructions SELECT connues pour ne renvoyer qu'une seule ligne, telles que, ou pour les curseurs à défilement décrits ci-dessous.
sample04a.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.execute(SQL)
while True:
row = cursor.fetchone()
if row is None:
break
print(row)
fetchall() Contrairement à fetchone (), cette méthode récupère toutes les lignes à la fois.
sample04b.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.execute(SQL)
rows = cursor.fetchall()
for row in rows:
print(row)
fetchmany() Une méthode qui récupère le nombre de lignes spécifié dans l'argument entre fetchone () et fetchall (). Dans l'exemple ci-dessous, 3 éléments sont récupérés.
sample04c.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.execute(SQL)
while True:
rows = cursor.fetchmany(3)
if not rows:
break
for row in rows:
print(row)
Lorsque vous lancez une méthode d'extraction, le nombre d'exécutions que vous essayez d'obtenir n'est pas réellement récupéré à chaque fois que vous exécutez chaque méthode. Le nombre d'éléments spécifié dans la variable arraysize de l'objet Cursor (la valeur par défaut est 100) est lu dans la mémoire tampon du client Oracle et cx_Oracle est extrait en fonction de cette mémoire tampon. Il s'agit d'une mesure pour réduire le nombre d'allers-retours vers la base de données et est un mécanisme fourni dans de nombreux pilotes d'accès d'Oracle Database, non limité à cx_Oracle. Si vous pensez simplement, cela semble être le taux le plus élevé à récupérer par fetchall () en spécifiant la taille du tableau qui peut récupérer le nombre de récupérations prévu à la fois. Cependant, en réalité, il est rare que le nombre d'acquisitions soit connu. En outre, arraysize doit être défini sur une valeur qui prend en compte ces paramètres car il est soumis à des restrictions telles que la puissance de traitement et le poids SQL du côté serveur, la quantité d'utilisation du processeur et de mémoire pouvant être utilisée par l'application et la bande passante du réseau. .. Ce qui suit est un exemple lors de l'émission de SQL avec arraysize défini sur 1000. J'essaye de récupérer le même nombre que arraysize avec fetchmany ().
sample04d.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.arraysize = 1000
cursor.execute(SQL)
while True:
rows = cursor.fetchmany(cursor.arraysize)
if not rows:
break
for row in rows:
print(row)
Normalement, la récupération ne va que vers l'arrière. D'autre part, cx_Oracle implémente un curseur à défilement qui permet à n'importe quel enregistrement, y compris le front, de changer sa position actuelle. Pour utiliser un curseur de défilement, l'argument de défilement doit être défini sur True lorsque l'objet Cursor est créé. Utilisez la méthode scroll () pour faire défiler le curseur. Cette méthode a un argument appelé valeur et un argument appelé mode. La signification de l'argument valeur change en fonction de la valeur spécifiée dans l'argument mode. Vous trouverez ci-dessous une liste de ce qui peut être fait en fonction de l'argument mode.
La valeur de l'argument mode | Signification et mouvement de l'argument de la valeur |
---|---|
first | Faites défiler jusqu'à la première ligne. L'argument de valeur est ignoré. |
last | Faites défiler jusqu'à la dernière ligne. L'argument de valeur est ignoré. |
absolute | Passe au nombre de lignes spécifié dans l'argument valeur. |
relative | La valeur par défaut de l'argument mode. Déplace le nombre de lignes spécifié dans l'argument valeur. Spécifiez une valeur négative à renvoyer. |
Voici un exemple. Notez que les curseurs à défilement ont une charge plus élevée que les curseurs normaux, ne les utilisez donc que si nécessaire.
sample04e.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
select object_id - 1, owner, object_name, object_type
from all_objects
order by object_id
fetch first 10 rows only
"""
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor(scrollable=True) as cursor:
cursor.execute(SQL)
print("********Afficher les 10 lignes********")
for row in cursor:
print(row)
print("********Afficher la première ligne(l'argument de valeur est ignoré) ********")
cursor.scroll(8, "first")
print(cursor.fetchone())
print("********Afficher la dernière ligne********")
cursor.scroll(mode="last")
print(cursor.fetchone())
print("********Afficher la 3e ligne********")
cursor.scroll(3, "absolute")
print(cursor.fetchone())
print("********Afficher après 4 lignes********")
cursor.scroll(4)
print(cursor.fetchone())
print("********Afficher 2 lignes avant********")
cursor.scroll(-2, "relative")
print(cursor.fetchone())
$ python sample04e.py
********Afficher les 10 lignes********
(1, 'SYS', 'C_OBJ#', 'CLUSTER')
(2, 'SYS', 'I_OBJ#', 'INDEX')
(3, 'SYS', 'TAB$', 'TABLE')
(4, 'SYS', 'CLU$', 'TABLE')
(5, 'SYS', 'C_TS#', 'CLUSTER')
(6, 'SYS', 'I_TS#', 'INDEX')
(7, 'SYS', 'C_FILE#_BLOCK#', 'CLUSTER')
(8, 'SYS', 'I_FILE#_BLOCK#', 'INDEX')
(9, 'SYS', 'C_USER#', 'CLUSTER')
(10, 'SYS', 'I_USER#', 'INDEX')
********Afficher la première ligne(l'argument de valeur est ignoré) ********
(1, 'SYS', 'C_OBJ#', 'CLUSTER')
********Afficher la dernière ligne********
(10, 'SYS', 'I_USER#', 'INDEX')
********Afficher la 3e ligne********
(3, 'SYS', 'TAB$', 'TABLE')
********Afficher après 4 lignes********
(7, 'SYS', 'C_FILE#_BLOCK#', 'CLUSTER')
********Afficher 2 lignes avant********
(5, 'SYS', 'C_TS#', 'CLUSTER')