Je suis complètement nouveau dans le module sqlite3 de Python (et SQL en général d'ailleurs), et cela me laisse complètement perplexe . Le manque abondant de descriptions d' cursor
objets (plutôt leur nécessité) semble également étrange.
Cet extrait de code est la manière préférée de faire les choses:
import sqlite3
conn = sqlite3.connect("db.sqlite")
c = conn.cursor()
c.execute('''insert into table "users" values ("Jack Bauer", "555-555-5555")''')
conn.commit()
c.close()
Celui-ci ne l'est pas, même s'il fonctionne aussi bien et sans le (apparemment inutile) cursor
:
import sqlite3
conn = sqlite3.connect("db.sqlite")
conn.execute('''insert into table "users" values ("Jack Bauer", "555-555-5555")''')
conn.commit()
Quelqu'un peut-il me dire pourquoi j'ai besoin d'un cursor
?
Cela semble juste comme des frais généraux inutiles. Pour chaque méthode de mon script qui accède à une base de données, je suis censé créer et détruire un cursor
?
Pourquoi ne pas simplement utiliser l' connection
objet?
Vous avez besoin d'un objet curseur pour récupérer les résultats. Votre exemple fonctionne parce que c'est un
INSERT
et que vous n'essayez donc pas de récupérer des lignes, mais si vous regardez lasqlite3
documentation , vous remarquerez qu'il n'y a aucune.fetchXXXX
méthode sur les objets de connexion, donc si vous avez essayé de le faire aSELECT
sans curseur, vous n'auriez aucun moyen d'obtenir les données résultantes.Les objets Cursor vous permettent de garder une trace de quel jeu de résultats est lequel, car il est possible d'exécuter plusieurs requêtes avant d'avoir fini de récupérer les résultats de la première.
la source
execute
sur un objet de connexion, il s'agit d'unesqlite3
extension.Selon la documentation officielle, il
connection.execute()
existe un raccourci non standard qui crée un objet curseur intermédiaire:la source
( documentation sqlite3 ; c'est moi qui souligne.)
Parce que ces méthodes de l'objet de connexion ne sont pas standard , c'est-à-dire qu'elles ne font pas partie de la spécification de l'API de base de données Python v2.0 (PEP 249).
Tant que vous utilisez les méthodes standard de l'objet Cursor, vous pouvez être sûr que si vous passez à une autre implémentation de base de données qui suit la spécification ci-dessus, votre code sera entièrement portable. Il vous suffira peut-être de changer le
import
ligne.Mais si vous utilisez le,
connection.execute
il est possible que le changement ne soit pas aussi simple. C'est la raison principale pour laquelle vous voudrez peut-être utiliser à lacursor.execute
place.Cependant, si vous êtes certain que vous n'allez pas changer, je dirais que c'est tout à fait OK de prendre le
connection.execute
raccourci et d'être "efficace".la source
Cela nous donne la possibilité d'avoir plusieurs environnements de travail séparés via la même connexion à la base de données.
la source