Κοινή χρήση τεχνολογίας

sqlite3 — Διεπαφή DB-API 2.0 για βάσεις δεδομένων SQLite

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

sqlite3 — Διεπαφή DB-API 2.0 για βάσεις δεδομένων SQLite — τεκμηρίωση Python 3.12.4

sqlite3— Διεπαφή DB-API 2.0 για βάσεις δεδομένων SQLite
sqlite3 — Διεπαφή DB-API 2.0 για βάσεις δεδομένων SQLite

Πηγαίος κώδικας: Lib/sqlite3/    Τοποθεσία πηγαίου κώδικα:Lib/sqlite3/

Το SQLite είναι μια βιβλιοθήκη C που παρέχει μια ελαφριά βάση δεδομένων που βασίζεται σε δίσκο που δεν απαιτεί ξεχωριστή διαδικασία διακομιστή και επιτρέπει την πρόσβαση στη βάση δεδομένων χρησιμοποιώντας μια μη τυπική παραλλαγή της γλώσσας ερωτημάτων SQL. Ορισμένες εφαρμογές μπορούν να χρησιμοποιήσουν το SQLite για εσωτερική αποθήκευση δεδομένων. Είναι επίσης δυνατό να δημιουργήσετε πρωτότυπο μια εφαρμογή χρησιμοποιώντας το SQLite και στη συνέχεια να μεταφέρετε τον κώδικα σε μια μεγαλύτερη βάση δεδομένων όπως η PostgreSQL ή η Oracle.
Η SQLite είναι μια βιβλιοθήκη γλώσσας C που παρέχει μια ελαφριά βάση δεδομένων που βασίζεται σε δίσκο, η οποία δεν απαιτεί ξεχωριστή διαδικασία διακομιστή και επιτρέπει την πρόσβαση στη βάση δεδομένων χρησιμοποιώντας μια μη τυπική παραλλαγή της γλώσσας ερωτημάτων SQL. Ορισμένες εφαρμογές μπορούν να χρησιμοποιήσουν το SQLite για εσωτερική αποθήκευση δεδομένων. Επιπλέον, μπορείτε να χρησιμοποιήσετε το SQLite για να δημιουργήσετε πρωτότυπα μια εφαρμογή και στη συνέχεια να μετεγκαταστήσετε τον κώδικα σε μια μεγάλη βάση δεδομένων όπως η PostgreSQL ή η Oracle.

οsqlite3 Η ενότητα γράφτηκε από τον Gerhard Häring. Παρέχει μια διεπαφή SQL συμβατή με την προδιαγραφή DB-API 2.0 που περιγράφεται απόPEP 249και απαιτεί SQLite 3.7.15 ή νεότερη έκδοση.
μονάδα sqlite3 Γράφτηκε από τον Gerhard Häring. Παρέχει μια διεπαφή SQL που συμμορφώνεται με την προδιαγραφή DB-API 2.0 που περιγράφεται από το PEP 249 και απαιτεί έκδοση SQLite 3.7.15 ή νεότερη.

Αυτό το έγγραφο περιλαμβάνει τέσσερις κύριες ενότητες: Αυτό το έγγραφο περιλαμβάνει κυρίως τις ακόλουθες τέσσερις κύριες ενότητες

  • Φροντιστήριοδιδάσκει πώς να χρησιμοποιείτε τοsqlite3μονάδα μέτρησης.ΦροντιστήριοΤο μέρος διδάσκει πώς να χρησιμοποιείτε τη μονάδα sqlite3.

  • Αναφοράπεριγράφει τις κλάσεις και τις συναρτήσεις που ορίζει αυτή η ενότητα.
    αναφέρομαι σεΗ ενότητα περιγράφει τις κλάσεις και τις συναρτήσεις που ορίζονται από αυτήν την ενότητα.

  • Οδηγοί πώς ναλεπτομέρειες σχετικά με τον τρόπο χειρισμού συγκεκριμένων εργασιών.
    Οδηγός λειτουργίαςΟι ενότητες περιγράφουν λεπτομερώς τον τρόπο χειρισμού συγκεκριμένων εργασιών.

  • Εξήγησηπαρέχει σε βάθος υπόβαθρο για τον έλεγχο συναλλαγών.
    εξηγώΑυτή η ενότητα παρέχει μια εις βάθος εισαγωγή στη βασική γνώση του ελέγχου συναλλαγών.

Δείτε επίσης

https://www.sqlite.org

Η ιστοσελίδα SQLite. η τεκμηρίωση περιγράφει τη σύνταξη και τους διαθέσιμους τύπους δεδομένων για την υποστηριζόμενη διάλεκτο SQL.
Η ιστοσελίδα του SQLite περιγράφει τη σύνταξη των υποστηριζόμενων διαλέκτων SQL και τους διαθέσιμους τύπους δεδομένων.

Εκμάθηση SQLΕκμάθηση SQL

Εκμάθηση, αναφορά και παραδείγματα για την εκμάθηση σύνταξης SQL.
Σεμινάρια, αναφορές και παραδείγματα για την εκμάθηση της σύνταξης SQL.

PEP 249- Προδιαγραφές API βάσης δεδομένων 2.0 PEP 249 - Προδιαγραφές API βάσης δεδομένων 2.0

PEP γραμμένο από τον Marc-André Lemburg.

ΦροντιστήριοΦροντιστήριο

Σε αυτό το σεμινάριο, θα δημιουργήσετε μια βάση δεδομένων για Ταινίες Monty Python χρησιμοποιώντας βασικάsqlite3 λειτουργικότητα. Προϋποθέτει μια θεμελιώδη κατανόηση των εννοιών της βάσης δεδομένων, συμπεριλαμβανομένωνδρομείςκαισυναλλαγές.
Σε αυτό το σεμινάριο, θα χρησιμοποιήσετε τη βασική λειτουργικότητα sqlite3 για να δημιουργήσετε μια βάση δεδομένων σχετικά με τις ταινίες Monty Python. Αυτό το σεμινάριο προϋποθέτει ότι έχετε βασικές γνώσεις για τις έννοιες της βάσης δεδομένων, συμπεριλαμβανομένων των δρομέων και των συναλλαγών.

Πρώτα, πρέπει να δημιουργήσουμε μια νέα βάση δεδομένων και να ανοίξουμε μια σύνδεση βάσης δεδομένων για να το επιτρέψουμεsqlite3 να δουλέψεις μαζί του. Κλήσηsqlite3.connect()για να δημιουργήσετε μια σύνδεση με τη βάση δεδομένωνtutorial.dbστον τρέχοντα κατάλογο εργασίας, δημιουργώντας το σιωπηρά αν δεν υπάρχει:
Αρχικά, πρέπει να δημιουργήσουμε μια νέα βάση δεδομένων και να ανοίξουμε μια σύνδεση βάσης δεδομένων, ώστε το sqlite3 να μπορεί να αλληλεπιδρά μαζί της. Καλέστε την sqlite3.connect() για να δημιουργήσετε μια σύνδεση με τη βάση δεδομένων tutorial.db στον τρέχοντα κατάλογο εργασίας, δημιουργώντας την σιωπηρά και απαλά αυτόματα εάν η βάση δεδομένων δεν υπάρχει:

  1. import sqlite3
  2. con = sqlite3.connect("tutorial.db")

Το επιστρεφόμενοΣύνδεσηαντικείμενοconαντιπροσωπεύει τη σύνδεση με τη βάση δεδομένων στο δίσκο.
Το επιστρεφόμενο αντικείμενο Connection (με το όνομα con σε αυτήν την περίπτωση) αντιπροσωπεύει τη σύνδεση με τη βάση δεδομένων στο δίσκο.

Ωστε να εκτέλεση εντολών SQL καιανάκτηση αποτελεσμάτων από ερωτήματα SQL, θα χρειαστεί να χρησιμοποιήσουμε δρομέα βάσης δεδομένων. Κλήσηcon.cursor()για να δημιουργήσετε τοΔρομέας:
Για να εκτελέσουμε εντολές SQL και να λάβουμε αποτελέσματα από ερωτήματα SQL, πρέπει να χρησιμοποιήσουμε δρομείς βάσης δεδομένων. Καλέστε την con.cursor() για να δημιουργήσετε έναν Δρομέα:

cur = con.cursor()

Τώρα που έχουμε μια σύνδεση βάσης δεδομένων και έναν δρομέα, μπορούμε να δημιουργήσουμε έναν πίνακα βάσης δεδομένωνmovie με στήλες για τίτλο, έτος κυκλοφορίας και βαθμολογία κριτικής. Για απλότητα, μπορούμε απλώς να χρησιμοποιήσουμε ονόματα στηλών στη δήλωση του πίνακα – χάρη στοευέλικτη πληκτρολόγηση χαρακτηριστικό του SQLite, ο καθορισμός των τύπων δεδομένων είναι προαιρετικός. Εκτελέστε τοCREATE TABLEδήλωση με κλήσηcur.execute(...):
Τώρα που έχουμε τη σύνδεση βάσης δεδομένων και τον κέρσορα, μπορούμε να δημιουργήσουμε έναν πίνακα βάσης δεδομένων με το όνομα ταινία με στήλες όπως τίτλος, έτος κυκλοφορίας και βαθμολογία αξιολόγησης. Για να απλοποιήσουμε τα πράγματα, μπορούμε να χρησιμοποιήσουμε τα ονόματα στηλών απευθείας στη δήλωση του πίνακα - ο καθορισμός του τύπου δεδομένων είναι προαιρετικός λόγω της ευέλικτης δυνατότητας πληκτρολόγησης του SQLite. Εκτελέστε την πρόταση CREATE TABLE καλώντας cur.execute(...):

cur.execute("CREATE TABLE movie(title, year, score)")

Μπορούμε να επαληθεύσουμε ότι ο νέος πίνακας έχει δημιουργηθεί κάνοντας ερώτημα στοsqlite_masterπίνακας ενσωματωμένος στο SQLite, ο οποίος θα πρέπει τώρα να περιέχει μια καταχώρηση για τοmovieορισμός πίνακα (βλΟ Πίνακας Σχημάτων για λεπτομέρειες). Εκτελέστε αυτό το ερώτημα καλώνταςcur.execute(...), αντιστοιχίστε το αποτέλεσμα σεresκαι καλέστεres.fetchone()για να ανακτήσετε τη σειρά που προκύπτει:
Μπορούμε να επαληθεύσουμε ότι ο νέος πίνακας έχει δημιουργηθεί κάνοντας ερώτημα στον ενσωματωμένο πίνακα sqlite_master του SQLite, ο οποίος θα πρέπει τώρα να περιέχει εγγραφές για τον ορισμό του πίνακα ταινιών (δείτε τον πίνακα σχήματος για λεπτομέρειες). Εκτελέστε το ερώτημα καλώντας το cur.execute(...), αντιστοιχίστε τα αποτελέσματα στο res και καλέστε το res.fetchone() για να λάβετε τις σειρές αποτελεσμάτων:

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master")
  2. >>> res.fetchone()
  3. ('movie',)

Μπορούμε να δούμε ότι ο πίνακας έχει δημιουργηθεί, καθώς το ερώτημα επιστρέφει aπλειάδα που περιέχει το όνομα του πίνακα. Αν ρωτήσουμεsqlite_masterγια ανύπαρκτο τραπέζιspamres.fetchone()θα επιστρέψειNone:
Μπορούμε να δούμε ότι ο πίνακας δημιουργήθηκε με επιτυχία επειδή το ερώτημα επέστρεψε μια πλειάδα που περιέχει το όνομα του πίνακα. Αν ρωτήσουμε sqlite_master για έναν ανύπαρκτο πίνακα (όπως ανεπιθύμητο), η res.fetchone() θα επιστρέψει None.

>>>

  1. >>> res = cur.execute("SELECT name FROM sqlite_master WHERE name='spam'")
  2. >>> res.fetchone() is None
  3. True

Τώρα, προσθέστε δύο σειρές δεδομένων που παρέχονται ως κυριολεκτικά SQL εκτελώντας έναINSERTδήλωση, για άλλη μια φορά καλώνταςcur.execute(...):
Τώρα, προσθέστε δύο σειρές δεδομένων, που παρέχονται ως κυριολεκτικά SQL, εκτελώντας μια πρόταση INSERT (καλώντας ξανά το cur.execute(...)):

  1. cur.execute("""
  2. INSERT INTO movie VALUES
  3. ('Monty Python and the Holy Grail', 1975, 8.2),
  4. ('And Now for Something Completely Different', 1971, 7.5)
  5. """)

οINSERTΗ δήλωση ανοίγει σιωπηρά μια συναλλαγή, η οποία πρέπει να δεσμευτεί πριν αποθηκευτούν οι αλλαγές στη βάση δεδομένων (βλΈλεγχος συναλλαγώνγια λεπτομέρειες). Κλήσηcon.commit()στο αντικείμενο σύνδεσης για να πραγματοποιήσετε τη συναλλαγή:
Η δήλωση INSERT ξεκινά σιωπηρά και αυτόματα μια συναλλαγή που πρέπει να δεσμευτεί πριν αποθηκευτούν οι αλλαγές στη βάση δεδομένων (δείτε Έλεγχος συναλλαγών για λεπτομέρειες). Καλέστε την con.commit() στο αντικείμενο σύνδεσης για να πραγματοποιήσετε τη συναλλαγή:

con.commit()

Μπορούμε να επαληθεύσουμε ότι τα δεδομένα εισήχθησαν σωστά εκτελώντας aSELECT ερώτηση. Χρησιμοποιήστε το πλέον γνωστόcur.execute(...)για να εκχωρήσετε το αποτέλεσμα σεresκαι καλέστεres.fetchall()για να επιστρέψετε όλες τις σειρές που προκύπτουν:
Μπορούμε να επαληθεύσουμε ότι τα δεδομένα εισήχθησαν σωστά εκτελώντας ένα ερώτημα SELECT. Αντιστοιχίστε τα αποτελέσματα σε res χρησιμοποιώντας το γνωστό πλέον cur.execute(...) και καλέστε το res.fetchall() για να επιστρέψετε όλες τις σειρές αποτελεσμάτων:

>>>

  1. >>> res = cur.execute("SELECT score FROM movie")
  2. >>> res.fetchall()
  3. [(8.2,), (7.5,)]

Το αποτέλεσμα είναι αλίστααπό δύοtuples, ένα ανά σειρά, το καθένα περιέχει αυτήν τη σειράscoreαξία.
Το αποτέλεσμα είναι μια λίστα με δύο πλειάδες, μία για κάθε σειρά, και κάθε πλειάδα περιέχει την τιμή βαθμολογίας για αυτήν τη σειρά.

Τώρα, εισαγάγετε τρεις ακόμη σειρές καλώνταςcur.executemany(...):
Τώρα, εισαγάγετε τρεις ακόμη σειρές δεδομένων καλώντας το cur.executemany(...):

  1. data = [
  2. ("Monty Python Live at the Hollywood Bowl", 1982, 7.9),
  3. ("Monty Python's The Meaning of Life", 1983, 7.5),
  4. ("Monty Python's Life of Brian", 1979, 8.0),
  5. ]
  6. cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data)
  7. con.commit() # Remember to commit the transaction after executing INSERT.

Σημειώσε ότι?οι θέσεις κράτησης θέσης χρησιμοποιούνται για δέσμευσηdata στο ερώτημα. Να χρησιμοποιείτε πάντα σύμβολα κράτησης θέσης αντί γιαμορφοποίηση συμβολοσειρώνγια να συνδέσετε τιμές Python σε δηλώσεις SQL, για να αποφύγετεΕπιθέσεις SQL injection(βλέπωΠώς να χρησιμοποιήσετε τα σύμβολα κράτησης θέσης για τη δέσμευση τιμών σε ερωτήματα SQLΓια περισσότερες πληροφορίες).
Σημειώστε ότι το σύμβολο κράτησης θέσης χρησιμοποιείται για τη σύνδεση των δεδομένων στο ερώτημα. Να χρησιμοποιείτε πάντα σύμβολα κράτησης θέσης αντί για μορφοποίηση συμβολοσειρών για να δεσμεύετε τις τιμές της Python σε δηλώσεις SQL για να αποφύγετε επιθέσεις ένεσης SQL (δείτε "Πώς να δεσμεύετε τιμές χρησιμοποιώντας φύλακες θέσης σε ερωτήματα SQL" για περισσότερες λεπτομέρειες ).

Μπορούμε να επαληθεύσουμε ότι οι νέες σειρές εισήχθησαν εκτελώντας aSELECTερώτημα, αυτή τη φορά επαναλαμβάνοντας τα αποτελέσματα του ερωτήματος:
Μπορούμε να επαληθεύσουμε ότι η νέα σειρά έχει εισαχθεί εκτελώντας ένα ερώτημα SELECT, αυτή τη φορά θα επαναλάβουμε τα αποτελέσματα του ερωτήματος:

>>>

  1. >>> for row in cur.execute("SELECT year, title FROM movie ORDER BY year"):
  2. ... print(row)
  3. (1971, 'And Now for Something Completely Different')
  4. (1975, 'Monty Python and the Holy Grail')
  5. (1979, "Monty Python's Life of Brian")
  6. (1982, 'Monty Python Live at the Hollywood Bowl')
  7. (1983, "Monty Python's The Meaning of Life")

Κάθε σειρά αποτελείται από δύο στοιχείαπλειάδατου(year, title), που ταιριάζουν με τις στήλες που έχουν επιλεγεί στο ερώτημα.
Κάθε σειρά είναι μια πλειάδα που περιέχει δύο στοιχεία (έτος, τίτλος), που ταιριάζει με τη στήλη που έχει επιλεγεί στο ερώτημα.

Τέλος, βεβαιωθείτε ότι η βάση δεδομένων έχει γραφτεί στο δίσκο καλώνταςcon.close()για να κλείσετε την υπάρχουσα σύνδεση, να ανοίξετε μια νέα, να δημιουργήσετε έναν νέο δρομέα και, στη συνέχεια, να κάνετε ερώτημα στη βάση δεδομένων:
Τέλος, καλώνταςcon.close() για να κλείσετε την υπάρχουσα σύνδεση βάσης δεδομένων και να βεβαιωθείτε ότι η βάση δεδομένων έχει εγγραφεί στο δίσκο. Στη συνέχεια, ανοίξτε μια νέα σύνδεση, δημιουργήστε έναν νέο δρομέα και υποβάλετε ερώτημα στη βάση δεδομένων για να επαληθεύσετε ότι τα δεδομένα γράφτηκαν με επιτυχία.

>>>

  1. >>> con.close()
  2. >>> new_con = sqlite3.connect("tutorial.db")
  3. >>> new_cur = new_con.cursor()
  4. >>> res = new_cur.execute("SELECT title, year FROM movie ORDER BY score DESC")
  5. >>> title, year = res.fetchone()
  6. >>> print(f'The highest scoring Monty Python movie is {title!r}, released in {year}')
  7. The highest scoring Monty Python movie is 'Monty Python and the Holy Grail', released in 1975
  8. >>> new_con.close()

Τώρα δημιουργήσατε μια βάση δεδομένων SQLite χρησιμοποιώντας τοsqlite3μονάδα, εισήγαγε δεδομένα και ανακτούσε τιμές από αυτό με πολλούς τρόπους.
έχετε χρησιμοποιήσει τώραsqlite3 Η ενότητα δημιουργεί μια βάση δεδομένων SQLite και εισάγει και ανακτά δεδομένα από αυτήν με διάφορους τρόπους [Ανάκτηση; 】Η αξία.

Δείτε επίσηςΔείτε επίσης

ΑναφοράΠεριγραφή παραμέτρου

Λειτουργίες μονάδας

sqlite3.connect(database, timeout=5.0, detect_types=0, isolation_level='DEFERRED', check_same_thread=True, factory=sqlite3.Connection, cached_statements=128, uri=False, *, autocommit=sqlite3.LEGACY_TRANSACTION_CONTROL)

Άνοιγμα μιας σύνδεσης σε μια βάση δεδομένων SQLite Αυτή η λειτουργία χρησιμοποιείται για το άνοιγμα μιας σύνδεσης σε μια βάση δεδομένων SQLite.

Παράμετροι:
  • βάση δεδομένων (αντικείμενο που μοιάζει με μονοπάτι ) – Η διαδρομή προς το αρχείο βάσης δεδομένων που θα ανοίξει. Μπορείς να περάσεις":memory:"να δημιουργήσει έναΗ βάση δεδομένων SQLite υπάρχει μόνο στη μνήμηκαι ανοίξτε μια σύνδεση με αυτό.database (path-like object) 
    βάση δεδομένων (αντικείμενο που μοιάζει με μονοπάτι) — Αυτή είναι η διαδρομή προς το άνοιγμα της βάσης δεδομένων.Μπορείς να περάσεις":memory:"για να δημιουργήσετε μια βάση δεδομένων SQLite στη μνήμη και να ανοίξετε ένα .database (αντικείμενο που μοιάζει με διαδρομή) συνδεδεμένο σε αυτήν.

  • τέλος χρόνου (φλοτέρ) – Πόσα δευτερόλεπτα πρέπει να περιμένει η σύνδεση προτού σηκώσετε έναΛειτουργικό Σφάλμα όταν ένα τραπέζι είναι κλειδωμένο. Εάν μια άλλη σύνδεση ανοίξει μια συναλλαγή για την τροποποίηση ενός πίνακα, αυτός ο πίνακας θα κλειδωθεί μέχρι να ολοκληρωθεί η συναλλαγή. Προεπιλογή πέντεδευτερόλεπτα.timeout (float) — Η σύνδεση εκτινάσσεται όταν το τραπέζι είναι κλειδωμένοOperationalError Πόσα δευτερόλεπτα πρέπει να περιμένουμε πριν. Εάν μια άλλη σύνδεση ανοίξει μια συναλλαγή για την τροποποίηση του πίνακα, ο πίνακας θα κλειδωθεί μέχρι να ολοκληρωθεί η συναλλαγή. Η προεπιλεγμένη τιμή είναι πέντε δευτερόλεπτα.

  • εντοπισμός_τύπων (ενθ) – Ελέγξτε εάν και πώς τύπους δεδομένων δενυποστηρίζεται εγγενώς από το SQLiteαναζητούνται για να μετατραπούν σε τύπους Python, χρησιμοποιώντας τους μετατροπείς που έχουν καταχωριστείregister_converter() . Ρυθμίστε το σε οποιονδήποτε συνδυασμό (χρησιμοποιώντας|, bitwise ή) τουPARSE_DECLTYPESκαιPARSE_COLNAMESγια να ενεργοποιηθεί αυτό. Ονόματα στηλών έχει προτεραιότηταδηλωμένοι τύποι εάν έχουν οριστεί και οι δύο σημαίες. Δεν είναι δυνατός ο εντοπισμός τύπων για πεδία που δημιουργούνται (για παράδειγμαmax(data)), ακόμη και όταν τοεντοπισμός_τύπωνη παράμετρος έχει οριστεί.str θα επιστραφεί αντ' αυτού. Από προεπιλογή (0), η ανίχνευση τύπου είναι απενεργοποιημένη.
    detect_types (int)— Ελέγχει εάν και πώς εντοπίζονται προς χρήση τύποι δεδομένων που δεν υποστηρίζει εγγενώς το SQLiteregister_converter() Οι εγγεγραμμένοι μετατροπείς τους μετατρέπουν σε τύπους Python.ρυθμίστε το σεPARSE_DECLTYPESκαιPARSE_COLNAMESοποιονδήποτε συνδυασμό (χρησιμοποιώντας bitwise ή| ) για να ενεργοποιήσετε αυτήν τη δυνατότητα.Εάν έχουν οριστεί και οι δύο σημαίες, τότεΛίστα θα έχει προτεραιότηταδήλωση τύπος.Για τις δημιουργημένες περιοχές, αυτοί οι τύποι δεν μπορούν να εντοπιστούν (π.χ.max(data)), ακόμα κι αν έχει οριστείdetect_typesαντ' αυτού θα επιστρέψειstr τύπος. Από προεπιλογή (0), η ανίχνευση τύπου είναι απενεργοποιημένη.


Τοποθετήστε το εδώ
Σε αυτήν την αγγλική παράγραφο, ποιος είναι το θέμα του " are looked up to";
Σε αυτήν την αγγλική παράγραφο, το θέμα του " are looked to" είναι εκείνοι οι "τύποι δεδομένων που δεν υποστηρίζονται εγγενώς από το SQLite (τύποι δεδομένων που δεν υποστηρίζονται εγγενώς από το SQLite)".Αυτή η πρόταση σημαίνει ότι με τη χρήσηregister_converter() Εγγεγραμμένοι μετατροπείς για εύρεση και μετατροπή τύπων δεδομένων που δεν υποστηρίζονται εγγενώς από SQLite σε τύπους Python. Έτσι, τα θέματα είναι εκείνοι οι συγκεκριμένοι τύποι δεδομένων που πρέπει να βρεθούν και να μετατραπούν.

  • απομόνωση_επίπεδο (str | Κανένας ) – Ελέγξτε τη συμπεριφορά χειρισμού συναλλαγών παλαιού τύπου. ΒλέπωConnection.isolation_levelκαιΈλεγχος συναλλαγής μέσω του χαρακτηριστικού isolation_level Για περισσότερες πληροφορίες. Μπορεί να είναι"DEFERRED"(Προκαθορισμένο),"EXCLUSIVE"ή"IMMEDIATE" ; ήNone για να απενεργοποιήσετε σιωπηρά το άνοιγμα συναλλαγών. Δεν έχει αποτέλεσμα εκτός ανConnection.autocommitΈχει οριστείLEGACY_TRANSACTION_CONTROL(η προεπιλεγμένη).
    isolation_level(Συμβολοσειρά | Κανένα) – Ελέγξτε τη συμπεριφορά επεξεργασίας συναλλαγών παλαιού τύπου.Για περισσότερες πληροφορίες, βλConnection.isolation_levelκαι «περνάωisolation_levelΣυναλλαγή Ελέγχου Περιουσίας". Μπορεί να είναι"DEFERRED"(Προεπιλεγμένη τιμή),"EXCLUSIVE"ή"IMMEDIATE";ή ορίστε σεNone για να απενεργοποιήσετε σιωπηρά το άνοιγμα συναλλαγών.ΕκτόςConnection.autocommitΟρίζεται ωςLEGACY_TRANSACTION_CONTROL(προεπιλογή), διαφορετικά αυτή η ρύθμιση δεν έχει καμία επίδραση.

  • check_same_thread (bool) - ΑνTrue(Προκαθορισμένο),Σφάλμα προγραμματισμού θα αυξηθεί εάν η σύνδεση της βάσης δεδομένων χρησιμοποιείται από ένα νήμα διαφορετικό από αυτό που τη δημιούργησε. ΑνFalse , η σύνδεση μπορεί να είναι προσβάσιμη σε πολλαπλά νήματα. Οι λειτουργίες εγγραφής μπορεί να χρειαστεί να σειριοποιηθούν από τον χρήστη για να αποφευχθεί η καταστροφή των δεδομένων. Βλέπωασφάλεια νήματοςΓια περισσότερες πληροφορίες.
    check_same_thread(Boolean τιμή) – Εάν έχει οριστεί σεTrue(προεπιλογή), θα αυξηθεί όταν η σύνδεση της βάσης δεδομένων χρησιμοποιείται από ένα νήμα διαφορετικό από το νήμα που τη δημιούργησε.ProgrammingError ασυνήθιστος.Εάν έχει οριστεί σεFalse , επιτρέπεται σε πολλά νήματα να έχουν πρόσβαση στη σύνδεση, αλλά οι χρήστες μπορεί να χρειαστεί να κάνουν σειριακή εγγραφή (συνεχώς) για να αποφύγουν την καταστροφή δεδομένων.Για περισσότερες πληροφορίες βλthreadsafetyοδηγία του.

  • εργοστάσιο (Σύνδεση) – Μια προσαρμοσμένη υποκατηγορία τουΣύνδεσηγια να δημιουργήσετε τη σύνδεση με, αν όχι την προεπιλογήΣύνδεσητάξη.
    factory(Σύνδεση) – Εάν δεν χρησιμοποιείται η προεπιλογήConnectionτάξη, καθορίστε ένα έθιμοConnection Υποκλάση για τη δημιουργία της σύνδεσης. Αυτή η παράμετρος σάς επιτρέπει να προσαρμόσετε τη συμπεριφορά της σύνδεσης της βάσης δεδομένων σύμφωνα με συγκεκριμένες ανάγκες ή επεκτάσεις.

  • cached_statements (ενθ) – Ο αριθμός των δηλώσεων πουsqlite3 θα πρέπει να αποθηκεύσει εσωτερικά την κρυφή μνήμη για αυτήν τη σύνδεση, για να αποφευχθεί η επιβάρυνση της ανάλυσης. Από προεπιλογή, 128 δηλώσεις.
    cached_statements(int) – sqlite3 Ο αριθμός των δηλώσεων που θα πρέπει να αποθηκευτούν στην κρυφή μνήμη εσωτερικά για αυτήν τη σύνδεση για να αποφευχθεί η επιβάρυνση της ανάλυσης. Από προεπιλογή, αποθηκεύονται προσωρινά 128 δηλώσεις. Αυτή η παράμετρος σάς επιτρέπει να προσαρμόσετε το μέγεθος της προσωρινής μνήμης για να βελτιστοποιήσετε την απόδοση ή τη χρήση της μνήμης.

  • uri (bool) – Εάν έχει οριστεί σεTrueβάση δεδομένων ερμηνεύεται ως URI με διαδρομή αρχείου και προαιρετική συμβολοσειρά ερωτήματος. Το μέρος του σχήματοςπρέπειείναι"file:" , και η διαδρομή μπορεί να είναι σχετική ή απόλυτη. Η συμβολοσειρά ερωτήματος επιτρέπει τη μετάδοση παραμέτρων στο SQLite, επιτρέποντας διάφορεςΠώς να εργαστείτε με SQLite URI.
    uri(μπολ) – Εάν έχει οριστεί σεTrue,αλλάdatabase Ερμηνεύεται ως Uniform Resource Identifier (URI) με διαδρομή αρχείου και προαιρετική συμβολοσειρά ερωτήματος. Το τμήμα σχήματος του URIπρέπει είναι "αρχείο:", η διαδρομή μπορεί να είναι σχετική ή απόλυτη. Οι συμβολοσειρές ερωτημάτων επιτρέπουν τη μετάδοση παραμέτρων στο SQLite, επιτρέποντας διάφορους τρόπους εργασίας με SQLite URI. Αυτό επιτρέπει πιο σύνθετες επιλογές σύνδεσης βάσης δεδομένων, όπως ρύθμιση λειτουργίας μόνο για ανάγνωση, καθορισμός μεγέθους προσωρινής μνήμης κ.λπ.

  • αυτόματη δέσμευση (bool) - ΕλεγχοςPEP 249 συμπεριφορά χειρισμού συναλλαγών. ΒλέπωConnection.autocommitκαιΈλεγχος συναλλαγών μέσω του χαρακτηριστικού autocommitΓια περισσότερες πληροφορίες.αυτόματη δέσμευσηεπί του παρόντος είναι προεπιλογή σεLEGACY_TRANSACTION_CONTROL . Η προεπιλογή θα αλλάξει σεFalseσε μελλοντική έκδοση Python.
    autocommit(μπολ) – Ελέγξτε τη συμπεριφορά επεξεργασίας συναλλαγών σύμφωνα με το PEP 249.Για περισσότερες πληροφορίες, βλConnection.autocommit και "Έλεγχος συναλλαγών μέσω του χαρακτηριστικού autocommit." στο παρόν,autocommitΗ προεπιλεγμένη τιμή έχει οριστεί σεLEGACY_TRANSACTION_CONTROL , πράγμα που σημαίνει ότι ακολουθεί τη συμπεριφορά ελέγχου συναλλαγών παλαιού τύπου της προδιαγραφής API της βάσης δεδομένων Python (PEP 249).Ωστόσο, σε μια μελλοντική έκδοση της Python, η προεπιλογή θα αλλάξει σεFalse, πράγμα που σημαίνει ότι οι συναλλαγές δεν δεσμεύονται αυτόματα από προεπιλογή και απαιτούν από τον χρήστη να ελέγχει ρητά την έναρξη και τη λήξη της συναλλαγής.

Παρακαλώ σημειώστε,*Οι παράμετροι χρησιμοποιούνται στους ορισμούς συναρτήσεων ως διαχωριστικά μεταξύ ορισμάτων θέσης και λέξεων-κλειδιών, που σημαίνειautocommitΌλες οι παράμετροι μετά από αυτό πρέπει να είναι παράμετροι λέξης-κλειδιού.

Τύπος επιστροφής:Τύπος επιστροφής: 

Σύνδεση

Ανεβάζει έναεκδήλωση ελέγχου sqlite3.connectμε επιχείρημαdatabase.
sqlite3.connect: Οταν χρησιμοποιείτεdatabaseΠαράμετροι που ρίχνονται κατά τη σύνδεση στη βάση δεδομένων.

Ανεβάζει έναεκδήλωση ελέγχου sqlite3.connect/handleμε επιχείρημαconnection_handle.
sqlite3.connect/handle: Όταν η λαβή σύνδεσης (connection_handle) ρίχνεται όταν δημιουργείται.

Αλλαγή στην έκδοση 3.4: Προστέθηκε τοuriπαράμετρος.
Στην έκδοση 3.4: προστέθηκεuriΠαράμετρος που επιτρέπει τον καθορισμό του αρχείου βάσης δεδομένων χρησιμοποιώντας μορφή URI.

Άλλαξε στην έκδοση 3.7:βάση δεδομένωνμπορεί τώρα να είναι και ααντικείμενο που μοιάζει με μονοπάτι, όχι μόνο μια χορδή.
Στην έκδοση 3.7:databaseΟι παράμετροι μπορούν πλέον να είναι ένα αντικείμενο που μοιάζει με μονοπάτι αντί για συμβολοσειρές.

Αλλαγή στην έκδοση 3.10: Προστέθηκε τοsqlite3.connect/handleεκδήλωση ελέγχου.
Στην έκδοση 3.10: προστέθηκεsqlite3.connect/handleΣυμβάν ελέγχου, το οποίο ενεργοποιείται όταν δημιουργείται η λαβή σύνδεσης.

Αλλαγή στην έκδοση 3.12: Προστέθηκε τοαυτόματη δέσμευσηπαράμετρος.
Στην έκδοση 3.12: προστέθηκεautocommitΠαράμετροι που επιτρέπουν καλύτερο έλεγχο της συμπεριφοράς αυτόματης δέσμευσης των συναλλαγών.

sqlite3.complete_statement(δήλωση)

ΕΠΙΣΤΡΟΦΗTrueαν η χορδήδήλωση φαίνεται να περιέχει μία ή περισσότερες πλήρεις δηλώσεις SQL. Δεν πραγματοποιείται καμία συντακτική επαλήθευση ή ανάλυση οποιουδήποτε είδους, εκτός από τον έλεγχο ότι δεν υπάρχουν κυριολεκτικά μη κλειστές συμβολοσειρές και ότι η δήλωση τερματίζεται με ερωτηματικό.
αν χορδήstatementφαίνεται να περιέχει μία ή περισσότερες πλήρεις δηλώσεις SQL και μετά επιστρέφειTrue . Καμία επικύρωση σύνταξης ή ανάλυση δεν γίνεται εκτός από τον έλεγχο ότι δεν υπάρχουν κλειστά γράμματα συμβολοσειράς και ότι η πρόταση τελειώνει με ερωτηματικό.

Για παράδειγμα:Παράδειγμα

>>>

  1. >>> sqlite3.complete_statement("SELECT foo FROM bar;")
  2. True
  3. >>> sqlite3.complete_statement("SELECT foo")
  4. False

Αυτή η συνάρτηση μπορεί να είναι χρήσιμη κατά την εισαγωγή στη γραμμή εντολών για να προσδιοριστεί εάν το εισαγόμενο κείμενο φαίνεται να σχηματίζει μια πλήρη δήλωση SQL ή εάν απαιτείται πρόσθετη εισαγωγή πριν από την κλήσηεκτέλεση().
Αυτή η συνάρτηση μπορεί να είναι χρήσιμη όταν πληκτρολογείτε στη γραμμή εντολών, για να προσδιορίσετε εάν το εισαγόμενο κείμενο μοιάζει με μια πλήρη πρόταση SQL ή κατά την κλήσηexecute()Εάν απαιτείται πρόσθετη εισαγωγή πριν.

Βλέπωrunsource()σεLib/sqlite3/__main__.pyγια χρήση σε πραγματικό κόσμο.
Σε πρακτικές εφαρμογές, μπορείτε να ανατρέξετε στοLib/sqlite3/__main__.pyΜέσηςrunsource()λειτουργία για την κατανόηση της χρήσης του.

sqlite3.enable_callback_tracebacks(σημαία/)

Ενεργοποίηση ή απενεργοποίηση ανιχνεύσεων επανάκλησης. Από προεπιλογή δεν θα λαμβάνετε ανιχνεύσεις σε συναρτήσεις που καθορίζονται από το χρήστη, συγκεντρωτικά στοιχεία, μετατροπείς, επανάκληση εξουσιοδοτητή κ.λπ. Εάν θέλετε να τα διορθώσετε, μπορείτε να καλέσετε αυτήν τη συνάρτηση μεσημαίαοριστεί σεTrue . Στη συνέχεια, θα λαμβάνετε ίχνη από τις επιστροφές κλήσεωνsys.stderr . ΧρήσηFalseγια να απενεργοποιήσετε ξανά τη δυνατότητα.
Ενεργοποίηση ή απενεργοποίηση της παρακολούθησης επανάκλησης. Από προεπιλογή, δεν θα λαμβάνετε ανιχνεύσεις σε συναρτήσεις που καθορίζονται από το χρήστη, συγκεντρωτικές συναρτήσεις, μετατροπείς, επανάκληση εξουσιοδότησης κ.λπ.Εάν θέλετε να τα διορθώσετε, μπορείτε να καλέσετε αυτήν τη συνάρτηση και να την αντικαταστήσετεflagΟρίζεται ωςTrue .Μετά, θα μπορείτεsys.stderr Λάβετε πληροφορίες ίχνους από την επανάκληση.χρήσηFalseγια να απενεργοποιήσετε ξανά αυτήν τη δυνατότητα.

Σημείωση

Τα σφάλματα στις επανακλήσεις συναρτήσεων που ορίζονται από το χρήστη καταγράφονται ως εξαιρέσεις που δεν μπορούν να επισημανθούν. Χρησιμοποιήστε έναμη ανυψωμένος χειριστής γάντζουγια ενδοσκόπηση της αποτυχημένης επανάκλησης.
Τα σφάλματα στις επανακλήσεις συναρτήσεων που ορίζονται από το χρήστη καταγράφονται ως μη συλληφθείσες εξαιρέσεις. Χρησιμοποιήστε έναν χειριστή άγκιστρου που δεν μπορεί να ανυψωθεί για να πραγματοποιήσετε ενδοσκόπηση σε αποτυχημένες επανακλήσεις.

 

Αυτό σημαίνει ότι όταν εμφανίζονται σφάλματα σε επανακλήσεις των συναρτήσεων που καθορίζονται από το χρήστη του SQLite (όπως συναρτήσεις συγκεντρωτικών συναρτήσεων, βαθμωτές συναρτήσεις κ.λπ.), αυτά τα σφάλματα δεν εμφανίζονται όπως οι κανονικές εξαιρέσεις της Python και μπορούν να εντοπιστούν από μπλοκ try-except. Αντίθετα, καταγράφονται από το SQLite ή τη μονάδα sqlite3 της Python και καταγράφονται με κάποιο τρόπο (συνήθως γράφονται στο αρχείο καταγραφής ή στην έξοδο τυπικού σφάλματος), αλλά δεν διακόπτουν την εκτέλεση του προγράμματος (εκτός εάν το σφάλμα είναι πολύ σοβαρό).

Για να επιθεωρήσετε και να διορθώσετε αυτές τις εξαιρέσεις που δεν μπορούν να εντοπιστούν, μπορείτε να ρυθμίσετε έναν "χειριστή αιχμαλωτού γάντζου". Αυτός ο χειριστής είναι μια συνάρτηση που καλεί η Python όταν εμφανίζεται μια μη συλληφθείσα εξαίρεση, μεταβιβάζοντας τις πληροφορίες εξαίρεσης ως παράμετρο. Με αυτόν τον τρόπο, μπορείτε να γράψετε κώδικα στη λειτουργία του επεξεργαστή για να καταγράψετε ή να ελέγξετε για αυτές τις εξαιρέσεις για να βοηθήσετε στη διάγνωση του προβλήματος.

Λάβετε υπόψη ότι η συγκεκριμένη υλοποίηση μπορεί να διαφέρει ανάλογα με την έκδοση της Python και τις λεπτομέρειες υλοποίησης της ενότητας sqlite3. Επομένως, συνιστάται να συμβουλευτείτε την πιο πρόσφατη τεκμηρίωση της Python ή την τεκμηρίωση της λειτουργικής μονάδας sqlite3 για να μάθετε πώς να ρυθμίζετε και να χρησιμοποιείτε το uncatchable hook handler.

sqlite3.register_adapter(τύποςπροσαρμογέας/)

Εγγραφή απροσαρμογέας κλητόςγια να προσαρμόσετε τον τύπο Pythonτύπος σε τύπο SQLite. Ο προσαρμογέας καλείται με ένα αντικείμενο Python τύπουτύποςως το μοναδικό του όρισμα και πρέπει να επιστρέψει μια τιμή aτύπου που κατανοεί εγγενώς το SQLite.
Καταχωρίστε ένα **προσαρμογέα** καλούμενο αντικείμενο για μετατροπή Pythontype Ο τύπος είναι προσαρμοσμένος σε έναν τύπο που το SQLite μπορεί να κατανοήσει εγγενώς.Αυτή η λειτουργία προσαρμογέα χρειάζεται αtypeΈνα αντικείμενο τύπου καλείται ως το μόνο όρισμα και πρέπει να επιστρέψει μια τιμή ενός τύπου που υποστηρίζει εγγενώς το SQLite.
 

Πρέπει να σημειωθεί ότι το «typeτύπου" μπορεί να είναι λίγο παραπλανητικό, γιατί συνήθως δεν αναφερόμαστε στο ενσωματωμένο της Pythontype Τα αντικείμενα (δηλαδή οι ίδιοι οι τύποι) αποθηκεύονται απευθείας στη βάση δεδομένων. Συνηθέστερα, θέλουμε να προσαρμόσουμε αντικείμενα στην Python (τα οποία μπορεί να είναι στιγμιότυπα προσαρμοσμένων τύπων) σε μια μορφή που μπορεί να αποθηκεύσει το SQLite.Ωστόσο, παίρνοντας την πρόταση κυριολεκτικά, αν χρειάζεται να ασχοληθείτεtypeτο ίδιο το αντικείμενο (αν και αυτό είναι σπάνιο στην πράξη), θα χρειαστεί να γράψετε έναν προσαρμογέα για να το μετατρέψετε σε κάποια μορφή που μπορεί να αποθηκεύσει το SQLite, όπως μια συμβολοσειρά που αντιπροσωπεύει το όνομα του τύπου.

Ωστόσο, μια πιο συνηθισμένη περίπτωση χρήσης είναι για προσαρμοσμένους τύπους Python ή ενσωματωμένους τύπους όπωςdatetimedecimal.Decimalκ.λπ.) γράψτε προσαρμογείς ώστε να μπορούν να αποθηκευτούν και να ανακτηθούν σωστά από τη βάση δεδομένων SQLite.

Για παράδειγμα, εάν έχετε μια προσαρμοσμένη κλάση PythonMyClass, και θέλετε να αποθηκεύσετε την παρουσία του σε μια βάση δεδομένων SQLite, μπορείτε να γράψετε έναν προσαρμογέα για να μετατρέψετε μια παρουσία αυτής της κλάσης σε μια συμβολοσειρά (ή άλλο τύπο) που μπορεί να αποθηκευτεί από το SQLite και, στη συνέχεια, να γράψετε έναν μετατροπέα για μετατροπή Μετατροπή αυτής της συμβολοσειράς πίσω προς τηνMyClassπαράδειγμα.

Ωστόσο, για αυτήν την ερώτηση, αν θέλετε απλώς να ασχοληθείτε με την Pythontypeαντικείμενο (δηλαδή τα μεταδεδομένα του τύπου), μπορείτε να γράψετε έναν προσαρμογέα για να επιστρέψετε το όνομα του τύπου (ως συμβολοσειρά), αλλά αυτή γενικά δεν είναι μια κοινή πρακτική για την αποθήκευση αντικειμένων σε μια βάση δεδομένων.

sqlite3.register_converter(όνομα τύπουμετατροπέας/)

Εγγραφείτε τομετατροπέας κλητόςγια να μετατρέψετε αντικείμενα τύπου SQLiteόνομα τύπου σε ένα αντικείμενο Python συγκεκριμένου τύπου. Ο μετατροπέας καλείται για όλες τις τιμές τύπου SQLiteόνομα τύπου ; περνιέται αbyte αντικείμενο και θα πρέπει να επιστρέψει ένα αντικείμενο του επιθυμητού τύπου Python. Συμβουλευτείτε την παράμετροεντοπισμός_τύπωντουσυνδέω-συωδεομαι()για πληροφορίες σχετικά με τον τρόπο λειτουργίας της ανίχνευσης τύπου.
Καταχωρίστε ένα αντικείμενο **μετατροπέα** για τη μετατροπή τύπων SQLite σεtypename Μετατρέπει ένα αντικείμενο σε αντικείμενο Python συγκεκριμένου τύπου.Για όλους τους τύπουςtypenameΑυτός ο μετατροπέας καλείται για οποιαδήποτε τιμή SQLite λαμβάνειbytes αντικείμενο ως όρισμα και θα πρέπει να επιστρέψει ένα αντικείμενο του απαιτούμενου τύπου Python.Για τον τρόπο λειτουργίας της ανίχνευσης τύπου, ανατρέξτε στοconnect()Λειτουργικόςdetect_typesπαράμετρος.

Σημείωση:όνομα τύπουκαι το όνομα του τύπου στο ερώτημά σας αντιστοιχίζονται χωρίς διάκριση πεζών-κεφαλαίων.
ΕιδοποίησηtypenameΤο όνομα του τύπου στο ερώτημα δεν κάνει διάκριση πεζών-κεφαλαίων κατά την αντιστοίχιση.

Σταθερές μονάδων

sqlite3.LEGACY_TRANSACTION_CONTROL

Σειράαυτόματη δέσμευση σε αυτήν τη σταθερά για να επιλέξετε τη συμπεριφορά ελέγχου συναλλαγών παλιού στυλ (προ της Python 3.12). ΒλέπωΈλεγχος συναλλαγής μέσω του χαρακτηριστικού isolation_levelΓια περισσότερες πληροφορίες.
Θαautocommit Ρυθμίστε σε αυτήν τη σταθερά για να επιλέξετε συμπεριφορά ελέγχου συναλλαγών παλαιού τύπου (προ της Python 3.12).Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα «Πάσοisolation_levelΣυναλλαγές ελέγχου ακινήτων».

sqlite3.PARSE_COLNAMES

Περάστε αυτήν την τιμή σημαίας στοεντοπισμός_τύπωνπαράμετρος τουσυνδέω-συωδεομαι() για να αναζητήσετε μια συνάρτηση μετατροπέα χρησιμοποιώντας το όνομα τύπου, που αναλύεται από το όνομα της στήλης ερωτήματος, ως κλειδί λεξικού μετατροπέα. Το όνομα του τύπου πρέπει να είναι τυλιγμένο σε αγκύλες ([]).
Περάστε αυτήν την τιμή σημαίας σεconnect()Λειτουργικόςdetect_types Παράμετρος για την εύρεση της συνάρτησης μετατροπέα υποβάλλοντας ερώτημα στο όνομα επιλυμένου τύπου στο όνομα της στήλης ως κλειδί στο λεξικό του μετατροπέα. Τα ονόματα τύπων πρέπει να περικλείονται σε αγκύλες ([]).

SELECT p as "p [point]" FROM test;  ! will look up converter "point"

Αυτή η σημαία μπορεί να συνδυαστεί μεPARSE_DECLTYPESχρησιμοποιώντας την|(bitwise ή) τελεστής.
Αυτή η σημαία μπορεί να χρησιμοποιηθεί|(bitwise OR) τελεστής ANDPARSE_DECLTYPESΣε συνδυασμό με.

sqlite3.PARSE_DECLTYPES

Περάστε αυτήν την τιμή σημαίας στοεντοπισμός_τύπωνπαράμετρος τουσυνδέω-συωδεομαι() για να αναζητήσετε μια συνάρτηση μετατροπέα χρησιμοποιώντας τους δηλωμένους τύπους για κάθε στήλη. Οι τύποι δηλώνονται όταν δημιουργείται ο πίνακας βάσης δεδομένων.sqlite3 θα αναζητήσει μια συνάρτηση μετατροπέα χρησιμοποιώντας την πρώτη λέξη του δηλωμένου τύπου ως κλειδί λεξικού μετατροπέα. Για παράδειγμα:
Περάστε αυτήν την τιμή σημαίας σεconnect()Λειτουργικόςdetect_types Παράμετροι για την εύρεση της συνάρτησης μετατροπέα χρησιμοποιώντας τον δηλωμένο τύπο κάθε στήλης στη βάση δεδομένων. Αυτοί οι τύποι δηλώνονται κατά τη δημιουργία του πίνακα βάσης δεδομένων.sqlite3 Η λειτουργία μετατροπέα θα αναζητηθεί χρησιμοποιώντας την πρώτη λέξη στον δηλωμένο τύπο ως κλειδί του λεξικού μετατροπέα. Για παράδειγμα:

  1. CREATE TABLE test(
  2. i integer primary key, ! will look up a converter named "integer"
  3. p point, ! will look up a converter named "point"
  4. n number(10) ! will look up a converter named "number"
  5. )

Αυτή η σημαία μπορεί να συνδυαστεί μεPARSE_COLNAMESχρησιμοποιώντας την|(bitwise ή) τελεστής.

sqlite3.SQLITE_OK
sqlite3.SQLITE_DENY
sqlite3.SQLITE_IGNORE

Σημαίες που πρέπει να επιστραφούν από τοautorizer_callback κλητόςπέρασε σεConnection.set_authorizer(), για να υποδείξετε εάν:
Περνάω σεConnection.set_authorizer()τουauthorizer_callbackΣημαίες που πρέπει να επιστρέψει η καλούμενη συνάρτηση για να υποδείξουν:

  • Επιτρέπεται η πρόσβαση (SQLITE_OK), επιτρέπεται η πρόσβαση (SQLITE_OK

  • Η πρόταση SQL θα πρέπει να ακυρωθεί με ένα σφάλμα (SQLITE_DENY)
    Η πρόταση SQL θα πρέπει να ακυρωθεί με ένα σφάλμα (SQLITE_DENY

  • Η στήλη θα πρέπει να αντιμετωπίζεται ως αNULLαξία (SQLITE_IGNORE)
    Οι στήλες θα πρέπει να αντιμετωπίζονται ως τιμές NULL (SQLITE_IGNORE

sqlite3.apilevel

Σταθερά συμβολοσειράς που δηλώνει το υποστηριζόμενο επίπεδο DB-API. Απαιτείται από το DB-API. Σκληρά κωδικοποιημένα σε"2.0".
Αυτές οι δύο σταθερές συμβολοσειράς είναιsqlite3Καθορισμένα σε λειτουργικές μονάδες, ακολουθούν την προδιαγραφή API της βάσης δεδομένων Python (DB-API).

sqlite3.paramstyle

Σταθερά συμβολοσειράς που δηλώνει τον τύπο μορφοποίησης δείκτη παραμέτρων που αναμένεται από τοsqlite3 μονάδα μέτρησης. Απαιτείται από το DB-API. Σκληρά κωδικοποιημένα σε"qmark".
Αυτή η σταθερά συμβολοσειράς καθορίζειsqlite3 Ο τύπος μορφοποίησης δείκτη παραμέτρων που αναμένεται από τη μονάδα. Αυτό απαιτείται από την προδιαγραφή DB-API (Database Application Programming Interface).Είναι κωδικοποιημένο ως"qmark", σημαίνει ότι κατά την κατασκευή ερωτημάτων SQL, οι δείκτες παραμέτρων πρέπει να αντιπροσωπεύονται με ερωτηματικά (?).

Σημείωση

οnamedΥποστηρίζεται επίσης το στυλ παραμέτρου DB-API.

sqlite3.sqlite_version

Αριθμός έκδοσης της βιβλιοθήκης SQLite χρόνου εκτέλεσης ως ασειρά.
Ο αριθμός έκδοσης της βιβλιοθήκης χρόνου εκτέλεσης SQLite, εκφρασμένος σε μορφή συμβολοσειράς.

sqlite3.sqlite_version_info

Αριθμός έκδοσης της βιβλιοθήκης SQLite χρόνου εκτέλεσης ως απλειάδατουακέραιοι αριθμοί.
Ο αριθμός έκδοσης της βιβλιοθήκης χρόνου εκτέλεσης SQLite, που εκφράζεται ως πλειάδα ακεραίων.

sqlite3.ασφάλεια νημάτων

Ακέραια σταθερά που απαιτείται από το DB-API 2.0, δηλώνοντας το επίπεδο ασφάλειας νήματοςsqlite3 υποστηρίζει μονάδα. Αυτό το χαρακτηριστικό ορίζεται με βάση την προεπιλογήλειτουργία σπειρώματος μεταγλωττίζεται η υποκείμενη βιβλιοθήκη SQLite. Οι λειτουργίες νήματος SQLite είναι:
Ακέραια σταθερά που απαιτείται από το DB-API 2.0, που δείχνειsqlite3 Το επίπεδο ασφάλειας νήματος που υποστηρίζεται από τη μονάδα. Αυτή η ιδιότητα ορίζεται σύμφωνα με την προεπιλεγμένη λειτουργία νήματος με την οποία έχει μεταγλωττιστεί η υποκείμενη βιβλιοθήκη SQLite. Οι λειτουργίες νήματος του SQLite περιλαμβάνουν:

  1. Μονόκλωστο: Σε αυτήν τη λειτουργία, όλα τα mutexe είναι απενεργοποιημένα και το SQLite δεν είναι ασφαλές για χρήση σε περισσότερα από ένα νήμα ταυτόχρονα.
    Single-thread: Σε αυτήν τη λειτουργία, όλα τα mutexe είναι απενεργοποιημένα και το SQLite δεν είναι ασφαλές για χρήση από πολλά νήματα ταυτόχρονα.

  2. Πολλαπλών νημάτων: Σε αυτήν τη λειτουργία, το SQLite μπορεί να χρησιμοποιηθεί με ασφάλεια από πολλαπλά νήματα, υπό την προϋπόθεση ότι δεν χρησιμοποιείται ταυτόχρονη σύνδεση μεμονωμένης βάσης δεδομένων σε δύο ή περισσότερα νήματα.
    Multi-thread: Σε αυτήν τη λειτουργία, το SQLite μπορεί να χρησιμοποιηθεί με ασφάλεια από πολλαπλά νήματα, υπό την προϋπόθεση ότι καμία σύνδεση μεμονωμένης βάσης δεδομένων δεν χρησιμοποιείται ταυτόχρονα από δύο ή περισσότερα νήματα.

  3. Σειριακά: Σε σειριακή λειτουργία, το SQLite μπορεί να χρησιμοποιηθεί με ασφάλεια από πολλαπλά νήματα χωρίς περιορισμό.
    Serialized: Σε σειριακή λειτουργία, το SQLite μπορεί να χρησιμοποιηθεί με ασφάλεια από πολλαπλά νήματα χωρίς περιορισμούς.

Οι αντιστοιχίσεις από τις λειτουργίες νήματος SQLite στα επίπεδα ασφάλειας νημάτων DB-API 2.0 είναι οι εξής:
Η αντιστοίχιση της λειτουργίας νήματος του SQLite στο επίπεδο ασφάλειας νημάτων DB-API 2.0 είναι η εξής:

Λειτουργία νήματος SQLite

ασφάλεια νήματος

SQLITE_THREADSAFE

Σημασία DB-API 2.0

μονής κλωστής

0

0

Τα νήματα ενδέχεται να μην μοιράζονται τη λειτουργική μονάδα

πολλαπλών νημάτων

1

2

Τα νήματα ενδέχεται να μοιράζονται τη λειτουργική μονάδα, αλλά όχι τις συνδέσεις

σειριακά

3

1

Τα νήματα ενδέχεται να μοιράζονται τη μονάδα, τις συνδέσεις και τους δρομείς

Άλλαξε στην έκδοση 3.11: Ορισμόςασφάλεια νήματοςδυναμικά αντί για σκληρή κωδικοποίηση1.

sqlite3.version

Αριθμός έκδοσης αυτής της ενότητας ως ασειρά . Αυτή δεν είναι η έκδοση της βιβλιοθήκης SQLite.
Ο αριθμός έκδοσης αυτής της ενότητας, εκφρασμένος ως συμβολοσειρά.ΑυτόόχιΟ αριθμός έκδοσης της βιβλιοθήκης SQLite.

Καταργήθηκε από την έκδοση 3.12, θα καταργηθεί στην έκδοση 3.14: Αυτή η σταθερά χρησιμοποιείται για να αντικατοπτρίζει τον αριθμό έκδοσης τουpysqliteπακέτο, μια βιβλιοθήκη τρίτου μέρους που συνήθιζε να αλλάζει στο upstreamsqlite3 . Σήμερα, δεν έχει κανένα νόημα ή πρακτική αξία.
Καταργήθηκε από την έκδοση 3.12, προς κατάργηση στην έκδοση 3.14: Αυτή η σταθερά χρησιμοποιήθηκε για να αντικατοπτρίζειpysqliteΟ αριθμός έκδοσης του πακέτου,pysqliteΕίναι μια βιβλιοθήκη τρίτου μέρους που έχει μεταφορτωθεί στο upstreamsqlite3 Δεσμεύστε τις αλλαγές. Τώρα, δεν έχει πραγματικό νόημα ή πρακτική αξία.

sqlite3.version_info

Αριθμός έκδοσης αυτής της ενότητας ως απλειάδατουακέραιοι αριθμοί . Αυτή δεν είναι η έκδοση της βιβλιοθήκης SQLite.

Καταργήθηκε από την έκδοση 3.12, θα καταργηθεί στην έκδοση 3.14: Αυτή η σταθερά χρησιμοποιείται για να αντικατοπτρίζει τον αριθμό έκδοσης τουpysqliteπακέτο, μια βιβλιοθήκη τρίτου μέρους που συνήθιζε να αλλάζει στο upstreamsqlite3 . Σήμερα, δεν έχει κανένα νόημα ή πρακτική αξία.

sqlite3.SQLITE_DBCONFIG_DEFENSIVE
sqlite3.SQLITE_DBCONFIG_DQS_DDL
sqlite3.SQLITE_DBCONFIG_DQS_DML
sqlite3.SQLITE_DBCONFIG_ENABLE_FKEY
sqlite3.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
sqlite3.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
sqlite3.SQLITE_DBCONFIG_ENABLE_QPSG
sqlite3.SQLITE_DBCONFIG_ENABLE_TRIGGER
sqlite3.SQLITE_DBCONFIG_ENABLE_VIEW
sqlite3.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
sqlite3.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
sqlite3.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
sqlite3.SQLITE_DBCONFIG_RESET_DATABASE
sqlite3.SQLITE_DBCONFIG_TRIGGER_EQP
sqlite3.SQLITE_DBCONFIG_TRUSTED_SCHEMA
sqlite3.SQLITE_DBCONFIG_WRITABLE_SCHEMA

Αυτές οι σταθερές χρησιμοποιούνται για τοConnection.setconfig()καιgetconfig()μεθόδους.
Αυτές οι σταθερές χρησιμοποιούνταιConnection.setconfig()καιgetconfig()μέθοδος.

Η διαθεσιμότητα αυτών των σταθερών ποικίλλει ανάλογα με την έκδοση του SQLite Python με την οποία έχει μεταγλωττιστεί.
Η διαθεσιμότητα αυτών των σταθερών εξαρτάται από την έκδοση SQLite με την οποία συντάχθηκε το SQLite Python.

Προστέθηκε στην έκδοση 3.12.

Δείτε επίσης

Επιλογές διαμόρφωσης σύνδεσης βάσης δεδομένων

Έγγραφα SQLite: Επιλογές διαμόρφωσης σύνδεσης βάσης δεδομένων

Αντικείμενα σύνδεσης

τάξηsqlite3.Σύνδεση

Κάθε ανοιχτή βάση δεδομένων SQLite αντιπροσωπεύεται από έναConnectionαντικείμενο, το οποίο δημιουργείται χρησιμοποιώνταςsqlite3.connect() . Ο κύριος σκοπός τους είναι η δημιουργίαΔρομέαςαντικείμενα, καιΈλεγχος συναλλαγών.

Δείτε επίσης

Μια σύνδεση βάσης δεδομένων SQLite έχει τα ακόλουθα χαρακτηριστικά και μεθόδους:

δρομέας(εργοστάσιο=Δρομέας)

Δημιουργία και επιστροφή αΔρομέας αντικείμενο. Η μέθοδος δρομέα δέχεται μία μόνο προαιρετική παράμετροεργοστάσιο . Εάν παρέχεται, αυτό πρέπει να είναι ακλητόςεπιστρέφοντας ένα παράδειγμα τουΔρομέαςή τις υποκατηγορίες του.
Δημιουργεί a και επιστρέφει aCursorαντικείμενο.cursorΗ μέθοδος δέχεται μια προαιρετική μεμονωμένη παράμετροfactory .Εάν παρέχεται αυτή η παράμετρος, πρέπει να είναι ένα καλέσιμο αντικείμενο που επιστρέφει aCursorή ένα παράδειγμα της υποκατηγορίας του.

blobopen(τραπέζιστήλησειρά/*μόνο για ανάγνωση=Λάθοςόνομα = "κύριος")

Ανοίξτε αΑμορφη μάζαλαβή σε ένα υπάρχον BLOB.

Παράμετροι:

  • τραπέζι (str) – Το όνομα του πίνακα όπου βρίσκεται το blob.
    Το όνομα του πίνακα που περιέχει δεδομένα BLOB.

  • στήλη (str) – Το όνομα της στήλης όπου βρίσκεται το blob.
    Όνομα στήλης που περιέχει δεδομένα BLOB.

  • σειρά (str) – Το όνομα της σειράς όπου βρίσκεται το blob.
    Το όνομα της σειράς (ή ακριβέστερα το αναγνωριστικό της σειράς) που περιέχει τα δεδομένα BLOB.

  • μόνο για ανάγνωση (bool) - Οριστεί σεTrue εάν το blob πρέπει να ανοίξει χωρίς δικαιώματα εγγραφής. Προεπιλογές σεFalse.
    Εάν οριστεί σε True, υποδεικνύει ότι το BLOB πρέπει να ανοίξει χωρίς άδεια εγγραφής. Η προεπιλογή είναι False, που επιτρέπει την ανάγνωση και τη γραφή.

  • όνομα (str ) – Το όνομα της βάσης δεδομένων όπου βρίσκεται το blob. Προεπιλογές σε"main".
    Το όνομα της βάσης δεδομένων που περιέχει δεδομένα BLOB. Η προεπιλογή είναι "main", που είναι το προεπιλεγμένο όνομα βάσης δεδομένων στο SQLite.

Αυξήσεις:

Λειτουργικό Σφάλμα– Όταν προσπαθείτε να ανοίξετε μια σταγόνα σε έναWITHOUT ROWIDτραπέζι.
Όταν προσπαθείς χωρίςΣΕΙΡΑΕμφανίζεται όταν ανοίγουν τα δεδομένα BLOB στον πίνακα ID.

Τύπος επιστροφής:

Αμορφη μάζα

Σημείωση

Το μέγεθος της σταγόνας δεν μπορεί να αλλάξει χρησιμοποιώντας τοΑμορφη μάζα τάξη. Χρησιμοποιήστε τη συνάρτηση SQLzeroblobγια να δημιουργήσετε μια σταγόνα με σταθερό μέγεθος.

Προστέθηκε στην έκδοση 3.11.

διαπράττω()

Δεσμεύστε οποιαδήποτε εκκρεμή συναλλαγή στη βάση δεδομένων. Αναυτόματη δέσμευσηείναιTrue , ή δεν υπάρχει ανοιχτή συναλλαγή, αυτή η μέθοδος δεν κάνει τίποτα. ΑνautocommitείναιFalse, μια νέα συναλλαγή ανοίγει σιωπηρά εάν μια εκκρεμής συναλλαγή δεσμεύτηκε με αυτήν τη μέθοδο.
Δεσμεύστε τυχόν εκκρεμείς συναλλαγές στη βάση δεδομένων.ανautocommit Είναι True, ή δεν υπάρχει ανοιχτή συναλλαγή, αυτή η μέθοδος δεν εκτελεί καμία λειτουργία.ανautocommitείναι False, και αυτή η μέθοδος δεσμεύει μια εκκρεμή συναλλαγή, μια νέα συναλλαγή θα ξεκινήσει σιωπηρά.

επαναφορά ()

Επιστροφή στην αρχή οποιασδήποτε εκκρεμούς συναλλαγής. Αναυτόματη δέσμευσηείναιTrue , ή δεν υπάρχει ανοιχτή συναλλαγή, αυτή η μέθοδος δεν κάνει τίποτα. ΑνautocommitείναιFalse, μια νέα συναλλαγή ανοίγει σιωπηρά εάν μια συναλλαγή σε εκκρεμότητα ανακλήθηκε με αυτήν τη μέθοδο.
Επιστρέψτε στην αρχή οποιωνδήποτε εκκρεμών συναλλαγών.ανautocommit Είναι True, ή δεν υπάρχει ανοιχτή συναλλαγή, αυτή η μέθοδος δεν εκτελεί καμία λειτουργία.ανautocommitείναι False και αυτή η μέθοδος επαναφέρει μια εκκρεμή συναλλαγή, μια νέα συναλλαγή θα ξεκινήσει σιωπηρά.

Κλείσε()

Κλείστε τη σύνδεση της βάσης δεδομένων. Αναυτόματη δέσμευσηείναιFalse , οποιαδήποτε εκκρεμή συναλλαγή αποσύρεται σιωπηρά. ΑνautocommitείναιTrueήLEGACY_TRANSACTION_CONTROL , δεν εκτελείται σιωπηρός έλεγχος συναλλαγών. Σιγουρέψου ότιδιαπράττω()πριν κλείσετε για να αποφύγετε την απώλεια εκκρεμών αλλαγών.
Κλείστε τη σύνδεση της βάσης δεδομένων.ανautocommit Εάν είναι False, τυχόν εκκρεμείς συναλλαγές θα αποσυρθούν σιωπηρά.ανautocommitείναι Αλήθεια ήLEGACY_TRANSACTION_CONTROL (έλεγχος συναλλαγών παλαιού τύπου), δεν θα εκτελεστεί σιωπηρός έλεγχος συναλλαγών.Πριν κλείσετε φροντίστε να καλέσετεcommit()για να αποφύγετε την απώλεια εκκρεμών αλλαγών.

εκτέλεση(sqlπαράμετροι=()/)

Δημιούργησε ένα νέοΔρομέαςαντικείμενο και κλήσηεκτέλεση()πάνω του με το δεδομένοsqlκαιΠαράμετροι . Επιστρέψτε το νέο αντικείμενο δρομέα.
δημιούργησε ένα νέοCursorαντικείμενο και κλήσηexecute()μέθοδος, περνώντας στο δεδομένοsql δηλώσεις και παραμέτρους.επιστρέψτε αυτό το νέοCursorαντικείμενο.

εκτελέσει πολλούς (sqlΠαράμετροι/)

Δημιούργησε ένα νέοΔρομέαςαντικείμενο και κλήσηexecutemany()πάνω του με το δεδομένοsqlκαιΠαράμετροι . Επιστρέψτε το νέο αντικείμενο δρομέα.
δημιούργησε ένα νέοCursorαντικείμενο και κλήσηexecutemany()μέθοδος, περνώντας στο δεδομένοsql Δηλώσεις και ακολουθίες παραμέτρων. Αυτό επιτρέπει την εκτέλεση πολλαπλών συνόλων παραμέτρων ταυτόχρονα.επιστρέψτε αυτό το νέοCursorαντικείμενο.

εκτελέσιμο σενάριο(sql_script/)

Δημιούργησε ένα νέοΔρομέαςαντικείμενο και κλήσηexecutescript()πάνω του με το δεδομένοsql_script . Επιστρέψτε το νέο αντικείμενο δρομέα.
δημιούργησε ένα νέοCursorαντικείμενο και κλήσηexecutescript() μέθοδο, περνώντας στο δεδομένο σενάριο SQL. Αυτό επιτρέπει την εκτέλεση πολλαπλών εντολών SQL, διαχωρισμένων με ερωτηματικά στο σενάριο.επιστρέψτε αυτό το νέοCursorαντικείμενο.

create_function(όνομαναργfunc*deterministic=Λάθος)

Δημιουργήστε ή αφαιρέστε μια συνάρτηση SQL που ορίζεται από το χρήστη.
Δημιουργήστε ή αφαιρέστε μια συνάρτηση SQL που ορίζεται από το χρήστη.

Παράμετροι:

  • όνομα (str) – Το όνομα της συνάρτησης SQL.
    name(str) – Το όνομα της συνάρτησης SQL.

  • ναργ (ενθ ) – Ο αριθμός των ορισμάτων που μπορεί να δεχτεί η συνάρτηση SQL. Αν-1, μπορεί να απαιτήσει οποιονδήποτε αριθμό ορισμάτων.
    narg (int) – Ο αριθμός των ορισμάτων που μπορεί να δεχτεί η συνάρτηση SQL. Εάν -1, σημαίνει ότι μπορεί να δεχτεί οποιονδήποτε αριθμό ορισμάτων.

  • func (επανάκληση | Κανένα) – Ακλητός που καλείται όταν καλείται η συνάρτηση SQL. Ο καλούμενος πρέπει να επιστρέψειένας τύπος που υποστηρίζεται εγγενώς από το SQLite . Οριστεί σεNoneγια να αφαιρέσετε μια υπάρχουσα συνάρτηση SQL.
    func (Επανάκληση | Κανένα) – Αυτό το αντικείμενο κλήσης (ανάκληση) θα εκτελεστεί όταν καλείται η συνάρτηση SQL. Αυτό το αντικείμενο κλήσης πρέπει να επιστρέψει έναν τύπο που υποστηρίζει εγγενώς το SQLite. Εάν οριστεί σε Κανένα, οι υπάρχουσες συναρτήσεις SQL καταργούνται.

  • ντετερμινιστική (bool) - ΑνTrue, η συνάρτηση SQL που δημιουργήθηκε επισημαίνεται ωςντετερμινιστική, το οποίο επιτρέπει στο SQLite να εκτελεί πρόσθετες βελτιστοποιήσεις.
    deterministic(bool) – Εάν είναι True, επισημαίνει τη δημιουργημένη συνάρτηση SQL ως ντετερμινιστική, η οποία επιτρέπει στο SQLite να εκτελεί πρόσθετες βελτιστοποιήσεις.

Αυξήσεις:

NotSupportedError- Ανντετερμινιστικήχρησιμοποιείται με εκδόσεις SQLite παλαιότερες από 3.8.3.

Αλλαγή στην έκδοση 3.8: Προστέθηκε τοντετερμινιστικήπαράμετρος.

Παράδειγμα:

>>>

  1. >>> import hashlib
  2. >>> def md5sum(t):
  3. ... return hashlib.md5(t).hexdigest()
  4. >>> con = sqlite3.connect(":memory:")
  5. >>> con.create_function("md5", 1, md5sum)
  6. >>> for row in con.execute("SELECT md5(?)", (b"foo",)):
  7. ... print(row)
  8. ('acbd18db4cc2f85cedef654fccc4a4d8',)
  9. >>> con.close()
create_agregate(όνομαn_argaggregate_class)

Δημιουργήστε ή καταργήστε μια συνάρτηση συγκεντρωτικής SQL που ορίζεται από το χρήστη.
Δημιουργήστε ή καταργήστε μια συνάρτηση συγκεντρωτικής SQL που ορίζεται από το χρήστη.

Παράμετροι:

  • όνομα (str) – Το όνομα της συνάρτησης συγκεντρωτικής SQL.
         name(str) – Το όνομα της συνάρτησης συγκεντρωτικής SQL.

  • n_arg (ενθ ) – Ο αριθμός των ορισμάτων που μπορεί να δεχτεί η συνάρτηση συγκεντρωτικής SQL. Αν-1, μπορεί να απαιτήσει οποιονδήποτε αριθμό ορισμάτων.
    Ο αριθμός των παραμέτρων που μπορεί να δεχθεί μια συνάρτηση συγκεντρωτικών SQL. Εάν -1, σημαίνει ότι μπορεί να δεχτεί οποιονδήποτε αριθμό ορισμάτων.

  • aggregate_class (τάξη | κανένα) -

    Μια κλάση πρέπει να εφαρμόσει τις ακόλουθες μεθόδους:
    Μια κλάση πρέπει να εφαρμόσει τις ακόλουθες μεθόδους:

    • step(): Προσθέστε μια σειρά στο άθροισμα.

    • finalize(): Επιστρέψτε το τελικό αποτέλεσμα του αθροίσματος ωςένας τύπος που υποστηρίζεται εγγενώς από το SQLite.
      finalize(): Αυτή η μέθοδος χρησιμοποιείται για την επιστροφή του τελικού αποτελέσματος της συνάθροισης.

    Ο αριθμός των επιχειρημάτων που τοstep()μέθοδος πρέπει να αποδεχτεί ελέγχεται απόn_arg.
    step()Ο αριθμός των παραμέτρων που πρέπει να δέχεται μια μέθοδος δίνεται απόn_argέλεγχος.

    Οριστεί σεNoneγια να καταργήσετε μια υπάρχουσα συγκεντρωτική συνάρτηση SQL.
    Ορίζεται ωςNoneγια να καταργήσετε υπάρχουσες συναρτήσεις συγκεντρωτικών SQL.

Παράδειγμα:

  1. class MySum:
  2. def __init__(self):
  3. self.count = 0
  4. def step(self, value):
  5. self.count += value
  6. def finalize(self):
  7. return self.count
  8. con = sqlite3.connect(":memory:")
  9. con.create_aggregate("mysum", 1, MySum)
  10. cur = con.execute("CREATE TABLE test(i)")
  11. cur.execute("INSERT INTO test(i) VALUES(1)")
  12. cur.execute("INSERT INTO test(i) VALUES(2)")
  13. cur.execute("SELECT mysum(i) FROM test")
  14. print(cur.fetchone()[0])
  15. con.close()
create_window_function(όνομαnum_paramsaggregate_class/)

Δημιουργήστε ή αφαιρέστε μια συνάρτηση συγκεντρωτικού παραθύρου που ορίζεται από το χρήστη.

Παράμετροι:

  • όνομα (str) – Το όνομα της συνάρτησης παραθύρου συγκεντρωτικού SQL για δημιουργία ή κατάργηση.

  • num_params (ενθ ) – Ο αριθμός των ορισμάτων που μπορεί να δεχτεί η συνάρτηση παραθύρου συγκεντρωτικού SQL. Αν-1, μπορεί να απαιτήσει οποιονδήποτε αριθμό ορισμάτων.

  • aggregate_class (τάξη | κανένα) -

    Μια κλάση που πρέπει να εφαρμόσει τις ακόλουθες μεθόδους:

    • step(): Προσθέστε μια σειρά στο τρέχον παράθυρο.

    • value(): Επιστρέψτε την τρέχουσα τιμή του αθροίσματος.

    • inverse(): Αφαιρέστε μια σειρά από το τρέχον παράθυρο.

    • finalize(): Επιστρέψτε το τελικό αποτέλεσμα του αθροίσματος ωςένας τύπος που υποστηρίζεται εγγενώς από το SQLite.

    Ο αριθμός των επιχειρημάτων που τοstep()καιvalue()μέθοδοι πρέπει να αποδεχτούν ελέγχεται απόnum_params.

    Οριστεί σεNoneγια να καταργήσετε μια υπάρχουσα συνάρτηση παραθύρου συγκεντρωτικού SQL.

Αυξήσεις:

NotSupportedError– Εάν χρησιμοποιείται με έκδοση του SQLite παλαιότερη από 3.25.0, η οποία δεν υποστηρίζει συγκεντρωτικές λειτουργίες παραθύρου.

Προστέθηκε στην έκδοση 3.11.

Παράδειγμα:

# Example taken from https://www.sqlite.org/windowfunctions.html#udfwinfunc
class WindowSumInt:
    def __init__(self):
        self.count = 0

    def step(self, value):
        """Add a row to the current window."""
        self.count += value

    def value(self):
        """Return the current value of the aggregate."""
        return self.count

    def inverse(self, value):
        """Remove a row from the current window."""
        self.count -= value

    def finalize(self):
        """Return the final value of the aggregate.

        Any clean-up actions should be placed here.
        """
        return self.count


con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE test(x, y)")
values = [
    ("a", 4),
    ("b", 5),
    ("c", 3),
    ("d", 8),
    ("e", 1),
]
cur.executemany("INSERT INTO test VALUES(?, ?)", values)
con.create_window_function("sumint", 1, WindowSumInt)
cur.execute("""
    SELECT x, sumint(y) OVER (
        ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
    ) AS sum_y
    FROM test ORDER BY x
""")
print(cur.fetchall())
con.close()

create_collation(όνομακλητός/)

Δημιουργήστε μια συλλογή με όνομαόνομαχρησιμοποιώντας τη λειτουργία ταξινόμησηςκλητόςκλητόςπερνάει δύοσειράορίσματα και θα πρέπει να επιστρέψει έναακέραιος αριθμός:

  • 1αν το πρώτο διαταχθεί υψηλότερα από το δεύτερο

  • -1αν το πρώτο διαταχθεί χαμηλότερα από το δεύτερο

  • 0αν διαταχθούν ίσα

Το ακόλουθο παράδειγμα δείχνει μια αντίστροφη ταξινόμηση ταξινόμησης:

def collate_reverse(string1, string2):
    if string1 == string2:
        return 0
    elif string1 < string2:
        return 1
    else:
        return -1

con = sqlite3.connect(":memory:")
con.create_collation("reverse", collate_reverse)

cur = con.execute("CREATE TABLE test(x)")
cur.executemany("INSERT INTO test(x) VALUES(?)", [("a",), ("b",)])
cur.execute("SELECT x FROM test ORDER BY x COLLATE reverse")
for row in cur:
    print(row)
con.close()

Αφαιρέστε μια λειτουργία ταξινόμησης με ρύθμισηκλητόςπρος τηνNone.

Αλλαγή στην έκδοση 3.11: Το όνομα της ταξινόμησης μπορεί να περιέχει οποιονδήποτε χαρακτήρα Unicode. Νωρίτερα, επιτρέπονταν μόνο χαρακτήρες ASCII.

διακοπή()

Καλέστε αυτήν τη μέθοδο από διαφορετικό νήμα για να ακυρώσετε τυχόν ερωτήματα που ενδέχεται να εκτελούνται στη σύνδεση. Τα ερωτήματα που ματαιώθηκαν θα προκαλέσουν έναΛειτουργικό Σφάλμα.

set_authorizer(autorizer_callback)

Κανω ΕΓΓΡΑΦΗκλητός autorizer_callback που πρέπει να επικαλείται για κάθε προσπάθεια πρόσβασης σε μια στήλη ενός πίνακα στη βάση δεδομένων. Η επανάκληση θα πρέπει να επιστρέψει ένα από ταSQLITE_OKSQLITE_DENY, ήSQLITE_IGNOREγια να σηματοδοτήσει τον τρόπο χειρισμού της πρόσβασης στη στήλη από την υποκείμενη βιβλιοθήκη SQLite.

Το πρώτο όρισμα στην επανάκληση υποδηλώνει το είδος της λειτουργίας που πρόκειται να εξουσιοδοτηθεί. Το δεύτερο και το τρίτο όρισμα θα είναι ορίσματα ήNone ανάλογα με το πρώτο επιχείρημα. Το 4ο όρισμα είναι το όνομα της βάσης δεδομένων (“main”, “temp” κ.λπ.) εάν υπάρχει. Το 5ο όρισμα είναι το όνομα της πιο εσωτερικής ενεργοποίησης ή προβολής που είναι υπεύθυνη για την προσπάθεια πρόσβασης ήNoneεάν αυτή η προσπάθεια πρόσβασης προέρχεται απευθείας από τον κωδικό εισόδου SQL.

Συμβουλευτείτε την τεκμηρίωση του SQLite σχετικά με τις πιθανές τιμές για το πρώτο όρισμα και τη σημασία του δεύτερου και του τρίτου ορίσματος ανάλογα με το πρώτο. Όλες οι απαραίτητες σταθερές είναι διαθέσιμες στοsqlite3μονάδα μέτρησης.

ΠέρασμαNoneόπως καιautorizer_callbackθα απενεργοποιήσει τον εξουσιοδοτητή.

Αλλαγή στην έκδοση 3.11: Προστέθηκε υποστήριξη για την απενεργοποίηση του εξουσιοδοτητή χρησιμοποιώνταςNone.

set_progress_handler(progress_handlern)

Κανω ΕΓΓΡΑΦΗκλητός progress_handlerνα επικαλείται για κάθεn οδηγίες της εικονικής μηχανής SQLite. Αυτό είναι χρήσιμο εάν θέλετε να λαμβάνετε κλήση από το SQLite κατά τη διάρκεια μακροχρόνιων λειτουργιών, για παράδειγμα για να ενημερώσετε ένα GUI.

Εάν θέλετε να διαγράψετε οποιοδήποτε πρόγραμμα χειρισμού προόδου που είχε εγκατασταθεί προηγουμένως, καλέστε τη μέθοδο μεNoneΓιαprogress_handler.

Η επιστροφή μιας μη μηδενικής τιμής από τη συνάρτηση χειριστή θα τερματίσει το ερώτημα που εκτελείται αυτήν τη στιγμή και θα αναγκάσει να αυξήσει έναΣφάλμα βάσης δεδομένωνεξαίρεση.

set_trace_callback(trace_callback)

Κανω ΕΓΓΡΑΦΗκλητός trace_callbackπου θα καλείται για κάθε πρόταση SQL που εκτελείται πραγματικά από το backend SQLite.

Το μόνο όρισμα που μεταβιβάζεται στην επανάκληση είναι η δήλωση (όπωςstr ) που εκτελείται. Η τιμή επιστροφής της επανάκλησης αγνοείται. Σημειώστε ότι το backend δεν εκτελεί μόνο δηλώσεις που μεταβιβάζονται στοCursor.execute() μεθόδους. Άλλες πηγές περιλαμβάνουν τοδιαχείριση συναλλαγώναποsqlite3μονάδα και την εκτέλεση ενεργειών που ορίζονται στην τρέχουσα βάση δεδομένων.

ΠέρασμαNoneόπως καιtrace_callbackθα απενεργοποιήσει την επανάκληση παρακολούθησης.

Σημείωση

Οι εξαιρέσεις που εγείρονται στο ίχνος επιστροφής κλήσης δεν διαδίδονται. Ως βοήθημα ανάπτυξης και εντοπισμού σφαλμάτων, χρησιμοποιήστεenable_callback_tracebacks()για να ενεργοποιήσετε την εκτύπωση ιχνηλασίας από εξαιρέσεις που προέκυψαν στην επανάκληση παρακολούθησης.

Προστέθηκε στην έκδοση 3.3.

enable_load_extension(ενεργοποιημένη/)

Ενεργοποιήστε τη μηχανή SQLite να φορτώνει επεκτάσεις SQLite από κοινόχρηστες βιβλιοθήκες εάνενεργοποιημένηείναιTrue ; Διαφορετικά, απαγορεύστε τη φόρτωση επεκτάσεων SQLite. Οι επεκτάσεις SQLite μπορούν να ορίσουν νέες συναρτήσεις, συγκεντρωτικά στοιχεία ή ολόκληρες νέες υλοποιήσεις εικονικών πινάκων. Μια πολύ γνωστή επέκταση είναι η επέκταση αναζήτησης πλήρους κειμένου που διανέμεται με το SQLite.

Σημείωση

οsqlite3 Η ενότητα δεν έχει κατασκευαστεί με υποστήριξη επεκτάσεων με δυνατότητα φόρτωσης από προεπιλογή, επειδή ορισμένες πλατφόρμες (κυρίως macOS) διαθέτουν βιβλιοθήκες SQLite που έχουν μεταγλωττιστεί χωρίς αυτήν τη δυνατότητα. Για να λάβετε υποστήριξη επέκτασης με δυνατότητα φόρτωσης, πρέπει να περάσετε το--enable-loadable-sqlite-extensionsεπιλογή ναΔιαμορφώστε.

Ανεβάζει έναεκδήλωση ελέγχου sqlite3.enable_load_extensionμε επιχειρήματαconnectionenabled.

Προστέθηκε στην έκδοση 3.2.

Αλλαγή στην έκδοση 3.10: Προστέθηκε τοsqlite3.enable_load_extensionεκδήλωση ελέγχου.

con.enable_load_extension(True)

# Load the fulltext search extension
con.execute("select load_extension('./fts3.so')")

# alternatively you can load the extension using an API call:
# con.load_extension("./fts3.so")

# disable extension loading again
con.enable_load_extension(False)

# example from SQLite wiki
con.execute("CREATE VIRTUAL TABLE recipe USING fts3(name, ingredients)")
con.executescript("""
    INSERT INTO recipe (name, ingredients) VALUES('broccoli stew', 'broccoli peppers cheese tomatoes');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin stew', 'pumpkin onions garlic celery');
    INSERT INTO recipe (name, ingredients) VALUES('broccoli pie', 'broccoli cheese onions flour');
    INSERT INTO recipe (name, ingredients) VALUES('pumpkin pie', 'pumpkin sugar flour butter');
    """)
for row in con.execute("SELECT rowid, name, ingredients FROM recipe WHERE name MATCH 'pie'"):
    print(row)

load_extension(μονοπάτι/*entrypoint=Κανένα)

Φορτώστε μια επέκταση SQLite από μια κοινόχρηστη βιβλιοθήκη. Ενεργοποίηση φόρτωσης επέκτασης μεenable_load_extension()πριν καλέσετε αυτήν τη μέθοδο.

Παράμετροι:

  • μονοπάτι (str) – Η διαδρομή προς την επέκταση SQLite.

  • σημείο εισόδου (str | Κανένας ) – Όνομα σημείου εισόδου. ΑνNone (η προεπιλογή), το SQLite θα βρει ένα δικό του όνομα σημείου εισόδου. δείτε τα έγγραφα SQLiteΦόρτωση επέκτασηςγια λεπτομέρειες.

Ανεβάζει έναεκδήλωση ελέγχου sqlite3.load_extensionμε επιχειρήματαconnectionpath.

Προστέθηκε στην έκδοση 3.2.

Αλλαγή στην έκδοση 3.10: Προστέθηκε τοsqlite3.load_extensionεκδήλωση ελέγχου.

Αλλαγή στην έκδοση 3.12: Προστέθηκε τοσημείο εισόδουπαράμετρος.

iterdump()

Επιστρέψτε έναεπαναλήπτης για απόρριψη της βάσης δεδομένων ως πηγαίο κώδικα SQL. Χρήσιμο κατά την αποθήκευση μιας βάσης δεδομένων στη μνήμη για μελλοντική επαναφορά. Παρόμοια με το.dumpεντολή στοsqlite3κέλυφος.

Παράδειγμα:

# Convert file example.db to SQL dump file dump.sql
con = sqlite3.connect('example.db')
with open('dump.sql', 'w') as f:
    for line in con.iterdump():
        f.write('%sn' % line)
con.close()

Δείτε επίσης

Πώς να χειριστείτε κωδικοποιήσεις κειμένου που δεν είναι UTF-8

αντιγράφων ασφαλείας(στόχος*σελίδες=-1πρόοδος=Καμίαόνομα = "κύριος"ύπνος=0,250)

Δημιουργήστε ένα αντίγραφο ασφαλείας μιας βάσης δεδομένων SQLite.

Λειτουργεί ακόμα κι αν η βάση δεδομένων είναι προσβάσιμη από άλλους πελάτες ή ταυτόχρονα από την ίδια σύνδεση.

Παράμετροι:

  • στόχος (Σύνδεση) – Η σύνδεση της βάσης δεδομένων στην οποία θα αποθηκεύσετε το αντίγραφο ασφαλείας.

  • σελίδες (ενθ ) – Ο αριθμός των σελίδων προς αντιγραφή κάθε φορά. Αν είναι ίσο ή μικρότερο από0 , ολόκληρη η βάση δεδομένων αντιγράφεται σε ένα μόνο βήμα. Προεπιλογές σε-1.

  • πρόοδος (επανάκληση | Κανένα) – Εάν έχει οριστεί σε aκλητός, καλείται με τρία ακέραια ορίσματα για κάθε εφεδρική επανάληψη: τοκατάστασητης τελευταίας επανάληψης, ηπαραμένωναριθμός σελίδων που πρέπει να αντιγραφούν ακόμη καισύνολο αριθμός σελίδων. Προεπιλογές σεNone.

  • όνομα (str ) – Το όνομα της βάσης δεδομένων για δημιουργία αντιγράφων ασφαλείας. Είτε"main"(η προεπιλογή) για την κύρια βάση δεδομένων,"temp"για την προσωρινή βάση δεδομένων ή το όνομα μιας προσαρμοσμένης βάσης δεδομένων όπως επισυνάπτεται χρησιμοποιώντας τοATTACH DATABASEΔήλωση SQL.

  • ύπνος (φλοτέρ) – Ο αριθμός των δευτερολέπτων για ύπνο μεταξύ διαδοχικών προσπαθειών δημιουργίας αντιγράφων ασφαλείας των υπόλοιπων σελίδων.

Παράδειγμα 1, αντιγράψτε μια υπάρχουσα βάση δεδομένων σε μια άλλη:

def progress(status, remaining, total):
    print(f'Copied {total-remaining} of {total} pages...')

src = sqlite3.connect('example.db')
dst = sqlite3.connect('backup.db')
with dst:
    src.backup(dst, pages=1, progress=progress)
dst.close()
src.close()

Παράδειγμα 2, αντιγράψτε μια υπάρχουσα βάση δεδομένων σε ένα μεταβατικό αντίγραφο:

src = sqlite3.connect('example.db')
dst = sqlite3.connect(':memory:')
src.backup(dst)
dst.close()
src.close()

Προστέθηκε στην έκδοση 3.7.

Δείτε επίσης

Πώς να χειριστείτε κωδικοποιήσεις κειμένου που δεν είναι UTF-8

getLimit (κατηγορία/)

Λάβετε ένα όριο χρόνου εκτέλεσης σύνδεσης.

Παράμετροι:

κατηγορία (ενθ) - ΟΚατηγορία ορίου SQLiteνα ερωτηθεί.

Τύπος επιστροφής:

ενθ

Αυξήσεις:

Σφάλμα προγραμματισμού- Ανκατηγορίαδεν αναγνωρίζεται από την υποκείμενη βιβλιοθήκη SQLite.

Για παράδειγμα, υποβάλετε ερώτημα για το μέγιστο μήκος μιας πρότασης SQLΣύνδεση con(η προεπιλογή είναι 1000000000):

>>>

>>> con.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH)
1000000000

Προστέθηκε στην έκδοση 3.11.

καθορισμένο όριο (κατηγορίαόριο/)

Ορίστε ένα όριο χρόνου εκτέλεσης σύνδεσης. Οι προσπάθειες αύξησης ενός ορίου πάνω από το σκληρό άνω όριο περικόπτονται σιωπηλά στο σκληρό άνω όριο. Ανεξάρτητα από το αν το όριο άλλαξε ή όχι, επιστρέφεται η προηγούμενη τιμή του ορίου.

Παράμετροι:

  • κατηγορία (ενθ) - ΟΚατηγορία ορίου SQLiteνα τεθούν.

  • όριο (ενθ ) – Η τιμή του νέου ορίου. Εάν είναι αρνητικό, το τρέχον όριο παραμένει αμετάβλητο.

Τύπος επιστροφής:

ενθ

Αυξήσεις:

Σφάλμα προγραμματισμού- Ανκατηγορίαδεν αναγνωρίζεται από την υποκείμενη βιβλιοθήκη SQLite.

Για παράδειγμα, περιορίστε τον αριθμό των συνημμένων βάσεων δεδομένων σε 1 γιαΣύνδεση con(το προεπιλεγμένο όριο είναι 10):

>>>

>>> con.setlimit(sqlite3.SQLITE_LIMIT_ATTACHED, 1)
10
>>> con.getlimit(sqlite3.SQLITE_LIMIT_ATTACHED)
1

Προστέθηκε στην έκδοση 3.11.

getconfig(όπ/)

Ζητήστε μια επιλογή διαμόρφωσης σύνδεσης boolean.

Παράμετροι:

όπ (ενθ) - ΕΝΑΚωδικός SQLITE_DBCONFIG.

Τύπος επιστροφής:

bool

Προστέθηκε στην έκδοση 3.12.

setconfig(όπenable=Αληθ/)

Ορίστε μια επιλογή διαμόρφωσης σύνδεσης boolean.

Παράμετροι:

  • όπ (ενθ) - ΕΝΑΚωδικός SQLITE_DBCONFIG.

  • επιτρέπω (bool) – Trueεάν η επιλογή διαμόρφωσης πρέπει να είναι ενεργοποιημένη (προεπιλογή).Falseεάν πρέπει να απενεργοποιηθεί.

Προστέθηκε στην έκδοση 3.12.

σειριακή (*όνομα = "κύριος")

Σειριοποιήστε μια βάση δεδομένων σε αbyte αντικείμενο. Για ένα συνηθισμένο αρχείο βάσης δεδομένων στο δίσκο, η σειριοποίηση είναι απλώς ένα αντίγραφο του αρχείου του δίσκου. Για μια βάση δεδομένων στη μνήμη ή μια βάση δεδομένων "temp", η σειριοποίηση είναι η ίδια ακολουθία byte που θα εγγραφόταν στο δίσκο εάν αυτή η βάση δεδομένων είχε δημιουργηθεί αντίγραφο ασφαλείας στο δίσκο.

Παράμετροι:

όνομα (str ) – Το όνομα της βάσης δεδομένων που πρόκειται να σειριοποιηθεί. Προεπιλογές σε"main".

Τύπος επιστροφής:

byte

Σημείωση

Αυτή η μέθοδος είναι διαθέσιμη μόνο εάν η υποκείμενη βιβλιοθήκη SQLite διαθέτει το σειριακό API.

Προστέθηκε στην έκδοση 3.11.

αποσειροποιώ(δεδομένα/*όνομα = "κύριος")

Deserialize ασειριακάβάση δεδομένων σε αΣύνδεση . Αυτή η μέθοδος προκαλεί την αποσύνδεση της σύνδεσης βάσης δεδομένων από τη βάση δεδομένωνόνομακαι ανοίξτε ξανάόνομαως βάση δεδομένων στη μνήμη που βασίζεται στη σειριοποίηση που περιέχεται στοδεδομένα.

Παράμετροι:

  • δεδομένα (byte) – Μια σειριακή βάση δεδομένων.

  • όνομα (str ) – Το όνομα της βάσης δεδομένων στο οποίο θέλετε να αποσυνδεθείτε. Προεπιλογές σε"main".

Αυξήσεις:

Σημείωση

Αυτή η μέθοδος είναι διαθέσιμη μόνο εάν η υποκείμενη βιβλιοθήκη SQLite διαθέτει το deserialize API.

Προστέθηκε στην έκδοση 3.11.

αυτόματη δέσμευση

Αυτό το χαρακτηριστικό ελέγχειPEP 249-συμβατή συμπεριφορά συναλλαγής.autocommitέχει τρεις επιτρεπόμενες τιμές:

Αλλαγήautocommitπρος τηνFalseθα ανοίξει μια νέα συναλλαγή και θα την αλλάξει σεTrueθα πραγματοποιήσει οποιαδήποτε εκκρεμή συναλλαγή.

ΒλέπωΈλεγχος συναλλαγών μέσω του χαρακτηριστικού autocommitΓια περισσότερες πληροφορίες.

Σημείωση

οαπομόνωση_επίπεδοτο χαρακτηριστικό δεν έχει αποτέλεσμα εκτός και αναυτόματη δέσμευσηείναιLEGACY_TRANSACTION_CONTROL.

Προστέθηκε στην έκδοση 3.12.

in_transaction

Αυτό το χαρακτηριστικό μόνο για ανάγνωση αντιστοιχεί στο SQLite χαμηλού επιπέδουλειτουργία αυτόματης δέσμευσης.

Trueεάν μια συναλλαγή είναι ενεργή (υπάρχουν μη δεσμευμένες αλλαγές),Falseσε διαφορετική περίπτωση.

Προστέθηκε στην έκδοση 3.2.

απομόνωση_επίπεδο

Ελέγχει τολειτουργία χειρισμού συναλλαγών παλαιού τύπουτουsqlite3 . Εάν έχει οριστεί σεNone , οι συναλλαγές δεν ανοίγουν ποτέ σιωπηρά. Εάν οριστεί σε ένα από"DEFERRED""IMMEDIATE", ή"EXCLUSIVE", που αντιστοιχεί στο υποκείμενοΣυμπεριφορά συναλλαγής SQLiteσιωπηρή διαχείριση συναλλαγώνδιενεργείται.

Αν δεν παρακαμφθεί από τοαπομόνωση_επίπεδοπαράμετρος τουσυνδέω-συωδεομαι(), η προεπιλογή είναι"", το οποίο είναι ψευδώνυμο για"DEFERRED".

Σημείωση

Χρησιμοποιώνταςαυτόματη δέσμευσηγια τον έλεγχο του χειρισμού των συναλλαγών συνιστάται η χρήσηisolation_levelisolation_levelδεν έχει αποτέλεσμα εκτός και αναυτόματη δέσμευσηΈχει οριστείLEGACY_TRANSACTION_CONTROL(η προεπιλεγμένη).

row_factory

Το αρχικόrow_factoryΓιαΔρομέας αντικείμενα που δημιουργούνται από αυτή τη σύνδεση. Η εκχώρηση σε αυτό το χαρακτηριστικό δεν επηρεάζει τοrow_factory των υπαρχόντων δρομέων που ανήκουν σε αυτή τη σύνδεση, μόνο νέων. ΕίναιNoneαπό προεπιλογή, που σημαίνει ότι κάθε σειρά επιστρέφεται ως απλειάδα.

ΒλέπωΠώς να δημιουργήσετε και να χρησιμοποιήσετε εργοστάσια σειρώνΓια περισσότερες πληροφορίες.

text_factory

ΕΝΑκλητόςπου δέχεται αbyte παραμέτρου και επιστρέφει μια αναπαράσταση κειμένου της. Η δυνατότητα κλήσης καλείται για τιμές SQLite με τοTEXT Τύπος δεδομένων. Από προεπιλογή, αυτό το χαρακτηριστικό έχει οριστεί σεstr.

ΒλέπωΠώς να χειριστείτε κωδικοποιήσεις κειμένου που δεν είναι UTF-8Για περισσότερες πληροφορίες.

σύνολο_αλλαγών

Επιστρέψτε τον συνολικό αριθμό σειρών βάσης δεδομένων που έχουν τροποποιηθεί, εισαχθεί ή διαγραφεί από τότε που άνοιξε η σύνδεση της βάσης δεδομένων.

Αντικείμενα δρομέα

ΕΝΑCursorτο αντικείμενο αντιπροσωπεύει αδρομέα βάσης δεδομένων που χρησιμοποιείται για την εκτέλεση εντολών SQL και τη διαχείριση του περιβάλλοντος μιας λειτουργίας ανάκτησης. Οι δρομείς δημιουργούνται χρησιμοποιώνταςConnection.cursor(), ή χρησιμοποιώντας οποιοδήποτε από ταμεθόδους συντόμευσης σύνδεσης.

Τα αντικείμενα του δρομέα είναιεπαναλήπτες, που σημαίνει ότι εάν εσείςεκτέλεση()έναSELECTερώτημα, μπορείτε απλώς να επαναλάβετε τον κέρσορα για να λάβετε τις προκύπτουσες σειρές:

for row in cur.execute("SELECT t FROM data"):
    print(row)

τάξηsqlite3.Δρομέας

ΕΝΑΔρομέαςτο παράδειγμα έχει τα ακόλουθα χαρακτηριστικά και μεθόδους.

εκτέλεση(sqlπαράμετροι=()/)

Εκτελέστε μια μεμονωμένη πρόταση SQL, δεσμεύοντας προαιρετικά τις τιμές Python χρησιμοποιώνταςκράτησης θέσης.

Παράμετροι:

Αυξήσεις:

Σφάλμα προγραμματισμού- Ανsqlπεριέχει περισσότερες από μία εντολές SQL.

Αναυτόματη δέσμευσηείναιLEGACY_TRANSACTION_CONTROLαπομόνωση_επίπεδοδεν είναιNonesqlείναι έναINSERTUPDATEDELETE, ήREPLACEδήλωση, και δεν υπάρχει ανοιχτή συναλλαγή, μια συναλλαγή ανοίγει σιωπηρά πριν από την εκτέλεσηsql.

Καταργήθηκε από την έκδοση 3.12, θα καταργηθεί στην έκδοση 3.14:Κατάργηση Προειδοποίησηεκπέμπεται εάνεπώνυμα κράτη μέληχρησιμοποιούνται καιΠαράμετροιείναι μια ακολουθία αντί για αυπαγόρευση . Ξεκινώντας με την Python 3.14,Σφάλμα προγραμματισμούθα αυξηθεί αντ' αυτού.

Χρήσηexecutescript()για την εκτέλεση πολλαπλών εντολών SQL.

εκτελέσει πολλούς (sqlΠαράμετροι/)

Για κάθε αντικείμενο μέσαΠαράμετροι, εκτελέστε επανειλημμένα τοπαραμετροποιημένηΔήλωση DML SQLsql.

Χρησιμοποιεί τον ίδιο σιωπηρό χειρισμό συναλλαγών όπωςεκτέλεση().

Παράμετροι:

Αυξήσεις:

Σφάλμα προγραμματισμού- Ανsqlπεριέχει περισσότερες από μία εντολές SQL ή δεν είναι πρόταση DML.

Παράδειγμα:

rows = [
    ("row1",),
    ("row2",),
]
# cur is an sqlite3.Cursor object
cur.executemany("INSERT INTO data VALUES(?)", rows)

Σημείωση

Τυχόν προκύπτουσες σειρές απορρίπτονται, συμπεριλαμβανομένων των δηλώσεων DML μερήτρες ΕΠΙΣΤΡΟΦΗΣ.

Καταργήθηκε από την έκδοση 3.12, θα καταργηθεί στην έκδοση 3.14:Κατάργηση Προειδοποίησηεκπέμπεται εάνεπώνυμα κράτη μέληχρησιμοποιούνται και τα είδη σεΠαράμετροιείναι ακολουθίες αντί γιαυπαγόρευση μικρό. Ξεκινώντας με την Python 3.14,Σφάλμα προγραμματισμούθα αυξηθεί αντ' αυτού.

εκτελέσιμο σενάριο(sql_script/)

Εκτελέστε τις εντολές SQL στοsql_script . Αν τοαυτόματη δέσμευσηείναιLEGACY_TRANSACTION_CONTROLκαι εκκρεμεί συναλλαγή, σιωπηρήCOMMIT η δήλωση εκτελείται πρώτα. Δεν εκτελείται άλλος σιωπηρός έλεγχος συναλλαγών. οποιοσδήποτε έλεγχος συναλλαγής πρέπει να προστεθείsql_script.

sql_scriptπρέπει να είναι ασειρά.

Παράδειγμα:

# cur is an sqlite3.Cursor object
cur.executescript("""
    BEGIN;
    CREATE TABLE person(firstname, lastname, age);
    CREATE TABLE book(title, author, published);
    CREATE TABLE publisher(name, address);
    COMMIT;
""")

fetchone()

Ανrow_factoryείναιNone, επιστρέψτε το αποτέλεσμα ερωτήματος της επόμενης σειράς που έχει οριστεί ως απλειάδα . Διαφορετικά, περάστε το στο εργοστάσιο σειρών και επιστρέψτε το αποτέλεσμα. ΕΠΙΣΤΡΟΦΗNoneεάν δεν υπάρχουν περισσότερα δεδομένα.

fetchmany(μέγεθος=δρομέας.μέγεθος πίνακα)

Επιστρέψτε το επόμενο σύνολο σειρών ενός αποτελέσματος ερωτήματος ως αλίστα . Επιστρέψτε μια κενή λίστα εάν δεν υπάρχουν άλλες διαθέσιμες σειρές.

Ο αριθμός των σειρών προς ανάκτηση ανά κλήση καθορίζεται από τοΜέγεθος παράμετρος. ΑνΜέγεθοςδεν δίνεται,μέγεθος συστοιχίας καθορίζει τον αριθμό των σειρών που θα ληφθούν. Αν λιγότερα απόΜέγεθοςΟι σειρές είναι διαθέσιμες, όσες σειρές είναι διαθέσιμες επιστρέφονται.

Σημειώστε ότι υπάρχουν ζητήματα απόδοσης που σχετίζονται με τοΜέγεθος παράμετρος. Για βέλτιστη απόδοση, είναι συνήθως καλύτερο να χρησιμοποιείτε το χαρακτηριστικό arraysize. Αν τοΜέγεθοςχρησιμοποιείται παράμετρος, τότε είναι καλύτερο να διατηρεί την ίδια τιμή από μίαfetchmany()καλέστε στον επόμενο.

fetchall()

Επιστρέψτε όλες τις (υπόλοιπες) σειρές ενός αποτελέσματος ερωτήματος ως αλίστα . Επιστρέψτε μια κενή λίστα εάν δεν υπάρχουν διαθέσιμες σειρές. Σημειώστε ότι τομέγεθος συστοιχίαςχαρακτηριστικό μπορεί να επηρεάσει την απόδοση αυτής της λειτουργίας.

Κλείσε()

Κλείστε τον κέρσορα τώρα (και όχι όποτε__del__λέγεται).

Ο κέρσορας θα είναι άχρηστος από αυτό το σημείο και μετά. έναΣφάλμα προγραμματισμούΗ εξαίρεση θα αυξηθεί εάν επιχειρηθεί οποιαδήποτε λειτουργία με τον κέρσορα.

setinputsizes(μεγέθη/)

Απαιτείται από το DB-API. Δεν κάνει τίποτα μέσαsqlite3.

setoutputsize(Μέγεθοςστήλη=Καμία/)

Απαιτείται από το DB-API. Δεν κάνει τίποτα μέσαsqlite3.

μέγεθος συστοιχίας

Χαρακτηριστικό ανάγνωσης/εγγραφής που ελέγχει τον αριθμό των γραμμών που επιστρέφονται απόfetchmany() . Η προεπιλεγμένη τιμή είναι 1, πράγμα που σημαίνει ότι θα λαμβάνεται μία μόνο σειρά ανά κλήση.

σύνδεση

Χαρακτηριστικό μόνο για ανάγνωση που παρέχει τη βάση δεδομένων SQLiteΣύνδεση που ανήκει στον κέρσορα. ΕΝΑΔρομέαςαντικείμενο που δημιουργήθηκε με κλήσηcon.cursor()θα έχει ασύνδεσηχαρακτηριστικό που αναφέρεταιαπατώ:

>>>

>>> con = sqlite3.connect(":memory:")
>>> cur = con.cursor()
>>> cur.connection == con
True
>>> con.close()

περιγραφή

Χαρακτηριστικό μόνο για ανάγνωση που παρέχει τα ονόματα στηλών του τελευταίου ερωτήματος. Για να παραμείνει συμβατό με το Python DB API, επιστρέφει μια 7-πλειάδα για κάθε στήλη όπου βρίσκονται τα τελευταία έξι στοιχεία κάθε πλειάδαςNone.

Έχει οριστεί γιαSELECTδηλώσεις χωρίς αντίστοιχες σειρές επίσης.

lastrowid

Χαρακτηριστικό μόνο για ανάγνωση που παρέχει το αναγνωριστικό σειράς της τελευταίας σειράς που εισήχθη. Ενημερώνεται μόνο μετά από επιτυχίαINSERTήREPLACEδηλώσεις που χρησιμοποιούν τοεκτέλεση() μέθοδος. Για άλλες δηλώσεις, μετάexecutemany()ήexecutescript(), ή εάν η εισαγωγή απέτυχε, η τιμή τουlastrowid μένει αμετάβλητο. Η αρχική τιμή τουlastrowidείναιNone.

Σημείωση

Ένθετα σεWITHOUT ROWIDοι πίνακες δεν καταγράφονται.

Αλλαγή στην έκδοση 3.6: Προστέθηκε υποστήριξη για τοREPLACEδήλωση.

αριθμός σειρών

Χαρακτηριστικό μόνο για ανάγνωση που παρέχει τον αριθμό των τροποποιημένων σειρών γιαINSERTUPDATEDELETE, καιREPLACE δηλώσεις? είναι-1 για άλλες δηλώσεις, συμπεριλαμβανομένων των ερωτημάτων CTE. Ενημερώνεται μόνο από τοεκτέλεση()καιexecutemany() μεθόδους, αφού ολοκληρωθεί η δήλωση. Αυτό σημαίνει ότι οι προκύπτουσες σειρές πρέπει να ανακτηθούν για να γίνειrowcountπρος ενημέρωση.

row_factory

Ελέγξτε πώς λήφθηκε μια σειρά από αυτόCursor εκπροσωπείται. ΑνNone, μια σειρά αντιπροσωπεύεται ως απλειάδα . Μπορεί να ρυθμιστεί στο συμπεριλαμβανόμενοsqlite3.Σειρά ; ή ακλητόςπου δέχεται δύο επιχειρήματα, αΔρομέαςαντικείμενο και τοtupleτων τιμών της γραμμής και επιστρέφει ένα προσαρμοσμένο αντικείμενο που αντιπροσωπεύει μια σειρά SQLite.

Προεπιλογές σε τιConnection.row_factoryορίστηκε όταν τοCursor δημιουργήθηκε. Η εκχώρηση σε αυτό το χαρακτηριστικό δεν επηρεάζειConnection.row_factoryτης γονικής σύνδεσης.

ΒλέπωΠώς να δημιουργήσετε και να χρησιμοποιήσετε εργοστάσια σειρώνΓια περισσότερες πληροφορίες.

Αντικείμενα σειράς

τάξηsqlite3.Σειρά

ΕΝΑRowΤο παράδειγμα χρησιμεύει ως εξαιρετικά βελτιστοποιημένοrow_factoryΓιαΣύνδεση αντικείμενα. Υποστηρίζει επανάληψη, δοκιμή ισότητας,len (), καιχαρτογράφησηπρόσβαση βάσει ονόματος στήλης και ευρετηρίου.

ΔύοRowτα αντικείμενα συγκρίνονται ίσα εάν έχουν πανομοιότυπα ονόματα και τιμές στηλών.

ΒλέπωΠώς να δημιουργήσετε και να χρησιμοποιήσετε εργοστάσια σειρώνΓια περισσότερες πληροφορίες.

κλειδιά ()

Επιστροφή αλίστατων ονομάτων στηλών ωςχορδές . Αμέσως μετά από ένα ερώτημα, είναι το πρώτο μέλος κάθε πλειάδαςΔρομέας.περιγραφή.

Αλλαγή στην έκδοση 3.5: Προστέθηκε υποστήριξη τεμαχισμού.

Blob αντικείμενα

τάξηsqlite3.Blob

Προστέθηκε στην έκδοση 3.11.

ΕΝΑΑμορφη μάζαπαράδειγμα είναι ααντικείμενο που μοιάζει με αρχείο που μπορεί να διαβάσει και να γράψει δεδομένα σε ένα SQLite BLOB. Κλήσηlen (blob) για να λάβετε το μέγεθος (αριθμό byte) του blob. Χρησιμοποιήστε δείκτες καιφέτεςγια άμεση πρόσβαση στα δεδομένα blob.

Χρησιμοποιήστε τοΑμορφη μάζασανδιαχειριστής περιβάλλοντοςγια να βεβαιωθείτε ότι η λαβή της σταγόνας είναι κλειστή μετά τη χρήση.

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE test(blob_col blob)")
con.execute("INSERT INTO test(blob_col) VALUES(zeroblob(13))")

# Write to our blob, using two write operations:
with con.blobopen("test", "blob_col", 1) as blob:
    blob.write(b"hello, ")
    blob.write(b"world.")
    # Modify the first and last bytes of our blob
    blob[0] = ord("H")
    blob[-1] = ord("!")

# Read the contents of our blob
with con.blobopen("test", "blob_col", 1) as blob:
    greeting = blob.read()

print(greeting)  # outputs "b'Hello, world!'"
con.close()

Κλείσε()

Κλείστε τη σταγόνα.

Το blob θα είναι άχρηστο από αυτό το σημείο και μετά. ΕναΛάθοςΗ εξαίρεση (ή υποκατηγορίας) θα αυξηθεί εάν επιχειρηθεί οποιαδήποτε περαιτέρω λειτουργία με το blob.

ανάγνωση(μήκος=-1/)

Ανάγνωσημήκος byte δεδομένων από το blob στην τρέχουσα θέση μετατόπισης. Εάν φτάσετε στο τέλος του blob, θα επιστραφούν τα δεδομένα μέχρι τον ΕΟΦ. Οτανμήκοςδεν προσδιορίζεται ή είναι αρνητικό,ανάγνωση()θα διαβάσει μέχρι το τέλος της σταγόνας.

γράφω(δεδομένα/)

Γράφωδεδομένα στη μάζα στην τρέχουσα μετατόπιση. Αυτή η λειτουργία δεν μπορεί να αλλάξει το μήκος της σταγόνας. Το γράψιμο πέρα ​​από το τέλος της σταγόνας θα ανέβειValueError.

λέγω()

Επιστρέψτε την τρέχουσα θέση πρόσβασης του blob.

ψάχνω(αντισταθμίζεταιorigin=os.SEEK_SET/)

Ρυθμίστε την τρέχουσα θέση πρόσβασης του blob σεαντισταθμίζεται . οπροέλευσηόρισμα προεπιλογή σεos.SEEK_SET (απόλυτη τοποθέτηση blob). Άλλες τιμές γιαπροέλευσηείναιos.SEEK_CUR(αναζήτηση σε σχέση με την τρέχουσα θέση) καιos.SEEK_END(αναζητήστε σε σχέση με το τέλος της σταγόνας).

Προετοιμάστε αντικείμενα Πρωτοκόλλου

τάξηsqlite3.PrepareProtocol

Ο μοναδικός σκοπός του τύπου PrepareProtocol είναι να λειτουργεί ως αPEP 246Πρωτόκολλο προσαρμογής στυλ για αντικείμενα που μπορούνπροσαρμόζονταιπρος τηνεγγενείς τύπους SQLite.

Εξαιρέσεις

Η ιεραρχία εξαιρέσεων ορίζεται από το DB-API 2.0 (PEP 249).

εξαίρεσηsqlite3.Προειδοποίηση

Αυτή η εξαίρεση δεν τίθεται επί του παρόντος από τοsqlite3ενότητα, αλλά μπορεί να αυξηθεί από εφαρμογές που χρησιμοποιούνsqlite3, για παράδειγμα εάν μια συνάρτηση που ορίζεται από το χρήστη περικόπτει δεδομένα κατά την εισαγωγή.Warningείναι μια υποκατηγορία τουΕξαίρεση.

εξαίρεσηsqlite3.Σφάλμα

Η βασική κλάση των άλλων εξαιρέσεων σε αυτήν την ενότητα. Χρησιμοποιήστε αυτό για να εντοπίσετε όλα τα σφάλματα με ένα μόνοεκτόςδήλωση.Errorείναι μια υποκατηγορία τουΕξαίρεση.

Εάν η εξαίρεση προέρχεται από τη βιβλιοθήκη SQLite, τα ακόλουθα δύο χαρακτηριστικά προστίθενται στην εξαίρεση:

sqlite_errorcode

Ο αριθμητικός κωδικός σφάλματος από τοSQLite API

Προστέθηκε στην έκδοση 3.11.

sqlite_errorname

Το συμβολικό όνομα του αριθμητικού κωδικού σφάλματος από τοSQLite API

Προστέθηκε στην έκδοση 3.11.

εξαίρεσηsqlite3.InterfaceError

Έγινε εξαίρεση για κακή χρήση του χαμηλού επιπέδου SQLite C API. Με άλλα λόγια, αν τεθεί αυτή η εξαίρεση, πιθανώς υποδηλώνει σφάλμα στοsqlite3μονάδα μέτρησης.InterfaceErrorείναι μια υποκατηγορία τουΛάθος.

εξαίρεσηsqlite3.Σφάλμα βάσης δεδομένων

Δημιουργήθηκε εξαίρεση για σφάλματα που σχετίζονται με τη βάση δεδομένων. Αυτό χρησιμεύει ως εξαίρεση βάσης για διάφορους τύπους σφαλμάτων βάσης δεδομένων. Αναφέρεται μόνο σιωπηρά μέσω των εξειδικευμένων υποκατηγοριών.DatabaseErrorείναι μια υποκατηγορία τουΛάθος.

εξαίρεσηsqlite3.DataError

Δημιουργήθηκε εξαίρεση για σφάλματα που προκαλούνται από προβλήματα με τα επεξεργασμένα δεδομένα, όπως αριθμητικές τιμές εκτός εύρους και συμβολοσειρές που είναι πολύ μεγάλες.DataErrorείναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

εξαίρεσηsqlite3.OperationalError

Δημιουργείται εξαίρεση για σφάλματα που σχετίζονται με τη λειτουργία της βάσης δεδομένων και δεν είναι απαραίτητα υπό τον έλεγχο του προγραμματιστή. Για παράδειγμα, η διαδρομή της βάσης δεδομένων δεν βρέθηκε ή δεν ήταν δυνατή η επεξεργασία μιας συναλλαγής.OperationalErrorείναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

εξαίρεσηsqlite3.IntegrityError

Η εξαίρεση δημιουργείται όταν επηρεάζεται η σχεσιακή ακεραιότητα της βάσης δεδομένων, π.χ. ένας έλεγχος ξένου κλειδιού αποτυγχάνει. Είναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

εξαίρεσηsqlite3.InternalError

Η εξαίρεση δημιουργείται όταν το SQLite αντιμετωπίζει εσωτερικό σφάλμα. Εάν τεθεί αυτό, μπορεί να υποδεικνύει ότι υπάρχει πρόβλημα με τη βιβλιοθήκη SQLite χρόνου εκτέλεσης.InternalErrorείναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

εξαίρεσηsqlite3.Programming Error

Έγινε εξαίρεση γιαsqlite3Σφάλματα προγραμματισμού API, για παράδειγμα παροχή λανθασμένου αριθμού δεσμεύσεων σε ένα ερώτημα ή προσπάθεια λειτουργίας σε κλειστόΣύνδεσηProgrammingErrorείναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

εξαίρεσηsqlite3.NotSupportedError

Δημιουργείται εξαίρεση σε περίπτωση που μια μέθοδος ή το API βάσης δεδομένων δεν υποστηρίζεται από την υποκείμενη βιβλιοθήκη SQLite. Για παράδειγμα, ρύθμισηντετερμινιστικήπρος τηνTrueσεcreate_function(), εάν η υποκείμενη βιβλιοθήκη SQLite δεν υποστηρίζει ντετερμινιστικές συναρτήσεις.NotSupportedErrorείναι μια υποκατηγορία τουΣφάλμα βάσης δεδομένων.

Τύποι SQLite και Python

Το SQLite υποστηρίζει εγγενώς τους ακόλουθους τύπους:NULLINTEGERREALTEXTBLOB.

Οι ακόλουθοι τύποι Python μπορούν επομένως να σταλούν στο SQLite χωρίς κανένα πρόβλημα:

Τύπος Python

Τύπος SQLite

None

NULL

ενθ

INTEGER

φλοτέρ

REAL

str

TEXT

byte

BLOB

Αυτός είναι ο τρόπος με τον οποίο οι τύποι SQLite μετατρέπονται σε τύπους Python από προεπιλογή:

Τύπος SQLite

Τύπος Python

NULL

None

INTEGER

ενθ

REAL

φλοτέρ

TEXT

εξαρτάται απόtext_factorystrαπό προεπιλογή

BLOB

byte

Το σύστημα τύπου τουsqlite3Η ενότητα μπορεί να επεκταθεί με δύο τρόπους: μπορείτε να αποθηκεύσετε πρόσθετους τύπους Python σε μια βάση δεδομένων SQLite μέσωπροσαρμογείς αντικειμένων, και μπορείτε να αφήσετε τοsqlite3module μετατρέπει τύπους SQLite σε τύπους Python μέσωμετατροπείς.

Προεπιλεγμένοι προσαρμογείς και μετατροπείς (καταργημένοι)

Σημείωση

Οι προεπιλεγμένοι προσαρμογείς και μετατροπείς έχουν καταργηθεί από την Python 3.12. Αντίθετα, χρησιμοποιήστε τοΣυνταγές προσαρμογέων και μετατροπέωνκαι προσαρμόστε τα στις ανάγκες σας.

Οι καταργημένοι προεπιλεγμένοι προσαρμογείς και μετατροπείς αποτελούνται από:

Σημείωση

Ο προεπιλεγμένος μετατροπέας "χρονοσήμανσης" αγνοεί τις μετατοπίσεις UTC στη βάση δεδομένων και πάντα επιστρέφει ένα απλόημερομηνία ώρα.ημερομηνία ώρα αντικείμενο. Για να διατηρήσετε τις μετατοπίσεις UTC σε χρονικές σημάνσεις, είτε αφήστε τους μετατροπείς απενεργοποιημένους είτε καταχωρίστε έναν μετατροπέα με επίγνωση μετατόπισης μεregister_converter().

Καταργήθηκε από την έκδοση 3.12.

Διεπαφή γραμμής εντολών

οsqlite3Η ενότητα μπορεί να κληθεί ως σενάριο, χρησιμοποιώντας το διερμηνέα διακόπτη, για να παρέχει ένα απλό κέλυφος SQLite. Η υπογραφή του επιχειρήματος είναι η εξής:

python -m sqlite3 [-h] [-v] [filename] [sql]

Τύπος.quitή CTRL-D για έξοδο από το κέλυφος.

-η, --βοήθεια

Εκτύπωση βοήθειας CLI.

-v, --έκδοση

Εκτυπώστε την υποκείμενη έκδοση της βιβλιοθήκης SQLite.

Προστέθηκε στην έκδοση 3.12.

Οδηγοί πώς να

Πώς να χρησιμοποιήσετε τα σύμβολα κράτησης θέσης για τη δέσμευση τιμών σε ερωτήματα SQL

Οι λειτουργίες SQL συνήθως πρέπει να χρησιμοποιούν τιμές από μεταβλητές Python. Ωστόσο, προσέξτε να χρησιμοποιείτε τις λειτουργίες συμβολοσειράς της Python για τη συγκέντρωση ερωτημάτων, καθώς είναι ευάλωτες σεΕπιθέσεις SQL injection . Για παράδειγμα, ένας εισβολέας μπορεί απλώς να κλείσει το μεμονωμένο απόσπασμα και να κάνει ένεσηOR TRUEγια να επιλέξετε όλες τις σειρές:

>>>

>>> # Never do this -- insecure!
>>> symbol = input()
' OR TRUE; --
>>> sql = "SELECT * FROM stocks WHERE symbol = '%s'" % symbol
>>> print(sql)
SELECT * FROM stocks WHERE symbol = '' OR TRUE; --'
>>> cur.execute(sql)

Αντίθετα, χρησιμοποιήστε την αντικατάσταση παραμέτρων του DB-API. Για να εισαγάγετε μια μεταβλητή σε μια συμβολοσειρά ερωτήματος, χρησιμοποιήστε ένα σύμβολο κράτησης θέσης στη συμβολοσειρά και αντικαταστήστε τις πραγματικές τιμές στο ερώτημα παρέχοντάς τις ωςπλειάδατων τιμών στο δεύτερο όρισμα του δρομέαεκτέλεση()μέθοδος.

Μια δήλωση SQL μπορεί να χρησιμοποιεί ένα από τα δύο είδη συμβόλων κράτησης θέσης: ερωτηματικά (στυλ qmark) ή ονομασμένα σύμβολα κράτησης θέσης (επώνυμο στυλ). Για το στυλ qmark,Παράμετροιπρέπει να είναι ααλληλουχίατου οποίου το μήκος πρέπει να ταιριάζει με τον αριθμό των συμβόλων κράτησης θέσης ή αΣφάλμα προγραμματισμού ανυψώνεται. Για το επώνυμο στυλ,Παράμετροιπρέπει να είναι ένα παράδειγμα του αυπαγόρευση (ή μια υποκλάση), η οποία πρέπει να περιέχει κλειδιά για όλες τις ονομασμένες παραμέτρους. τυχόν επιπλέον στοιχεία αγνοούνται. Ακολουθεί ένα παράδειγμα και των δύο στυλ:

con = sqlite3.connect(":memory:")
cur = con.execute("CREATE TABLE lang(name, first_appeared)")

# This is the named style used with executemany():
data = (
    {"name": "C", "year": 1972},
    {"name": "Fortran", "year": 1957},
    {"name": "Python", "year": 1991},
    {"name": "Go", "year": 2009},
)
cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)

# This is the qmark style used in a SELECT query:
params = (1972,)
cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
print(cur.fetchall())
con.close()

Σημείωση

PEP 249αριθμητικά σύμβολα κράτησης θέσης είναιδεν υποστηρίζεται. Εάν χρησιμοποιηθούν, θα ερμηνευτούν ως ονομασμένα σύμβολα κράτησης θέσης.

Πώς να προσαρμόσετε προσαρμοσμένους τύπους Python σε τιμές SQLite

Το SQLite υποστηρίζει εγγενώς μόνο ένα περιορισμένο σύνολο τύπων δεδομένων. Για να αποθηκεύσετε προσαρμοσμένους τύπους Python σε βάσεις δεδομένων SQLite,προσαρμόζωτους σε ένα από ταΤύποι Python Το SQLite κατανοεί εγγενώς.

Υπάρχουν δύο τρόποι για να προσαρμόσετε τα αντικείμενα Python σε τύπους SQLite: να αφήσετε το αντικείμενό σας να προσαρμοστεί μόνο του ή χρησιμοποιώντας ένααντάπτορας καλούμενος . Το δεύτερο θα έχει προτεραιότητα πάνω από το πρώτο. Για μια βιβλιοθήκη που εξάγει έναν προσαρμοσμένο τύπο, μπορεί να έχει νόημα να επιτρέψει σε αυτόν τον τύπο να προσαρμοστεί μόνος του. Ως προγραμματιστής εφαρμογών, μπορεί να είναι πιο λογικό να αναλάβετε τον άμεσο έλεγχο καταγράφοντας προσαρμοσμένες λειτουργίες προσαρμογέα.

Πώς να γράψετε προσαρμόσιμα αντικείμενα

Ας υποθέσουμε ότι έχουμε έναPointκλάση που αντιπροσωπεύει ένα ζεύγος συντεταγμένων,xκαιy , σε ένα καρτεσιανό σύστημα συντεταγμένων. Το ζεύγος συντεταγμένων θα αποθηκευτεί ως συμβολοσειρά κειμένου στη βάση δεδομένων, χρησιμοποιώντας ένα ερωτηματικό για τον διαχωρισμό των συντεταγμένων. Αυτό μπορεί να υλοποιηθεί προσθέτοντας ένα__conform__(self, protocol) μέθοδο που επιστρέφει την προσαρμοσμένη τιμή. Το αντικείμενο πέρασε σεπρωτόκολλοθα είναι του τύπουΠροετοιμασία Πρωτοκόλλου.

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __conform__(self, protocol):
        if protocol is sqlite3.PrepareProtocol:
            return f"{self.x};{self.y}"

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(4.0, -3.2),))
print(cur.fetchone()[0])
con.close()
Πώς να καταχωρήσετε καλέσιμα προσαρμογέα

Η άλλη δυνατότητα είναι να δημιουργήσετε μια συνάρτηση που μετατρέπει το αντικείμενο Python σε τύπο συμβατό με SQLite. Αυτή η λειτουργία μπορεί στη συνέχεια να καταχωρηθεί χρησιμοποιώνταςregister_adapter().

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

def adapt_point(point):
    return f"{point.x};{point.y}"

sqlite3.register_adapter(Point, adapt_point)

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("SELECT ?", (Point(1.0, 2.5),))
print(cur.fetchone()[0])
con.close()

Πώς να μετατρέψετε τιμές SQLite σε προσαρμοσμένους τύπους Python

Η εγγραφή ενός προσαρμογέα σάς επιτρέπει να κάνετε μετατροπήαπόπροσαρμοσμένοι τύποι Pythonπρος την Τιμές SQLite. Για να μπορέσετε να κάνετε μετατροπήαπόΤιμές SQLiteπρος τηνπροσαρμοσμένους τύπους Python, χρησιμοποιούμεμετατροπείς.

Ας επιστρέψουμε στοPoint τάξη. Αποθηκεύαμε τις συντεταγμένες x και y διαχωρισμένες μέσω ερωτηματικών ως συμβολοσειρές στο SQLite.

Αρχικά, θα ορίσουμε μια συνάρτηση μετατροπέα που δέχεται τη συμβολοσειρά ως παράμετρο και κατασκευάζει aPointαντικείμενο από αυτό.

Σημείωση

Οι λειτουργίες μετατροπέα είναιπάνταπέρασε αbyteαντικείμενο, ανεξάρτητα από τον υποκείμενο τύπο δεδομένων SQLite.

def convert_point(s):
    x, y = map(float, s.split(b";"))
    return Point(x, y)

Τώρα πρέπει να πούμεsqlite3 όταν πρέπει να μετατρέψει μια δεδομένη τιμή SQLite. Αυτό γίνεται κατά τη σύνδεση σε μια βάση δεδομένων, χρησιμοποιώντας τοεντοπισμός_τύπωνπαράμετρος τουσυνδέω-συωδεομαι() . Υπάρχουν τρεις επιλογές:

  • Έννοια: σύνολοεντοπισμός_τύπωνπρος τηνPARSE_DECLTYPES

  • Ρητό: σύνολοεντοπισμός_τύπωνπρος τηνPARSE_COLNAMES

  • Και τα δύο: σετεντοπισμός_τύπωνπρος τηνsqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES . Τα ονόματα στηλών έχουν προτεραιότητα έναντι των δηλωμένων τύπων.

Το ακόλουθο παράδειγμα επεξηγεί τις σιωπηρές και ρητές προσεγγίσεις:

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y

    def __repr__(self):
        return f"Point({self.x}, {self.y})"

def adapt_point(point):
    return f"{point.x};{point.y}"

def convert_point(s):
    x, y = list(map(float, s.split(b";")))
    return Point(x, y)

# Register the adapter and converter
sqlite3.register_adapter(Point, adapt_point)
sqlite3.register_converter("point", convert_point)

# 1) Parse using declared types
p = Point(4.0, -3.2)
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.execute("CREATE TABLE test(p point)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute("SELECT p FROM test")
print("with declared types:", cur.fetchone()[0])
cur.close()
con.close()

# 2) Parse using column names
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
cur = con.execute("CREATE TABLE test(p)")

cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
cur.execute('SELECT p AS "p [point]" FROM test')
print("with column names:", cur.fetchone()[0])
cur.close()
con.close()

Συνταγές προσαρμογέων και μετατροπέων

Αυτή η ενότητα παρουσιάζει συνταγές για κοινούς προσαρμογείς και μετατροπείς.

import datetime
import sqlite3

def adapt_date_iso(val):
    """Adapt datetime.date to ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_iso(val):
    """Adapt datetime.datetime to timezone-naive ISO 8601 date."""
    return val.isoformat()

def adapt_datetime_epoch(val):
    """Adapt datetime.datetime to Unix timestamp."""
    return int(val.timestamp())

sqlite3.register_adapter(datetime.date, adapt_date_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_iso)
sqlite3.register_adapter(datetime.datetime, adapt_datetime_epoch)

def convert_date(val):
    """Convert ISO 8601 date to datetime.date object."""
    return datetime.date.fromisoformat(val.decode())

def convert_datetime(val):
    """Convert ISO 8601 datetime to datetime.datetime object."""
    return datetime.datetime.fromisoformat(val.decode())

def convert_timestamp(val):
    """Convert Unix epoch timestamp to datetime.datetime object."""
    return datetime.datetime.fromtimestamp(int(val))

sqlite3.register_converter("date", convert_date)
sqlite3.register_converter("datetime", convert_datetime)
sqlite3.register_converter("timestamp", convert_timestamp)

Πώς να χρησιμοποιήσετε μεθόδους συντόμευσης σύνδεσης

Χρησιμοποιώντας τηνεκτέλεση()executemany(), καιexecutescript()μεθόδους τουΣύνδεσητάξη, ο κώδικάς σας μπορεί να γραφτεί πιο συνοπτικά επειδή δεν χρειάζεται να δημιουργήσετε το (συχνά περιττό)Δρομέας αντικείμενα ρητά. Αντίθετα, τοΔρομέας Τα αντικείμενα δημιουργούνται σιωπηρά και αυτές οι μέθοδοι συντόμευσης επιστρέφουν τα αντικείμενα του δρομέα. Με αυτόν τον τρόπο, μπορείτε να εκτελέσετε έναSELECTδήλωση και επαναλάβετε απευθείας πάνω της χρησιμοποιώντας μόνο μία κλήση στοΣύνδεσηαντικείμενο.

# Create and fill the table.
con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(name, first_appeared)")
data = [
    ("C++", 1985),
    ("Objective-C", 1984),
]
con.executemany("INSERT INTO lang(name, first_appeared) VALUES(?, ?)", data)

# Print the table contents
for row in con.execute("SELECT name, first_appeared FROM lang"):
    print(row)

print("I just deleted", con.execute("DELETE FROM lang").rowcount, "rows")

# close() is not a shortcut method and it's not called automatically;
# the connection object should be closed manually
con.close()

Πώς να χρησιμοποιήσετε τη διαχείριση περιβάλλοντος σύνδεσης

ΕΝΑΣύνδεση Το αντικείμενο μπορεί να χρησιμοποιηθεί ως διαχειριστής περιβάλλοντος που δεσμεύει αυτόματα ή επαναφέρει τις ανοιχτές συναλλαγές κατά την έξοδο από το σώμα του διαχειριστή περιβάλλοντος. Αν το σώμα τουμε η δήλωση ολοκληρώνεται χωρίς εξαιρέσεις, η συναλλαγή δεσμεύεται. Εάν αυτή η δέσμευση αποτύχει, ή εάν το σώμα τουwith Η δήλωση δημιουργεί μια μη αλιευμένη εξαίρεση, η συναλλαγή επαναφέρεται. Αναυτόματη δέσμευσηείναιFalse, μια νέα συναλλαγή ανοίγει σιωπηρά μετά τη δέσμευση ή την επαναφορά.

Εάν δεν υπάρχει ανοιχτή συναλλαγή κατά την έξοδο από το σώμα τουwithδήλωση, ή εάναυτόματη δέσμευσηείναιTrue, ο διαχειριστής περιβάλλοντος δεν κάνει τίποτα.

Σημείωση

Ο διαχειριστής περιβάλλοντος δεν ανοίγει σιωπηρά μια νέα συναλλαγή ούτε κλείνει τη σύνδεση. Εάν χρειάζεστε έναν διαχειριστή περιβάλλοντος κλεισίματος, εξετάστε το ενδεχόμενο να χρησιμοποιήσετεcontextlib.closing().

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE lang(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE)")

# Successful, con.commit() is called automatically afterwards
with con:
    con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))

# con.rollback() is called after the with block finishes with an exception,
# the exception is still raised and must be caught
try:
    with con:
        con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))
except sqlite3.IntegrityError:
    print("couldn't add Python twice")

# Connection object used as context manager only commits or rollbacks transactions,
# so the connection object should be closed manually
con.close()

Πώς να εργαστείτε με SQLite URI

Μερικά χρήσιμα κόλπα URI περιλαμβάνουν:

  • Ανοίξτε μια βάση δεδομένων σε λειτουργία μόνο για ανάγνωση:

>>>

>>> con = sqlite3.connect("file:tutorial.db?mode=ro", uri=True)
>>> con.execute("CREATE TABLE readonly(data)")
Traceback (most recent call last):
OperationalError: attempt to write a readonly database
  • Μην δημιουργείτε σιωπηρά ένα νέο αρχείο βάσης δεδομένων εάν δεν υπάρχει ήδη. θα αυξήσειΛειτουργικό Σφάλμαεάν δεν μπορείτε να δημιουργήσετε νέο αρχείο:

>>>

>>> con = sqlite3.connect("file:nosuchdb.db?mode=rw", uri=True)
Traceback (most recent call last):
OperationalError: unable to open database file
  • Δημιουργήστε μια κοινόχρηστη βάση δεδομένων στη μνήμη με όνομα:

db = "file:mem1?mode=memory&cache=shared"
con1 = sqlite3.connect(db, uri=True)
con2 = sqlite3.connect(db, uri=True)
with con1:
    con1.execute("CREATE TABLE shared(data)")
    con1.execute("INSERT INTO shared VALUES(28)")
res = con2.execute("SELECT data FROM shared")
assert res.fetchone() == (28,)

con1.close()
con2.close()

Περισσότερες πληροφορίες σχετικά με αυτήν τη δυνατότητα, συμπεριλαμβανομένης μιας λίστας παραμέτρων, μπορείτε να βρείτε στοΤεκμηρίωση SQLite URI.

Πώς να δημιουργήσετε και να χρησιμοποιήσετε εργοστάσια σειρών

Από προεπιλογή,sqlite3αντιπροσωπεύει κάθε σειρά ως απλειάδα . Αν έναtupleδεν ταιριάζει στις ανάγκες σας, μπορείτε να χρησιμοποιήσετε τοsqlite3.Σειράτάξη ή ένα έθιμοrow_factory.

Ενώrow_factoryυπάρχει ως χαρακτηριστικό τόσο στοΔρομέαςκαι τοΣύνδεση, συνιστάται να ρυθμίσετεConnection.row_factory, έτσι όλοι οι δρομείς που δημιουργούνται από τη σύνδεση θα χρησιμοποιούν την ίδια εργοστασιακή σειρά.

Rowπαρέχει ευρετηριασμένη και χωρίς διάκριση πεζών-κεφαλαίων ονομαστική πρόσβαση σε στήλες, με ελάχιστη επιβάρυνση μνήμης και αντίκτυπο στην απόδοση σε αtuple . ΧρησιμοποιώRowως εργοστάσιο σειρών, αντιστοιχίστε το στοrow_factoryΧαρακτηριστικό:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = sqlite3.Row

Τα ερωτήματα επιστρέφουν τώραRowαντικείμενα:

>>>

>>> res = con.execute("SELECT 'Earth' AS name, 6378 AS radius")
>>> row = res.fetchone()
>>> row.keys()
['name', 'radius']
>>> row[0]         # Access by index.
'Earth'
>>> row["name"]    # Access by name.
'Earth'
>>> row["RADIUS"]  # Column names are case-insensitive.
6378
>>> con.close()

Σημείωση

οFROMη ρήτρα μπορεί να παραλειφθεί στοSELECT δήλωση, όπως στο παραπάνω παράδειγμα. Σε τέτοιες περιπτώσεις, το SQLite επιστρέφει μια γραμμή με στήλες που ορίζονται από εκφράσεις, π.χ. κυριολεκτικά, με τα δεδομένα ψευδώνυμαexpr AS alias.

Μπορείτε να δημιουργήσετε ένα έθιμοrow_factoryπου επιστρέφει κάθε σειρά ως αυπαγόρευση, με τα ονόματα στηλών αντιστοιχισμένα σε τιμές:

def dict_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    return {key: value for key, value in zip(fields, row)}

Χρησιμοποιώντας το, τα ερωτήματα επιστρέφουν τώρα αdictαντί για αtuple:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = dict_factory
>>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
...     print(row)
{'a': 1, 'b': 2}
>>> con.close()

Η ακόλουθη σειρά επιστρέφει εργοστασιακά αμε το όνομα πλειάδα:

from collections import namedtuple

def namedtuple_factory(cursor, row):
    fields = [column[0] for column in cursor.description]
    cls = namedtuple("Row", fields)
    return cls._make(row)

namedtuple_factory()μπορεί να χρησιμοποιηθεί ως εξής:

>>>

>>> con = sqlite3.connect(":memory:")
>>> con.row_factory = namedtuple_factory
>>> cur = con.execute("SELECT 1 AS a, 2 AS b")
>>> row = cur.fetchone()
>>> row
Row(a=1, b=2)
>>> row[0]  # Indexed access.
1
>>> row.b   # Attribute access.
2
>>> con.close()

Με ορισμένες προσαρμογές, η παραπάνω συνταγή μπορεί να προσαρμοστεί ώστε να χρησιμοποιηθεί ακλάση δεδομένων, ή οποιαδήποτε άλλη προσαρμοσμένη κλάση, αντί για aμε το όνομα διπλή.

Πώς να χειριστείτε κωδικοποιήσεις κειμένου που δεν είναι UTF-8

Από προεπιλογή,sqlite3χρήσειςstrγια να προσαρμόσετε τις τιμές SQLite με τοTEXT Τύπος δεδομένων. Αυτό λειτουργεί καλά για κείμενο με κωδικοποίηση UTF-8, αλλά ενδέχεται να αποτύχει για άλλες κωδικοποιήσεις και μη έγκυρο UTF-8. Μπορείτε να χρησιμοποιήσετε ένα προσαρμοσμένοtext_factoryνα χειριστεί τέτοιες περιπτώσεις.

Λόγω του SQLiteευέλικτη πληκτρολόγηση, δεν είναι ασυνήθιστο να συναντήσετε στήλες πίνακα με τοTEXT τύπος δεδομένων που περιέχει κωδικοποιήσεις που δεν είναι UTF-8 ή ακόμα και αυθαίρετα δεδομένα. Για να το δείξουμε, ας υποθέσουμε ότι έχουμε μια βάση δεδομένων με κωδικοποιημένο κείμενο ISO-8859-2 (Λατινικά-2), για παράδειγμα έναν πίνακα με καταχωρήσεις τσεχικού-αγγλικού λεξικού. Υποθέτοντας ότι τώρα έχουμε έναΣύνδεσηπαράδειγμαconσυνδεδεμένοι με αυτήν τη βάση δεδομένων, μπορούμε να αποκωδικοποιήσουμε το κωδικοποιημένο κείμενο Latin-2 χρησιμοποιώντας αυτόtext_factory:

con.text_factory = lambda data: str(data, encoding="latin2")

Για μη έγκυρα δεδομένα UTF-8 ή αυθαίρετα δεδομένα που είναι αποθηκευμένα σεTEXTστήλες πίνακα, μπορείτε να χρησιμοποιήσετε την ακόλουθη τεχνική, δανεισμένη από τοUnicode HOWTO:

con.text_factory = lambda data: str(data, errors="surrogateescape")

Σημείωση

οsqlite3Το module API δεν υποστηρίζει συμβολοσειρές που περιέχουν υποκατάστατα.

Δείτε επίσης

Unicode HOWTO

Εξήγηση

Έλεγχος συναλλαγών

sqlite3προσφέρει πολλαπλές μεθόδους ελέγχου εάν, πότε και πώς ανοίγουν και κλείνουν οι συναλλαγές της βάσης δεδομένων.Έλεγχος συναλλαγών μέσω του χαρακτηριστικού autocommitσυνιστάται, ενώΈλεγχος συναλλαγής μέσω του χαρακτηριστικού isolation_levelδιατηρεί τη συμπεριφορά πριν από την Python 3.12.

Έλεγχος συναλλαγών μέσω τουautocommitΧαρακτηριστικό

Ο συνιστώμενος τρόπος ελέγχου της συμπεριφοράς των συναλλαγών είναι μέσω τουConnection.autocommitχαρακτηριστικό, το οποίο θα πρέπει κατά προτίμηση να οριστεί χρησιμοποιώντας τοαυτόματη δέσμευσηπαράμετρος τουσυνδέω-συωδεομαι().

Προτείνεται να ρυθμίσετεαυτόματη δέσμευσηπρος τηνFalse, το οποίο υπονοείPEP 249 -συμβατός έλεγχος συναλλαγών. Αυτό σημαίνει:

  • sqlite3διασφαλίζει ότι μια συναλλαγή είναι πάντα ανοιχτή, έτσισυνδέω-συωδεομαι()Connection.commit(), καιConnection.rollback()θα ανοίξει σιωπηρά μια νέα συναλλαγή (αμέσως μετά το κλείσιμο της εκκρεμούς, για τις δύο τελευταίες).sqlite3χρήσειςBEGIN DEFERREDδηλώσεις κατά το άνοιγμα συναλλαγών.

  • Οι συναλλαγές θα πρέπει να γίνονται ρητά χρησιμοποιώνταςcommit().

  • Οι συναλλαγές θα πρέπει να επαναφέρονται ρητά χρησιμοποιώνταςrollback().

  • Εκτελείται μια σιωπηρή επαναφορά εάν η βάση δεδομένων είναιΚλείσε()-με αλλαγές σε εκκρεμότητα.

Σειράαυτόματη δέσμευσηπρος τηνTrueγια να ενεργοποιήσετε τα SQLiteλειτουργία αυτόματης δέσμευσης . Σε αυτή τη λειτουργία,Connection.commit()καιConnection.rollback() δεν έχουν αποτέλεσμα. Σημειώστε ότι η λειτουργία αυτόματης δέσμευσης του SQLite διαφέρει από τηνPEP 249-υποχωρητικόςConnection.autocommit Χαρακτηριστικό; χρήσηΣύνδεση.σε_συναλλαγήγια να υποβάλετε ερώτημα στη λειτουργία αυτόματης δέσμευσης χαμηλού επιπέδου SQLite.

Σειράαυτόματη δέσμευσηπρος τηνLEGACY_TRANSACTION_CONTROLνα αφήσει τη συμπεριφορά ελέγχου συναλλαγών στοConnection.isolation_level Χαρακτηριστικό. ΒλέπωΈλεγχος συναλλαγής μέσω του χαρακτηριστικού isolation_levelΓια περισσότερες πληροφορίες.

Έλεγχος συναλλαγών μέσω τουisolation_levelΧαρακτηριστικό

Σημείωση

Ο προτεινόμενος τρόπος ελέγχου των συναλλαγών είναι μέσω τουαυτόματη δέσμευση Χαρακτηριστικό. ΒλέπωΈλεγχος συναλλαγών μέσω του χαρακτηριστικού autocommit.

ΑνConnection.autocommitΈχει οριστείLEGACY_TRANSACTION_CONTROL(η προεπιλογή), η συμπεριφορά συναλλαγής ελέγχεται χρησιμοποιώντας τοConnection.isolation_level Χαρακτηριστικό. Σε διαφορετική περίπτωση,isolation_levelδεν έχει αποτέλεσμα.

Εάν το χαρακτηριστικό σύνδεσηςαπομόνωση_επίπεδοδεν είναιNone, νέες συναλλαγές ανοίγονται σιωπηρά πρινεκτέλεση()καιexecutemany()εκτελείINSERTUPDATEDELETE, ήREPLACE δηλώσεις? για άλλες καταστάσεις, δεν εκτελείται σιωπηρή διαχείριση συναλλαγών. Χρησιμοποιήστε τοδιαπράττω()καιεπαναφορά () μεθόδους για τη δέσμευση και την ανάκληση εκκρεμών συναλλαγών αντίστοιχα. Μπορείτε να επιλέξετε το υποκείμενοΣυμπεριφορά συναλλαγής SQLite— δηλαδή αν και τι είδουςBEGINδηλώσειςsqlite3σιωπηρά εκτελεί – μέσω τουαπομόνωση_επίπεδοΧαρακτηριστικό.

Αναπομόνωση_επίπεδοΈχει οριστείNone , καμία συναλλαγή δεν ανοίγει καθόλου. Αυτό αφήνει μέσα την υποκείμενη βιβλιοθήκη SQLiteλειτουργία αυτόματης δέσμευσης , αλλά επιτρέπει επίσης στον χρήστη να εκτελεί τον δικό του χειρισμό συναλλαγών χρησιμοποιώντας ρητές δηλώσεις SQL. Η υποκείμενη λειτουργία αυτόματης δέσμευσης βιβλιοθήκης SQLite μπορεί να ερωτηθεί χρησιμοποιώντας τοin_transactionΧαρακτηριστικό.

οexecutescript()μέθοδος δεσμεύει σιωπηρά οποιαδήποτε εκκρεμή συναλλαγή πριν από την εκτέλεση του δεδομένου σεναρίου SQL, ανεξάρτητα από την τιμή τουαπομόνωση_επίπεδο.

Άλλαξε στην έκδοση 3.6:sqlite3 χρησιμοποιείται για τη σιωπηρή δέσμευση μιας ανοιχτής συναλλαγής πριν από τις δηλώσεις DDL. Αυτό δεν ισχύει πλέον.

Αλλαγή στην έκδοση 3.12: Ο προτεινόμενος τρόπος ελέγχου των συναλλαγών είναι πλέον μέσω τουαυτόματη δέσμευσηΧαρακτηριστικό.