2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
sqlite3 — DB-API 2.0 -liitäntä SQLite-tietokantoille — Python 3.12.4 -dokumentaatio
sqlite3
— DB-API 2.0 -liitäntä SQLite-tietokantoihinLähdekoodi: Lib/sqlite3/ Lähdekoodin sijainti:Lib/sqlite3/
SQLite on C-kirjasto, joka tarjoaa kevyen levypohjaisen tietokannan, joka ei vaadi erillistä palvelinprosessia ja mahdollistaa pääsyn tietokantaan käyttämällä SQL-kyselykielen epätyypillistä muunnelmaa. Jotkut sovellukset voivat käyttää SQLitea sisäiseen tietojen tallentamiseen. On myös mahdollista prototyyppiä sovellus SQLiten avulla ja sitten siirtää koodi suurempaan tietokantaan, kuten PostgreSQL tai Oracle.
SQLite on C-kielikirjasto, joka tarjoaa kevyen levypohjaisen tietokannan, joka ei vaadi erillistä palvelinprosessia ja mahdollistaa tietokannan käytön SQL-kyselykielen epätyypillisellä versiolla. Jotkut sovellukset voivat käyttää SQLitea sisäiseen tietojen tallentamiseen. Lisäksi voit käyttää SQLitea sovelluksen prototyyppiin ja sitten siirtää koodin suureen tietokantaan, kuten PostgreSQL tai Oracle.
Thesqlite3
moduulin on kirjoittanut Gerhard Häring. Se tarjoaa SQL-rajapinnan, joka on yhteensopiva DB-API 2.0 -määrityksen kanssaPEP 249, ja vaatii SQLite 3.7.15:n tai uudemman.
sqlite3 moduuli Käsikirjoitus: Gerhard Häring. Se tarjoaa SQL-rajapinnan, joka noudattaa PEP 249:ssä kuvattua DB-API 2.0 -spesifikaatiota ja vaatii SQLite-version 3.7.15 tai uudemman.
Tämä asiakirja sisältää neljä pääosaa: Tämä asiakirja sisältää pääasiassa seuraavat neljä pääosaa
Opastusopettaa käyttämäänsqlite3
moduuli.OpastusOsa opettaa sqlite3-moduulin käyttöä.
Viitekuvaa tämän moduulin määrittelemät luokat ja funktiot.
viitataosiossa kuvataan tämän moduulin määrittelemät luokat ja funktiot.
Käyttöoppaatyksityiskohtaiset tiedot siitä, miten tiettyjä tehtäviä käsitellään.
KäyttöopasOsioissa kerrotaan, kuinka tiettyjä tehtäviä käsitellään.
Selitystarjoaa perusteellisen taustan tapahtumien hallinnasta.
selittääTämä osio tarjoaa perusteellisen johdannon tapahtumien hallinnan taustatietoihin.
Katso myös
SQLite-verkkosivu; dokumentaatiossa kuvataan syntaksi ja käytettävissä olevat tietotyypit tuetulle SQL-murteelle.
SQLiten web-sivulla kuvataan tuettujen SQL-murteiden syntaksi ja käytettävissä olevat tietotyypit.
SQL opetusohjelmaSQL opetusohjelma
Opetusohjelma, viite ja esimerkkejä SQL-syntaksin oppimiseen.
Oppaat, viitteet ja esimerkit SQL-syntaksin oppimiseen.
PEP 249- Tietokannan sovellusliittymän määritys 2.0 PEP 249 - Tietokannan sovellusliittymän määritys 2.0
PEP kirjoittanut Marc-André Lemburg PEP kirjoittanut Marc-André Lemburg.
Tässä opetusohjelmassa luot tietokannan Monty Python -elokuvat käyttäen perussqlite3
toiminnallisuus. Se edellyttää tietokantakäsitteiden perustavanlaatuista ymmärtämistä, mukaan lukienosoittimetjaliiketoimia.
Tässä opetusohjelmassa käytät sqlite3:n perustoimintoja luodaksesi tietokannan Monty Python -elokuvista. Tämä opetusohjelma olettaa, että sinulla on perustiedot tietokantakäsitteistä, mukaan lukien osoittimet ja tapahtumat.
Ensin meidän on luotava uusi tietokanta ja avattava tietokantayhteys salliaksesisqlite3
työskennellä sen kanssa. Puhelusqlite3.connect()luodaksesi yhteyden tietokantaantutorial.db
nykyisessä työhakemistossa, luomalla sen implisiittisesti, jos sitä ei ole olemassa:
Ensin meidän on luotava uusi tietokanta ja avattava tietokantayhteys, jotta sqlite3 voi olla vuorovaikutuksessa sen kanssa. Kutsu sqlite3.connect() luodaksesi yhteys tutorial.db-tietokantaan nykyisessä työhakemistossa, luoden sen implisiittisesti ja varovasti automaattisesti, jos tietokantaa ei ole olemassa:
- import sqlite3
- con = sqlite3.connect("tutorial.db")
PalautettuYhteysesinecon
edustaa yhteyttä levyllä olevaan tietokantaan.
Palautettu yhteysobjekti (tässä tapauksessa nimeltään con) edustaa yhteyttä levyllä olevaan tietokantaan.
Jotta suorittaa SQL-käskyjä janoutaa tuloksia SQL-kyselyistä, meidän on käytettävä tietokannan kohdistinta. Puhelucon.cursor()luomaanKursori:
Jotta voimme suorittaa SQL-lauseita ja saada tuloksia SQL-kyselyistä, meidän on käytettävä tietokantakursoreita. Soita con.cursor() luodaksesi kohdistimen:
cur = con.cursor()
Nyt kun meillä on tietokantayhteys ja kohdistin, voimme luoda tietokantataulukonmovie
sarakkeilla nimelle, julkaisuvuodelle ja arvostelupisteille. Yksinkertaisuuden vuoksi voimme vain käyttää sarakkeiden nimiä taulukkoilmoituksessa - kiitosjoustava kirjoitus SQLiten ominaisuus, tietotyyppien määrittäminen on valinnaista. SuoritaCREATE TABLE
lausunto soittamallacur.execute(...):
Nyt kun meillä on tietokantayhteys ja kohdistin, voimme luoda tietokantataulukon nimeltä elokuva, jossa on sarakkeita, kuten otsikko, julkaisuvuosi ja arvostelupisteet. Asioiden yksinkertaistamiseksi voimme käyttää sarakkeiden nimiä suoraan taulukon ilmoituksessa - tietotyypin määrittäminen on valinnaista SQLiten joustavan kirjoitusominaisuuden vuoksi. Suorita CREATE TABLE -käsky kutsumalla cur.execute(...):
cur.execute("CREATE TABLE movie(title, year, score)")
Voimme varmistaa, että uusi taulukko on luotu kyselylläsqlite_master
SQLiteen sisäänrakennettu taulukko, jonka pitäisi nyt sisältää merkintämovie
Taulukon määritelmä (katsoKaaviotaulukko yksityiskohtia varten). Suorita kysely soittamallacur.execute(...), määritä tulos käyttäjälleres
, ja soitares.fetchone()noutaaksesi tuloksena olevan rivin:
Voimme varmistaa, että uusi taulukko on luotu kysymällä SQLiten sisäänrakennettua sqlite_master-taulukkoa, jonka pitäisi nyt sisältää merkinnät elokuvataulukon määrittelyä varten (katso lisätietoja skeemataulukosta). Suorita kysely kutsumalla cur.execute(...), määritä tulokset res:lle ja kutsu res.fetchone() saadaksesi tulosrivit:
>>>
- >>> res = cur.execute("SELECT name FROM sqlite_master")
- >>> res.fetchone()
- ('movie',)
Näemme, että taulukko on luotu, kun kysely palauttaa amonikko sisältää taulukon nimen. Jos kyselemmesqlite_master
olemattomalle pöydällespam
, res.fetchone()
palaaNone
:
Voimme nähdä, että taulukko luotiin onnistuneesti, koska kysely palautti taulukon nimen sisältävän monikon. Jos kyselyllä sqlite_master ei ole olemassa olevaa taulukkoa (kuten roskapostia), res.fetchone() palauttaa None.
>>>
- >>> res = cur.execute("SELECT name FROM sqlite_master WHERE name='spam'")
- >>> res.fetchone() is None
- True
Lisää nyt kaksi riviä tietoja, jotka on toimitettu SQL-literaaaleina suorittamalla aINSERT
lausunnon, vielä kerran soittamallacur.execute(...):
Lisää nyt kaksi riviä tietoja, jotka toimitetaan SQL-literaaaleina, suorittamalla INSERT-käsky (kutsumalla cur.execute(...) uudelleen):
- cur.execute("""
- INSERT INTO movie VALUES
- ('Monty Python and the Holy Grail', 1975, 8.2),
- ('And Now for Something Completely Different', 1971, 7.5)
- """)
TheINSERT
lauseke avaa implisiittisesti tapahtuman, joka on sitova ennen kuin muutokset tallennetaan tietokantaan (katsoTapahtuman valvontayksityiskohtia varten). Puhelucon.commit()yhteysobjektissa tapahtuman sitomiseksi:
INSERT-käsky käynnistää implisiittisesti ja automaattisesti tapahtuman, joka on sitova ennen kuin muutokset tallennetaan tietokantaan (katso lisätietoja kohdasta Tapahtuman hallinta). Toteuta tapahtuma kutsumalla con.commit() yhteysobjektissa:
con.commit()
Voimme varmistaa, että tiedot on lisätty oikein suorittamalla aSELECT
kysely. Käytä nyt tuttuacur.execute(...)määrittääksesi tuloksenres
, ja soitares.fetchall()palauttaaksesi kaikki tuloksena olevat rivit:
Voimme varmistaa, että tiedot on lisätty oikein suorittamalla SELECT-kyselyn. Määritä tulokset res:lle käyttämällä nyt tuttua cur.execute(...) -funktiota ja kutsu res.fetchall() palauttaaksesi kaikki tulosrivit:
>>>
- >>> res = cur.execute("SELECT score FROM movie")
- >>> res.fetchall()
- [(8.2,), (7.5,)]
Tuloksena on alistaaaaaaaakahdestatuple
s, yksi per rivi, joista jokainen sisältää kyseisen rivinscore
arvo.
Tuloksena on luettelo kahdesta monikosta, yksi jokaiselle riville, ja jokainen monikko sisältää kyseisen rivin pistemäärän.
Lisää nyt kolme riviä lisää soittamallacur.executemany(...):
Lisää nyt vielä kolme riviä tietoja kutsumalla cur.executemany(...):
- data = [
- ("Monty Python Live at the Hollywood Bowl", 1982, 7.9),
- ("Monty Python's The Meaning of Life", 1983, 7.5),
- ("Monty Python's Life of Brian", 1979, 8.0),
- ]
- cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data)
- con.commit() # Remember to commit the transaction after executing INSERT.
Huomaa, että?
paikkamerkkejä käytetään sitomiseendata
kyselyyn. Käytä aina paikkamerkkejä sen sijaanmerkkijonon muotoilusitoa Python-arvot SQL-lauseisiin välttääksesiSQL-injektiohyökkäykset(katsoKuinka käyttää paikkamerkkejä arvojen sitomiseen SQL-kyselyissäLisätietoja).
Huomaa, että ?-merkkiä käytetään tietojen sitomiseen kyselyyn. Käytä aina paikkamerkkejä merkkijonomuotoilun sijaan Python-arvojen sitomiseen SQL-lauseisiin välttääksesi SQL-injektiohyökkäykset (katso lisätietoja kohdasta "Arvojen sitominen käyttämällä paikkamerkkejä SQL-kyselyissä").
Voimme varmistaa, että uudet rivit on lisätty suorittamalla aSELECT
kysely, tällä kertaa toistaen kyselyn tuloksia:
Voimme varmistaa, että uusi rivi on lisätty suorittamalla SELECT-kysely, tällä kertaa toistamme kyselyn tulokset:
>>>
- >>> for row in cur.execute("SELECT year, title FROM movie ORDER BY year"):
- ... print(row)
- (1971, 'And Now for Something Completely Different')
- (1975, 'Monty Python and the Holy Grail')
- (1979, "Monty Python's Life of Brian")
- (1982, 'Monty Python Live at the Hollywood Bowl')
- (1983, "Monty Python's The Meaning of Life")
Jokainen rivi on kaksiosainenmonikko/(year, title)
, joka vastaa kyselyssä valittuja sarakkeita.
Jokainen rivi on monikko, joka sisältää kaksi elementtiä (vuosi, otsikko), jotka vastaavat kyselyssä valittua saraketta.
Tarkista lopuksi, että tietokanta on kirjoitettu levylle soittamallacon.close()sulkeaksesi olemassa olevan yhteyden, avaamalla uuden, luomalla uuden kohdistimen ja tekemällä kyselyn tietokannasta:
Lopuksi soittamallacon.close()
sulkeaksesi olemassa olevan tietokantayhteyden ja varmistaaksesi, että tietokanta on kirjoitettu levylle. Avaa sitten uusi yhteys, luo uusi kohdistin ja tee tietokannasta kysely varmistaaksesi, että tietojen kirjoittaminen onnistui.
>>>
- >>> con.close()
- >>> new_con = sqlite3.connect("tutorial.db")
- >>> new_cur = new_con.cursor()
- >>> res = new_cur.execute("SELECT title, year FROM movie ORDER BY score DESC")
- >>> title, year = res.fetchone()
- >>> print(f'The highest scoring Monty Python movie is {title!r}, released in {year}')
- The highest scoring Monty Python movie is 'Monty Python and the Holy Grail', released in 1975
- >>> new_con.close()
Olet nyt luonut SQLite-tietokannan käyttämälläsqlite3
moduuli, lisätty data ja haettu arvot siitä useilla tavoilla.
olet nyt käyttänytsqlite3
Moduuli luo SQLite-tietokannan ja lisää ja noutaa siitä tietoja monin eri tavoin [Retrieve? 】Arvo.
Katso myösKatso myös
Käyttöoppaatlisälukemista varten: Kuinka sitoa arvoja käyttämällä paikkamerkkejä SQL-kyselyissä:
Kuinka käyttää paikkamerkkejä arvojen sitomiseen SQL-kyselyissä
Kuinka sitoa arvoja käyttämällä paikkamerkkejä SQL-kyselyissä:
Kuinka mukauttaa mukautettuja Python-tyyppejä SQLite-arvoihin
Mukautetun Python-tyypin mukauttaminen SQLite-arvoon:
Kuinka muuntaa SQLite-arvot mukautetuiksi Python-tyypeiksi
Kuinka muuntaa SQLite-arvo mukautetuksi Python-tyypiksi:
Kuinka käyttää yhteyden kontekstinhallintaa
Yhteyden kontekstinhallinnan käyttäminen:
Kuinka luoda ja käyttää rivitehtaita
Rivitehtaiden luominen ja käyttö:
Selityssaadaksesi perusteellisen taustan tapahtumien hallinnasta.
Syvällinen taustaselitys tapahtumien hallinnasta:
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)
Avaa yhteys SQLite-tietokantaan Tätä toimintoa käytetään yhteyden avaamiseen SQLite-tietokantaan.
tietokanta (polun kaltainen esine ) – Avattavan tietokantatiedoston polku. Voit ohittaa":memory:"
luodaksesi anSQLite-tietokanta olemassa vain muistissaja avaa yhteys siihen.database (path-like object)
tietokanta (polun kaltainen objekti) — Tämä on polku avattavaan tietokantatiedostoon.Voit ohittaa":memory:"
luodaksesi muistissa olevan SQLite-tietokannan ja avataksesi siihen yhdistetyn .database(polun kaltaisen objektin).
Aikalisä (kellua) – Kuinka monta sekuntia yhteyden tulee odottaa ennen kuin nostaa anToimintavirhe kun pöytä on lukossa. Jos toinen yhteys avaa tapahtuman taulukon muokkaamiseksi, taulukko lukitaan, kunnes tapahtuma on sitoutunut. Oletus viisisekuntia.timeout (float)
— Yhteys katkeaa, kun pöytä on lukittuOperationalError
Kuinka monta sekuntia on odotettava ennen. Jos toinen yhteys avaa tapahtuman taulukon muokkaamiseksi, taulukko lukitaan, kunnes tapahtuma on sitoutunut. Oletusarvo on viisi sekuntia.
havaitse_tyypit (int) – Hallitse, onko ja miten tietotyypit eiSQLite tukee alkuperäisestietsitään muunnettavaksi Python-tyypeiksi käyttämällä muuntimia, joihin on rekisteröityregister_converter() . Aseta se mihin tahansa yhdistelmään (käyttäen|
, bittikohtaisesti tai) ofPARSE_DECLTYPESjaPARSE_COLNAMESottaaksesi tämän käyttöön. Sarakkeiden nimet menee etusijalleilmoitettuja tyyppejä jos molemmat liput on asetettu. Luoduille kentille ei voida tunnistaa tyyppejä (esimmax(data)
), vaikkahavaitse_tyypitparametri on asetettu;str palautetaan sen sijaan. Oletuksena (0
), tyypin tunnistus on poistettu käytöstä.detect_types (int)
— Hallitsee, löydetäänkö käyttöön tietotyyppejä, joita SQLite ei tue alkuperäisesti, ja kuinkaregister_converter()
Rekisteröidyt muuntimet muuntavat ne Python-tyypeiksi.aseta se päällePARSE_DECLTYPES
jaPARSE_COLNAMES
mikä tahansa yhdistelmä (käyttäen bittikohtaisesti tai|
) ottaaksesi tämän ominaisuuden käyttöön.Jos molemmat liput on asetettu, niinLista menee etusijallelausunto tyyppi.Luoduilla alueilla näitä tyyppejä ei voida havaita (esim.max(data)
), vaikka asetettunadetect_types
sen sijaan se palaastr
tyyppi. Oletusarvona (0) tyypin tunnistus ei ole käytössä.
Lisää se tähän
Ketä tässä englanninkielisessä kappaleessa käsitellään "on katsotaan ylös"?
Tässä englanninkielisessä kappaleessa aihe "on etsitty" on ne "tietotyypit, joita SQLite ei tue natiivisti (tietotyyppejä, joita SQLite ei tue natiivisti)".Tämä lause tarkoittaa, että käyttämälläregister_converter()
Rekisteröityjä muuntimia etsimään ja muuttamaan tietotyyppejä, joita SQLite ei tue alkuperäisesti, Python-tyypeiksi. Aiheet ovat siis niitä erityisiä tietotyyppejä, jotka on löydettävä ja muutettava.
isolation_level (str | Ei mitään ) – Hallitse perinteistä tapahtumien käsittelyä. KatsoConnection.isolation_leveljaTapahtuman hallinta isolation_level-attribuutilla Lisätietoja. Voi olla"DEFERRED"
(oletus),"EXCLUSIVE"
tai"IMMEDIATE"
; taiNone
estääksesi tapahtumien avaamisen implisiittisesti. Ei vaikuta, elleiConnection.autocommiton asetettuLEGACY_TRANSACTION_CONTROL(oletusarvo).isolation_level
(merkkijono | Ei mitään) – Hallitse perinteistä tapahtumankäsittelykäyttäytymistä.Katso lisätietojaConnection.isolation_level
ja "läpäiseisolation_level
Property Control Transaction". Voi olla"DEFERRED"
(oletusarvo),"EXCLUSIVE"
tai"IMMEDIATE"
;tai asetaNone
implisiittisten tapahtumien avaamisen poistamiseksi käytöstä.ElleiConnection.autocommit
AsettaaLEGACY_TRANSACTION_CONTROL
(oletus), muuten tällä asetuksella ei ole vaikutusta.
check_same_thread (bool) – JosTrue
(oletus),Ohjelmointivirhe nostetaan, jos tietokantayhteyttä käyttää jokin muu säie kuin se, joka loi sen. JosFalse
, yhteyttä voidaan käyttää useissa säikeissä; Käyttäjä saattaa joutua sarjottamaan kirjoitustoiminnot tietojen vioittumisen välttämiseksi. KatsolankaturvallisuusLisätietoja.check_same_thread
(Totuusarvo) – Jos asetettuTrue
(oletus), nousee, kun tietokantayhteyttä käyttää jokin muu säie kuin sen luonut säie.ProgrammingError
epänormaalia.Jos asetettuFalse
, useat säikeet voivat käyttää yhteyttä, mutta käyttäjien on ehkä sarjoitettava (jatkuvasti) kirjoitustoiminnot tietojen vioittumisen välttämiseksi.Katso lisätietojathreadsafety
ohje.
tehdas (Yhteys) – Muokattu alaluokkaYhteysluodaksesi yhteyden, jos ei oletuksenaYhteysluokkaa.factory
(yhteys) – Jos et käytä oletusasetustaConnection
luokka, määritä mukautettuConnection
Alaluokka yhteyden luomiseksi. Tämän parametrin avulla voit mukauttaa tietokantayhteyden toimintaa erityistarpeiden tai laajennusten mukaan.
välimuistissa olevat_ilmoitukset (int) – Niiden lausuntojen määräsqlite3
pitäisi tallentaa tämän yhteyden sisäiseen välimuistiin, jotta vältetään jäsennys. Oletusarvoisesti 128 lausetta.cached_statements
(int) – sqlite3
Niiden lausekkeiden määrä, jotka tulee tallentaa sisäisesti välimuistiin tätä yhteyttä varten, jotta vältetään jäsennys. Oletuksena välimuistiin tallennetaan 128 lausuntoa. Tämän parametrin avulla voit säätää välimuistin kokoa suorituskyvyn tai muistin käytön optimoimiseksi.
uri (bool) – Jos asetettuTrue
, tietokanta tulkitaan URI:ksi, jossa on tiedostopolku ja valinnainen kyselymerkkijono. Kaavan osaon pakkoolla"file:"
, ja polku voi olla suhteellinen tai absoluuttinen. Kyselymerkkijono mahdollistaa parametrien välittämisen SQLitelle, mikä mahdollistaa erilaistenKuinka työskennellä SQLite URI:iden kanssa.uri
(bool) – Jos asetettuTrue
,muttadatabase
Tulkitaan yhtenäiseksi resurssitunnisteeksi (URI), jossa on tiedostopolku ja valinnainen kyselymerkkijono. URI:n kaavioosaon pakko on "file:", polku voi olla suhteellinen tai absoluuttinen. Kyselymerkkijonojen avulla parametrit voidaan välittää SQLitelle, mikä mahdollistaa erilaisia tapoja työskennellä SQLite-URI:ien kanssa. Tämä mahdollistaa monimutkaisemmat tietokantayhteysvaihtoehdot, kuten vain luku -tilan asettamisen, välimuistin koon määrittämisen jne.
automaattinen toimitus (bool) – ValvontaPEP 249 liiketoimien käsittelykäyttäytyminen. KatsoConnection.autocommitjaTapahtuman hallinta autocommit-attribuutin kauttaLisätietoja.automaattinen toimituställä hetkellä oletuksenaLEGACY_TRANSACTION_CONTROL . Oletusasetukseksi vaihtuuFalse
tulevassa Python-julkaisussa.autocommit
(bool) – Hallitse tapahtumien käsittelyä PEP 249:n mukaisesti.Katso lisätietojaConnection.autocommit
ja "Tapahtumien hallinta autocommit-attribuutin avulla." nykyisessä,autocommit
Oletusarvo on asetettuLEGACY_TRANSACTION_CONTROL
, mikä tarkoittaa, että se noudattaa Python Database API -määrityksen (PEP 249) perinteistä tapahtumanhallintakäyttäytymistä.Pythonin tulevassa versiossa oletusarvo kuitenkin muuttuu muotoonFalse
, mikä tarkoittaa, että tapahtumat eivät ole automaattisesti sitoutuneet oletusarvoisesti ja edellyttävät, että käyttäjä ohjaa nimenomaisesti tapahtuman alkamista ja loppua.
Huomaa,
*
Parametreja käytetään funktiomäärittelyissä erottimina sijainti- ja avainsanaargumenttien, merkityksen välilläautocommit
Kaikkien sen jälkeisten parametrien on oltava avainsanaparametreja.
Palautustyyppi:Palautustyyppi:
Nostaa antilintarkastustapahtuma sqlite3.connect
argumentin kanssadatabase
.sqlite3.connect
: Käytettäessädatabase
Parametrit heitetään tietokantaan yhdistettäessä.
Nostaa antilintarkastustapahtuma sqlite3.connect/handle
argumentin kanssaconnection_handle
.sqlite3.connect/handle
: Kun liitäntäkahva (connection_handle
) heitetään, kun se luodaan.
Muutettu versiossa 3.4: Lisättyuriparametri.
Versiossa 3.4: lisättyuri
Parametri, joka mahdollistaa tietokantatiedoston määrittämisen URI-muodossa.
Muutettu versiossa 3.7:tietokantavoi nyt olla myös apolun kaltainen esine, ei vain merkkijono.
Versiossa 3.7:database
Parametrit voivat nyt olla polun kaltaisia objekteja pelkkien merkkijonojen sijaan.
Muutettu versiossa 3.10: Lisättysqlite3.connect/handle
tilintarkastustapahtuma.
Versiossa 3.10: lisättysqlite3.connect/handle
Tarkastustapahtuma, joka käynnistyy, kun yhteyskahva luodaan.
Muutettu versiossa 3.12: Lisättyautomaattinen toimitusparametri.
Versiossa 3.12: lisättyautocommit
Parametrit, jotka mahdollistavat tapahtumien automaattisen vahvistuksen hallinnan tarkemmin.
PalataTrue
jos merkkijonolausunto näyttää sisältävän yhden tai useamman täydellisen SQL-käskyn. Mitään syntaktista varmennusta tai jäsentämistä ei suoriteta, paitsi tarkastetaan, ettei ole sulkemattomia merkkijonoliteraaleja ja että käsky päättyy puolipisteeseen.
jos merkkijonostatement
näyttää sisältävän yhden tai useamman täydellisen SQL-käskyn, ja palaa sittenTrue
. Syntaksin tarkistusta tai jäsennystä ei tehdä muutoin kuin sen tarkistaminen, ettei siinä ole sulkemattomia merkkijonoliteraaleja ja että käsky päättyy puolipisteeseen.
Esimerkiksi:Esimerkki
>>>
- >>> sqlite3.complete_statement("SELECT foo FROM bar;")
- True
- >>> sqlite3.complete_statement("SELECT foo")
- False
Tämä toiminto voi olla hyödyllinen komentorivisyötön aikana sen määrittämiseksi, näyttääkö syötetty teksti muodostavan täydellisen SQL-lauseen vai tarvitaanko lisäsyöttöä ennen kutsumistasuorittaa().
Tämä toiminto voi olla hyödyllinen kirjoitettaessa komentoriville, jotta voidaan määrittää, näyttääkö kirjoitettu teksti täydelliseltä SQL-käskyltä tai kutsuttaessaexecute()
Tarvitaanko lisäsyöttöä ennen.
Katsorunsource()
sisäänLib/sqlite3/__main__.pytosielämän käyttöön.
Käytännön sovelluksissa voit viitataLib/sqlite3/__main__.py
keskellärunsource()
toiminto ymmärtää sen käyttöä.
Ota takaisinsoittojäljitykset käyttöön tai poista ne käytöstä. Oletusarvoisesti et saa jälkijäljitystä käyttäjän määrittämissä funktioissa, aggregaateissa, muuntimissa, valtuutuksen takaisinkutsuissa jne. Jos haluat tehdä virheenkorjauksen, voit kutsua tätä toimintoalippuasetettuTrue
. Jälkeenpäin saat jäljitykset takaisinsoittoistasys.stderr . KäyttääFalse
poistaaksesi ominaisuuden uudelleen käytöstä.
Ota takaisinsoittoseuranta käyttöön tai poista se käytöstä. Oletuksena et saa jälkijäljitystä käyttäjän määrittämissä funktioissa, koostefunktioissa, muuntimissa, valtuutuksen takaisinkutsuissa jne.Jos haluat korjata ne, voit kutsua tämän toiminnon ja korvata neflag
AsettaaTrue
.Sen jälkeen pystyt siihensys.stderr
Hanki jäljitystiedot takaisinsoittosta.käyttääFalse
poistaaksesi tämän ominaisuuden uudelleen käytöstä.
Huomautus
Virheet käyttäjän määrittämissä funktioiden takaisinkutsuissa kirjataan lokiin poikkeuksina, joita ei voida herättää. Käytä annostamaton koukunkäsittelijäepäonnistuneen takaisinsoiton itsetutkiskelua varten.
Virheet käyttäjän määrittämissä funktioiden takaisinkutsuissa kirjataan poikkeuksina, joita ei voida havaita. Käytä nostamatonta koukun käsittelijää suorittaaksesi itsetutkiskelun epäonnistuneissa takaisinkutsuissa.
Tämä tarkoittaa, että kun SQLiten käyttäjän määrittämien funktioiden (kuten aggregaattifunktiot, skalaarifunktiot jne.) takaisinkutsuissa tapahtuu virheitä, näitä virheitä ei esiinny normaalien Python-poikkeuksien tapaan ja try-except-lohkot voivat saada ne kiinni. Sen sijaan SQLite tai Pythonin sqlite3-moduuli kaappaa ne ja kirjaa ne jollain tavalla (yleensä kirjoitetaan lokiin tai vakiovirhetulosteeseen), mutta ne eivät keskeytä ohjelman suorittamista (ellei virhe ole erittäin vakava).
Voit tarkastaa ja korjata nämä poikkeukset, joita ei voi sietää, määrittämällä "saamattomien koukkukäsittelijän". Tämä käsittelijä on funktio, jota Python kutsuu, kun havaitsematon poikkeus tapahtuu, ja välittää poikkeustiedot parametrina. Tällä tavalla voit kirjoittaa koodia prosessoritoimintoon kirjataksesi lokiin tai tarkistaaksesi nämä poikkeukset ongelman diagnosoimiseksi.
Huomaa, että erityinen toteutus voi vaihdella Python-version ja sqlite3-moduulin toteutustietojen mukaan. Siksi on suositeltavaa tutustua viimeisimpään Python-dokumentaatioon tai sqlite3-moduulin dokumentaatioon saadaksesi tietoja uncatchable hook -käsittelijän määrittämisestä ja käytöstä.
Rekisteröidy ansovitin kutsuttavissaPython-tyypin mukauttamiseksityyppi SQLite-tyyppiin. Sovitinta kutsutaan Python-objektin kanssatyyppisen ainoana argumenttina, ja sen on palautettava arvo atyyppi, jonka SQLite natiivisti ymmärtää.
Rekisteröi **sovitin** kutsuttava objekti Pythonin muuntamista vartentype
Tyyppi on mukautettu tyyppiin, jonka SQLite voi natiivisti ymmärtää.Tämä sovitintoiminto kestää atype
Tyypin objektia kutsutaan ainoaksi argumentiksi, ja sen on palautettava arvo, joka on tyyppiä, jota SQLite tukee natiivisti.
On huomattava, että "
type
tyyppi" saattaa olla hieman harhaanjohtava, koska yleensä emme viittaa Pythonin sisäänrakennettuuntype
Objektit (eli itse tyypit) tallennetaan suoraan tietokantaan. Yleisemmin haluamme mukauttaa Pythonin objektit (jotka voivat olla mukautettuja tyyppejä) muotoon, jonka SQLite voi tallentaa.Ota lause kuitenkin kirjaimellisesti, jos sinun täytyy käsitellätype
itse objektin (vaikka tämä on harvinaista käytännössä), sinun on kirjoitettava sovitin muuntaaksesi sen johonkin muotoon, jonka SQLite voi tallentaa, kuten merkkijono, joka edustaa tyypin nimeä.
Yleisempi käyttötapaus on kuitenkin mukautetuille Python-tyypeille tai sisäänrakennetuille tyypeille, kuten
datetime
、decimal.Decimal
jne.) kirjoittaa sovittimia, jotta SQLite-tietokanta voi tallentaa ja hakea ne oikein.Jos sinulla on esimerkiksi mukautettu Python-luokka
MyClass
, ja haluat tallentaa ilmentymän SQLite-tietokantaan, voit kirjoittaa sovittimen, joka muuntaa tämän luokan esiintymän merkkijonoksi (tai muuksi tyypiksi), jonka SQLite voi tallentaa, ja kirjoittaa sitten muuntimen, joka muuntaa tämän merkkijonon takaisin. kohtaanMyClass
ilmentymä.Kuitenkin tähän kysymykseen, jos haluat vain käsitellä Pythonia
type
objekti (eli tyypin metatiedot), voit kirjoittaa sovittimen palauttamaan tyypin nimen (merkkijonona), mutta tämä ei yleensä ole yleinen käytäntö objektien tallentamisessa tietokantaan.
Rekisteröidymuunnin kutsuttavissatyyppisten SQLite-objektien muuntamiseentyypin nimi tietyntyyppiseen Python-objektiin. Muunnin kutsutaan kaikille tyypin SQLite-arvoilletyypin nimi ; se on ohitettu atavua objektin ja sen pitäisi palauttaa haluttua Python-tyyppiä oleva objekti. Katso parametrihavaitse_tyypit/kytkeä()saadaksesi tietoja tyypintunnistuksen toiminnasta.
Rekisteröi **muunnin** kutsuttava objekti SQLite-tyyppien muuntamista vartentypename
Muuntaa objektin tietyn tyyppiseksi Python-objektiksi.Kaikille tyypeilletypename
Tätä muunninta kutsutaan mille tahansa SQLite-arvolle, jonka se vastaanottaa abytes
objekti argumenttina ja sen pitäisi palauttaa vaaditun Python-tyypin objekti.Katso, miten tyypin tunnistus toimiiconnect()
Toimivadetect_types
parametri.
Huomautus:tyypin nimija kyselysi tyypin nimi täsmäävät isot ja pienet kirjaimet erottelematta.
Ilmoitus:typename
Kyselyn tyypin nimessä kirjainkoolla ei ole merkitystä täsmäämisen yhteydessä.
Asetaautomaattinen toimitus tähän vakioon valitaksesi vanhan tyylin (Python 3.12:ta edeltävä) tapahtumanhallintakäyttäytyminen. KatsoTapahtuman hallinta isolation_level-attribuutillaLisätietoja.
Tahtoaautocommit
Aseta tämä vakio valitaksesi vanhan tyylin (Python 3.12:ta edeltävän) tapahtumien hallintakäyttäytymisen.Lisätietoja on kohdassa "Passisolation_level
Kiinteistöt valvovat liiketoimia".
Välitä tämä lipun arvo arvollehavaitse_tyypitparametrikytkeä() Voit etsiä muuntimen funktiota käyttämällä kyselysarakkeen nimestä jäsennettyä tyypin nimeä muuntimen sanakirjan avaimena. Tyypin nimi tulee kirjoittaa hakasulkeisiin ([]
).
Välitä tämä lipun arvo kohteeseenconnect()
Toimivadetect_types
Parametri muunninfunktion löytämiseksi kysymällä ratkaistu tyypin nimi sarakkeen nimessä muuntimen sanakirjan avaimeksi. Tyyppien nimet on kirjoitettava hakasulkeisiin ([]).
SELECT p as "p [point]" FROM test; ! will look up converter "point"
Tämä lippu voidaan yhdistääPARSE_DECLTYPESkäyttämällä|
(bittikohtainen tai) -operaattori.
Tätä lippua voidaan käyttää|
(bittikohtainen TAI) -operaattori ANDPARSE_DECLTYPES
Yhdessä kanssa.
Välitä tämä lipun arvo arvollehavaitse_tyypitparametrikytkeä() etsiäksesi muunninfunktion käyttämällä jokaiselle sarakkeelle ilmoitettuja tyyppejä. Tyypit ilmoitetaan tietokantataulukkoa luotaessa.sqlite3
etsii muunnosfunktion käyttämällä ilmoitetun tyypin ensimmäistä sanaa muuntimen sanakirjan avaimena. Esimerkiksi:
Välitä tämä lipun arvo kohteeseenconnect()
Toimivadetect_types
Parametrit muunninfunktion löytämiseksi käyttämällä tietokannan kunkin sarakkeen ilmoitettua tyyppiä. Nämä tyypit ilmoitetaan tietokantataulukkoa luotaessa.sqlite3
Muunnintoimintoa etsitään käyttämällä ilmoitetun tyypin ensimmäistä sanaa muuntimen sanakirjan avaimena. Esimerkiksi:
- CREATE TABLE test(
- i integer primary key, ! will look up a converter named "integer"
- p point, ! will look up a converter named "point"
- n number(10) ! will look up a converter named "number"
- )
Tämä lippu voidaan yhdistääPARSE_COLNAMESkäyttämällä|
(bittikohtainen tai) -operaattori.
Liput, jotka tulee palauttaaAuthorizer_callback kutsuttavissasiirtyiConnection.set_authorizer(), osoittaakseen, onko:
Siirrä osoitteeseenConnection.set_authorizer()
/authorizer_callback
Liput, jotka kutsuttavan funktion pitäisi palata osoittamaan:
Pääsy on sallittu (SQLITE_OK
), pääsy on sallittu (SQLITE_OK
)
SQL-käsky tulee keskeyttää virheellä (SQLITE_DENY
)
SQL-käsky tulee keskeyttää virheellä (SQLITE_DENY
)
Kolonnia tulee käsitellä aNULL
arvo (SQLITE_IGNORE
)
Sarakkeita tulee käsitellä NULL-arvoina (SQLITE_IGNORE
)
Merkkijonovakio, joka ilmaisee tuetun DB-API-tason. DB-API vaatii. Kovakoodattu"2.0"
.
Nämä kaksi merkkijonovakiota ovatsqlite3
Moduuleissa määritellyt ne noudattavat Python Database API -spesifikaatiota (DB-API).
Merkkijonovakio, joka ilmaisee parametrin merkin odottaman muotoilun tyypinsqlite3
moduuli. DB-API vaatii. Kovakoodattu"qmark"
.
Tämä merkkijonovakio määrittääsqlite3
Moduulin odottaman parametrimerkin muotoilun tyyppi. Tätä edellyttää DB-API (Database Application Programming Interface) -spesifikaatio.Se on kovakoodattu nimellä"qmark"
, tarkoittaa, että SQL-kyselyitä rakennettaessa parametrimerkit tulisi esittää kysymysmerkeillä (?).
Huomautus
Thenamed
DB-API-parametrityyli on myös tuettu.
Ajonaikaisen SQLite-kirjaston versionumero amerkkijono.
SQLite-ajonaikaisen kirjaston versionumero ilmaistuna merkkijonomuodossa.
Ajonaikaisen SQLite-kirjaston versionumero amonikko/kokonaislukuja.
SQLite-ajonaikaisen kirjaston versionumero ilmaistuna kokonaislukuina.
DB-API 2.0:n vaatima kokonaislukuvakio, joka ilmaisee säikeen turvallisuuden tasonsqlite3
moduuli tukee. Tämä attribuutti on asetettu oletusarvon perusteellalangoitustila taustalla oleva SQLite-kirjasto on käännetty. SQLite-ketjutustilat ovat:
DB-API 2.0:n vaatima kokonaislukuvakio, mikä osoittaasqlite3
Moduulin tukema kierteen turvataso. Tämä ominaisuus asetetaan oletusketjutustilan mukaan, jolla taustalla oleva SQLite-kirjasto on käännetty. SQLiten ketjutustilat sisältävät:
Yksisäikeinen: Tässä tilassa kaikki mutexet ovat poissa käytöstä ja SQLitea ei ole turvallista käyttää useammassa kuin yhdessä säikeessä kerralla.
Yksisäike: Tässä tilassa kaikki mutexet ovat poissa käytöstä, eikä SQLitea ole turvallista käyttää useissa säikeissä samanaikaisesti.
Monisäikeinen: Tässä tilassa SQLitea voidaan käyttää turvallisesti useissa säikeissä, jos yhtä tietokantayhteyttä ei käytetä samanaikaisesti kahdessa tai useammassa säikeessä.
Monisäike: Tässä tilassa SQLitea voidaan käyttää turvallisesti useissa säikeissä, jos kaksi tai useampi säike ei käytä yhtä tietokantayhteyttä samanaikaisesti.
Sarjoitettu: Serialisoidussa tilassa SQLitea voidaan käyttää turvallisesti useissa säikeissä ilman rajoituksia.
Serialized: Sarjatilassa SQLitea voidaan käyttää turvallisesti useissa säikeissä ilman rajoituksia.
Yhdistelmät SQLite-ketjutustiloista DB-API 2.0 -säikeiden suojaustasoille ovat seuraavat:
SQLiten säietilan yhdistäminen DB-API 2.0 -säikeen turvallisuustasolle on seuraava:
SQLite-ketjutustila | DB-API 2.0 merkitys | ||
---|---|---|---|
yksilankainen | 0 | 0 | Säikeet eivät välttämättä jaa moduulia |
monisäikeinen | 1 | 2 | Säikeet voivat jakaa moduulin, mutta eivät yhteyksiä |
sarjoitettu | 3 | 1 | Säikeet voivat jakaa moduulin, yhteydet ja osoittimet |
Muutettu versiossa 3.11: Setlankaturvallisuusdynaamisesti koodaamisen sijaan1
.
Tämän moduulin versionumero amerkkijono . Tämä ei ole SQLite-kirjaston versio.
Tämän moduulin versionumero merkkijonona ilmaistuna.TämäeiSQLite-kirjaston versionumero.
Käytöstä poistettu versiosta 3.12 lähtien, poistetaan versiossa 3.14: Tätä vakiota käytetään heijastamaan versionumeroapysqlite
paketti, kolmannen osapuolen kirjasto, joka ennen muuttisqlite3
. Nykyään sillä ei ole merkitystä tai käytännön arvoa.
Poistettu käytöstä versiosta 3.12 lähtien, poistetaan versiossa 3.14: Tätä vakiota käytettiin kuvaamaanpysqlite
Paketin versionumero,pysqlite
Se on kolmannen osapuolen kirjasto, joka on ladattu alkupäähänsqlite3
Sitoudu muutokset. Nyt sillä ei ole todellista merkitystä tai käytännön arvoa.
Tämän moduulin versionumero amonikko/kokonaislukuja . Tämä ei ole SQLite-kirjaston versio.
Käytöstä poistettu versiosta 3.12 lähtien, poistetaan versiossa 3.14: Tätä vakiota käytetään heijastamaan versionumeroapysqlite
paketti, kolmannen osapuolen kirjasto, joka ennen muuttisqlite3
. Nykyään sillä ei ole merkitystä tai käytännön arvoa.
Näitä vakioita käytetäänConnection.setconfig()jagetconfig()menetelmiä.
Näitä vakioita käytetäänConnection.setconfig()
jagetconfig()
menetelmä.
Näiden vakioiden saatavuus vaihtelee sen mukaan, minkä version kanssa SQLite Python on käännetty.
Näiden vakioiden saatavuus riippuu SQLite-versiosta, jolla SQLite Python on käännetty.
Lisätty versioon 3.12.
Katso myös
Tietokantayhteyden määritysasetukset
SQLite-dokumentit: Tietokantayhteyden määritysasetukset
Jokaista avointa SQLite-tietokantaa edustaa aConnection
objekti, joka luodaan käyttämälläsqlite3.connect() . Niiden päätarkoitus on luominenKursoriesineitä jaTapahtuman valvonta.
Katso myös
SQLite-tietokantayhteydellä on seuraavat attribuutit ja menetelmät:
Luo ja palauta aKursori esine. Kursorimenetelmä hyväksyy yhden valinnaisen parametrintehdas . Jos toimitetaan, sen on oltava akutsuttavissapalauttaa ilmentymänKursoritai sen alaluokissa.
Luo a:n ja palauttaa a:nCursor
esine.cursor
Menetelmä hyväksyy valinnaisen yksittäisen parametrinfactory
.Jos tämä parametri on annettu, sen on oltava kutsuttava objekti, joka palauttaa aCursor
tai sen alaluokan esiintymä.
Avaa aMöykkykäsitellä olemassa olevaan BLOBiin.
Parametrit:
pöytä (str) – sen taulukon nimi, jossa blob sijaitsee.
BLOB-tiedot sisältävän taulukon nimi.
sarakkeessa (str) – Sen sarakkeen nimi, jossa blob sijaitsee.
BLOB-tiedot sisältävän sarakkeen nimi.
rivi (str) – Sen rivin nimi, jossa blob sijaitsee.
Sen rivin nimi (tai tarkemmin sanoen rivin tunniste), joka sisältää BLOB-tiedot.
Lue ainoastaan (bool) - AsetettuTrue
jos blob pitäisi avata ilman kirjoitusoikeuksia. OletuksenaFalse
.
Jos asetettu arvoon True, se osoittaa, että BLOB tulee avata ilman kirjoitusoikeutta. Oletusarvo on False, joka sallii lukemisen ja kirjoittamisen.
nimi (str ) – Sen tietokannan nimi, jossa blob sijaitsee. Oletuksena"main"
.
BLOB-tietoja sisältävän tietokannan nimi. Oletusarvo on "main", joka on SQLiten oletustietokannan nimi.
Nostaa:
Toimintavirhe– Kun yrität avata möykkyä aWITHOUT ROWID
pöytä.
Kun yrittää ilmanRIVITapahtuu, kun BLOB-tiedot avataan ID-taulukossa.
Palautustyyppi:
Huomautus
Blobin kokoa ei voi muuttaa käyttämälläMöykky luokkaa. Käytä SQL-funktiota
zeroblob
luodaksesi kiinteän kokoisen blobin.
Lisätty versioon 3.11.
Sitouta kaikki odottavat tapahtumat tietokantaan. Josautomaattinen toimitusOnTrue
, tai avointa tapahtumaa ei ole, tämä menetelmä ei tee mitään. Josautocommit
OnFalse
, uusi tapahtuma avataan implisiittisesti, jos odottava tapahtuma on sitoutunut tällä menetelmällä.
Sitouta kaikki odottavat tapahtumat tietokantaan.josautocommit
On True tai avointa tapahtumaa ei ole, tämä menetelmä ei suorita mitään toimintoa.josautocommit
on False, ja tämä menetelmä suorittaa odottavan tapahtuman, uusi tapahtuma käynnistetään implisiittisesti.
Palaa odottavien tapahtumien alkuun. Josautomaattinen toimitusOnTrue
, tai avointa tapahtumaa ei ole, tämä menetelmä ei tee mitään. Josautocommit
OnFalse
, uusi tapahtuma avataan implisiittisesti, jos odottava tapahtuma peruutettiin tällä menetelmällä.
Palaa kaikkien odottavien tapahtumien alkuun.josautocommit
On True tai avointa tapahtumaa ei ole, tämä menetelmä ei suorita mitään toimintoa.josautocommit
on False, ja tämä menetelmä peruuttaa odottavan tapahtuman, uusi tapahtuma käynnistetään implisiittisesti.
Sulje tietokantayhteys. Josautomaattinen toimitusOnFalse
, kaikki odottavat tapahtumat peruutetaan implisiittisesti. Josautocommit
OnTrue
taiLEGACY_TRANSACTION_CONTROL , mitään implisiittistä tapahtuman ohjausta ei suoriteta. Varmistatehdä()ennen sulkemista, jotta et menetä odottavia muutoksia.
Sulje tietokantayhteys.josautocommit
Jos epätosi, kaikki odottavat tapahtumat peruutetaan implisiittisesti.josautocommit
on totta taiLEGACY_TRANSACTION_CONTROL
(vanha tapahtumien valvonta), implisiittistä tapahtuman valvontaa ei suoriteta.Muista soittaa ennen sulkemistacommit()
välttääksesi odottavien muutosten menettämisen.
Luoda uusiKursorivastusta ja soitasuorittaa()siihen annetullasqljaparametrit . Palauta uusi kohdistinobjekti.
luoda uusiCursor
vastusta ja soitaexecute()
menetelmä, ohittamalla annettusql
lausunnot ja parametrit.palauta tämä uusiCursor
esine.
Luoda uusiKursorivastusta ja soitaexecutemany()siihen annetullasqljaparametrit . Palauta uusi kohdistinobjekti.
luoda uusiCursor
vastusta ja soitaexecutemany()
menetelmä, ohittamalla annettusql
Lausunnot ja parametrisarjat. Tämä mahdollistaa useiden parametrijoukkojen suorittamisen kerralla.palauta tämä uusiCursor
esine.
Luoda uusiKursorivastusta ja soitaexecutescript()siihen annetullasql_script . Palauta uusi kohdistinobjekti.
luoda uusiCursor
vastusta ja soitaexecutescript()
menetelmä, joka välittää annetun SQL-skriptin. Tämä mahdollistaa useiden SQL-käskyjen suorittamisen komentosarjassa puolipisteillä erotettuina.palauta tämä uusiCursor
esine.
Luo tai poista käyttäjän määrittämä SQL-funktio.
Luo tai poista käyttäjän määrittämä SQL-funktio.
Parametrit:
nimi (str) – SQL-funktion nimi.name
(str) – SQL-funktion nimi.
narg (int ) – SQL-funktion hyväksymien argumenttien määrä. Jos-1
, se voi vaatia minkä tahansa määrän argumentteja.narg
(int) – SQL-funktion hyväksymien argumenttien määrä. Jos -1, se tarkoittaa, että se voi hyväksyä minkä tahansa määrän argumentteja.
func (soita takaisin | Ei mitään) – Akutsuttavissa jota kutsutaan, kun SQL-funktiota kutsutaan. Kutsuttavan on palattavaSQLiten natiivisti tukema tyyppi . AsetettuNone
olemassa olevan SQL-funktion poistamiseksi.func
(takaisinkutsu | Ei mitään) – Tämä kutsuttava objekti (takaisinkutsu) suoritetaan, kun SQL-funktiota kutsutaan. Tämän kutsuttavan objektin on palautettava tyyppi, jota SQLite tukee natiivisti. Jos asetukseksi asetetaan Ei mitään, olemassa olevat SQL-funktiot poistetaan.
deterministinen (bool) – JosTrue
, luotu SQL-funktio on merkitty nimellädeterministinen, jonka avulla SQLite voi suorittaa lisäoptimointeja.deterministic
(bool) – Jos True, merkitsee luodun SQL-funktion deterministiseksi, jolloin SQLite voi suorittaa lisäoptimointeja.
Nostaa:
NotSupportedError– Josdeterministinenkäytetään SQLite-versioiden kanssa, jotka ovat vanhempia kuin 3.8.3.
Muutettu versiossa 3.8: Lisättydeterministinenparametri.
Esimerkki:
>>>
- >>> import hashlib
- >>> def md5sum(t):
- ... return hashlib.md5(t).hexdigest()
- >>> con = sqlite3.connect(":memory:")
- >>> con.create_function("md5", 1, md5sum)
- >>> for row in con.execute("SELECT md5(?)", (b"foo",)):
- ... print(row)
- ('acbd18db4cc2f85cedef654fccc4a4d8',)
- >>> con.close()
Luo tai poista käyttäjän määrittämä SQL-koontifunktio.
Luo tai poista käyttäjän määrittämä SQL-koontifunktio.
Parametrit:
nimi (str) – SQL-koontifunktion nimi.
name
(str) – SQL-koontifunktion nimi.
n_arg (int ) – SQL-koontifunktion hyväksymien argumenttien määrä. Jos-1
, se voi vaatia minkä tahansa määrän argumentteja.
Parametrien määrä, jotka SQL-koontifunktio voi hyväksyä. Jos -1, se tarkoittaa, että se voi hyväksyä minkä tahansa määrän argumentteja.
aggregate_class (luokkaa | Ei mitään) -
Luokan tulee toteuttaa seuraavat menetelmät:
Luokan tulee toteuttaa seuraavat menetelmät:
step()
: Lisää rivi aggregaattiin.
finalize()
: Palauta aggregaatin lopputulos muodossaSQLiten natiivisti tukema tyyppi.finalize()
: Tätä menetelmää käytetään yhdistämisen lopullisen tuloksen palauttamiseen.
Argumenttien määrästep()
menetelmä täytyy hyväksyä hallitseen_arg.step()
Parametrien lukumäärä, jonka menetelmän on hyväksyttävä, on annettun_arg
ohjata.
AsetettuNone
olemassa olevan SQL-koontifunktion poistamiseksi.
AsettaaNone
olemassa olevien SQL-koontifunktioiden poistamiseksi.
Esimerkki:
- class MySum:
- def __init__(self):
- self.count = 0
-
- def step(self, value):
- self.count += value
-
- def finalize(self):
- return self.count
-
- con = sqlite3.connect(":memory:")
- con.create_aggregate("mysum", 1, MySum)
- cur = con.execute("CREATE TABLE test(i)")
- cur.execute("INSERT INTO test(i) VALUES(1)")
- cur.execute("INSERT INTO test(i) VALUES(2)")
- cur.execute("SELECT mysum(i) FROM test")
- print(cur.fetchone()[0])
-
- con.close()
Luo tai poista käyttäjän määrittämä koosteikkunafunktio.
Parametrit:
nimi (str) – Luotavan tai poistettavan SQL-koontiikkunafunktion nimi.
num_params (int ) – SQL-koontiikkunafunktion hyväksymien argumenttien määrä. Jos-1
, se voi vaatia minkä tahansa määrän argumentteja.
aggregate_class (luokkaa | Ei mitään) -
Luokka, jonka on toteutettava seuraavat menetelmät:
step()
: Lisää rivi nykyiseen ikkunaan.
value()
: Palauttaa aggregaatin nykyisen arvon.
inverse()
: Poista rivi nykyisestä ikkunasta.
finalize()
: Palauta aggregaatin lopputulos muodossaSQLiten natiivisti tukema tyyppi.
Argumenttien määrästep()
javalue()
menetelmät täytyy hyväksyä hallitseenum_params.
AsetettuNone
olemassa olevan SQL-koontiikkunafunktion poistamiseksi.
Nostaa:
NotSupportedError– Jos sitä käytetään SQLite-version kanssa, joka on vanhempi kuin 3.25.0, joka ei tue ikkunan koostetoimintoja.
Lisätty versioon 3.11.
Esimerkki:
# 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(nimi, kutsuttavissa, /)
Luo lajittelu nimeltänimikäyttämällä lajittelutoimintoakutsuttavissa. kutsuttavissaon läpäissyt kaksimerkkijonoargumentteja, ja sen pitäisi palauttaa ankokonaisluku:
1
jos ensimmäinen on korkeampi kuin toinen
-1
jos ensimmäinen tilataan alempana kuin toinen
0
jos ne määrätään samanarvoisiksi
Seuraava esimerkki esittää käänteisen lajittelun lajittelun:
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()
Poista lajittelutoiminto asettamallakutsuttavissakohtaanNone
.
Muutettu versiossa 3.11: Lajittelunimi voi sisältää minkä tahansa Unicode-merkin. Aiemmin vain ASCII-merkit olivat sallittuja.
keskeyttää()
Kutsu tätä menetelmää eri säikeestä keskeyttääksesi kaikki yhteydessä mahdollisesti suoritettavat kyselyt. Keskeytetyt kyselyt herättävät anToimintavirhe.
set_authorizer(Authorizer_callback)
Rekisteröidykutsuttavissa Authorizer_callback kutsutaan jokaiselle yritykselle päästä tietokannan taulukon sarakkeeseen. Takaisinsoiton pitäisi palauttaa yksi seuraavistaSQLITE_OK, SQLITE_DENY, taiSQLITE_IGNOREilmaisemaan, kuinka taustalla olevan SQLite-kirjaston tulisi käsitellä sarakkeen pääsyä.
Takaisinkutsun ensimmäinen argumentti ilmaisee, millainen toiminto valtuutetaan. Toinen ja kolmas argumentti ovat argumentteja taiNone
ensimmäisestä väitteestä riippuen. Neljäs argumentti on tietokannan nimi ("main", "temp" jne.), jos mahdollista. 5. argumentti on sisimmän liipaisimen tai näkymän nimi, joka on vastuussa pääsyyrityksestä taiNone
jos tämä pääsyyritys on suoraan syötetystä SQL-koodista.
Tutustu SQLite-dokumentaatioon ensimmäisen argumentin mahdollisista arvoista sekä toisen ja kolmannen argumentin merkityksestä ensimmäisestä riippuen. Kaikki tarvittavat vakiot ovat saatavillasqlite3
moduuli.
OhitusNone
kutenAuthorizer_callbackpoistaa valtuutuksen käytöstä.
Muutettu versiossa 3.11: Lisätty tuki valtuutuksen poistamiseen käytöstäNone
.
set_progress_handler(edistymisen_käsittelijä, n)
Rekisteröidykutsuttavissa edistymisen_käsittelijävedottava jokaisellen SQLite-virtuaalikoneen ohjeita. Tämä on hyödyllistä, jos haluat saada kutsun SQLitesta pitkien toimintojen aikana, esimerkiksi graafisen käyttöliittymän päivittämiseksi.
Jos haluat tyhjentää aiemmin asennetun edistymiskäsittelijän, kutsu menetelmää käyttämälläNone
vartenedistymisen_käsittelijä.
Nollasta poikkeavan arvon palauttaminen käsittelijäfunktiosta lopettaa parhaillaan suoritettavan kyselyn ja saa sen nostamaanTietokanta virhepoikkeus.
set_trace_callback(trace_callback)
Rekisteröidykutsuttavissa trace_callbackkutsutaan jokaiselle SQL-käskylle, jonka SQLite-taustaohjelma todella suorittaa.
Ainoa takaisinkutsun argumentti on lause (kutenstr ), jota toteutetaan. Takaisinsoiton palautusarvo jätetään huomiotta. Huomaa, että taustaohjelma ei suorita vain käskyjä, jotka välitetäänCursor.execute() menetelmiä. Muita lähteitä ovat mmtransaktioiden hallinta-ltasqlite3
moduuli ja nykyisessä tietokannassa määritettyjen laukaisujen suorittaminen.
OhitusNone
kutentrace_callbackpoistaa jäljityksen takaisinkutsun käytöstä.
Huomautus
Jäljityksen takaisinkutsussa esiin tuotuja poikkeuksia ei levitetä. Käytä kehitys- ja virheenkorjausapunaenable_callback_tracebacks()mahdollistaa jäljityskutsussa esiin tuoduista poikkeuksista tulostamisen.
Lisätty versioon 3.3.
enable_load_extension(käytössä, /)
Salli SQLite-moottori ladata SQLite-laajennuksia jaetuista kirjastoista, joskäytössäOnTrue
; muussa tapauksessa estä SQLite-laajennusten lataaminen. SQLite-laajennukset voivat määrittää uusia toimintoja, aggregaatteja tai kokonaan uusia virtuaalitaulukkototeutuksia. Yksi tunnettu laajennus on SQLiten kanssa jaettu fulltext-hakulaajennus.
Huomautus
Thesqlite3
moduulia ei ole rakennettu ladattavien laajennusten tuella oletuksena, koska joissakin alustoissa (erityisesti macOS) on SQLite-kirjastoja, jotka on käännetty ilman tätä ominaisuutta. Ladattavan laajennustuen saamiseksi sinun on läpäistävä--enable-loadable-sqlite-extensionsvaihtoehtokonfiguroida.
Nostaa antilintarkastustapahtuma sqlite3.enable_load_extension
argumenttien kanssaconnection
, enabled
.
Lisätty versioon 3.2.
Muutettu versiossa 3.10: Lisättysqlite3.enable_load_extension
tilintarkastustapahtuma.
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(polku, /, *, entrypoint=Ei mitään)
Lataa SQLite-laajennus jaetusta kirjastosta. Ota laajennuksen lataus käyttöönenable_load_extension()ennen kuin kutsut tätä menetelmää.
Parametrit:
polku (str) – Polku SQLite-laajennukseen.
sisääntulopiste (str | Ei mitään ) – Aloituskohdan nimi. JosNone
(oletus), SQLite keksii oman aloituspisteen nimensä; katso SQLite-dokumentitLadataan laajennustayksityiskohtia varten.
Nostaa antilintarkastustapahtuma sqlite3.load_extension
argumenttien kanssaconnection
, path
.
Lisätty versioon 3.2.
Muutettu versiossa 3.10: Lisättysqlite3.load_extension
tilintarkastustapahtuma.
Muutettu versiossa 3.12: Lisättysisääntulopisteparametri.
iterdump()
Palauta aniteraattori tyhjentää tietokannan SQL-lähdekoodina. Hyödyllinen tallennettaessa muistissa olevaa tietokantaa myöhempää palauttamista varten. Samanlainen kuin.dump
komento kohdassasqlite3kuori.
Esimerkki:
# 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()
Katso myös
Kuinka käsitellä ei-UTF-8-tekstikoodauksia
varmuuskopioida(kohde, *, sivut=-1, edistyminen = Ei mitään, nimi='pää', uni = 0,250)
Luo varmuuskopio SQLite-tietokannasta.
Toimii, vaikka tietokantaa käyttäisivät muut asiakkaat tai samanaikaisesti sama yhteys.
Parametrit:
kohde (Yhteys) – Tietokantayhteys, johon varmuuskopio tallennetaan.
sivuja (int ) – Kerralla kopioitavien sivujen määrä. Jos yhtä suuri tai pienempi kuin0
, koko tietokanta kopioidaan yhdessä vaiheessa. Oletuksena-1
.
edistystä (soita takaisin | Ei mitään) – Jos asetus on akutsuttavissa, sitä kutsutaan kolmella kokonaislukuargumentilla jokaista varmuuskopioiteraatiota varten: theTilaviimeisestä iteraatiosta,jäljelle jäänytkopioitavien sivujen määrä jakaikki yhteensä sivujen määrä. OletuksenaNone
.
nimi (str ) – Varmuuskopioitavan tietokannan nimi. Jompikumpi"main"
(oletus) päätietokannassa,"temp"
väliaikaista tietokantaa varten tai mukautetun tietokannan nimi, joka on liitetty käyttämälläATTACH DATABASE
SQL-lause.
nukkua (kellua) – Lepotilan sekuntien määrä peräkkäisten jäljellä olevien sivujen varmuuskopiointiyritysten välillä.
Esimerkki 1, kopioi olemassa oleva tietokanta toiseen:
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()
Esimerkki 2, kopioi olemassa oleva tietokanta väliaikaiseksi kopioksi:
src = sqlite3.connect('example.db') dst = sqlite3.connect(':memory:') src.backup(dst) dst.close() src.close()
Lisätty versioon 3.7.
Katso myös
Kuinka käsitellä ei-UTF-8-tekstikoodauksia
hanki raja (kategoria, /)
Hanki yhteyden suoritusaikarajoitus.
Parametrit:
kategoria (int) –SQLite-rajaluokkakysyttäväksi.
Palautustyyppi:
Nostaa:
Ohjelmointivirhe– Joskategoriataustalla oleva SQLite-kirjasto ei tunnista sitä.
Esimerkki: kysy SQL-käskyn enimmäispituuttaYhteys con
(oletus on 1000000000):
>>>
>>> con.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH) 1000000000
Lisätty versioon 3.11.
setlimit(kategoria, raja, /)
Aseta yhteyden suoritusaikaraja. Yritykset nostaa rajaa sen kovan ylärajan yläpuolelle katkaistaan äänettömästi kovaksi ylärajaksi. Riippumatta siitä, onko rajaa muutettu vai ei, rajan aikaisempi arvo palautetaan.
Parametrit:
kategoria (int) –SQLite-rajaluokkaasetettava.
raja (int ) – Uuden rajan arvo. Jos negatiivinen, virtaraja ei muutu.
Palautustyyppi:
Nostaa:
Ohjelmointivirhe– Joskategoriataustalla oleva SQLite-kirjasto ei tunnista sitä.
Esimerkki: rajaa liitettyjen tietokantojen määrä yhteenYhteys con
(oletusraja on 10):
>>>
>>> con.setlimit(sqlite3.SQLITE_LIMIT_ATTACHED, 1) 10 >>> con.getlimit(sqlite3.SQLITE_LIMIT_ATTACHED) 1
Lisätty versioon 3.11.
getconfig(op, /)
Kysy boolen yhteysmääritysvaihtoehtoa.
Parametrit:
op (int) – ASQLITE_DBCONFIG-koodi.
Palautustyyppi:
Lisätty versioon 3.12.
setconfig(op, enable=True, /)
Aseta looginen yhteysmääritysvaihtoehto.
Parametrit:
op (int) – ASQLITE_DBCONFIG-koodi.
ota käyttöön (bool) – True
jos konfigurointivaihtoehdon pitäisi olla käytössä (oletus);False
jos se pitäisi poistaa käytöstä.
Lisätty versioon 3.12.
sarjallistaa(*, nimi='pää')
Sarjaa tietokanta atavua esine. Tavallisen levyllä olevan tietokantatiedoston serialisointi on vain kopio levytiedostosta. Muistissa olevan tietokannan tai "väliaikaisen" tietokannan sarjoittaminen on sama tavusarja, joka kirjoitetaan levylle, jos tietokanta varmuuskopioidaan levylle.
Parametrit:
nimi (str ) – sarjoitettava tietokannan nimi. Oletuksena"main"
.
Palautustyyppi:
Huomautus
Tämä menetelmä on käytettävissä vain, jos taustalla olevassa SQLite-kirjastossa on serialize API.
Lisätty versioon 3.11.
sarjoittaa (tiedot, /, *, nimi='pää')
Deserialoi asarjoitettutietokanta aYhteys . Tämä menetelmä saa tietokantayhteyden katkeamaan tietokantaannimi, ja avaa uudelleennimimuistissa olevana tietokantana, joka perustuu julkaisun sisältämään serialisointiintiedot.
Parametrit:
tiedot (tavua) – Sarjamuotoinen tietokanta.
nimi (str ) – Tietokannan nimi, johon sarjoitetaan. Oletuksena"main"
.
Nostaa:
Toimintavirhe– Jos tietokantayhteys on parhaillaan mukana lukutapahtumassa tai varmuuskopiointitoiminnossa.
Tietokanta virhe– Jostiedotei sisällä kelvollista SQLite-tietokantaa.
Ylivuotovirhe– Joslen(data)on suurempi kuin2**63 - 1
.
Huomautus
Tämä menetelmä on käytettävissä vain, jos taustalla olevassa SQLite-kirjastossa on deserialize API.
Lisätty versioon 3.11.
automaattinen toimitus
Tämä määrite ohjaaPEP 249-säännöstenmukainen kaupankäyntikäyttäytyminen.autocommit
on kolme sallittua arvoa:
False
: ValitsePEP 249-sopiva liiketoimikäyttäytyminen, mikä viittaa siihensqlite3
varmistaa, että kauppa on aina auki. Käyttäätehdä()japalautus()liiketoimien sulkemiseen.
Tämä on suositeltu arvoautocommit
.
True
: Käytä SQLiteaautomaattinen vahvistustila. tehdä()japalautus()ei vaikuta tässä tilassa.
LEGACY_TRANSACTION_CONTROL: Pre-Python 3.12 (ei-PEP 249 -yhteensopiva) tapahtumien valvonta. Katsoisolation_levelLisätietoja.
Tämä on tällä hetkellä oletusarvoautocommit
.
Vaihtaaautocommit
kohtaanFalse
avaa uuden tapahtuman ja muuttaa sen muotoonTrue
suorittaa kaikki odottavat tapahtumat.
KatsoTapahtuman hallinta autocommit-attribuutin kauttaLisätietoja.
Huomautus
Theisolation_levelattribuutilla ei ole vaikutusta, elleiautomaattinen toimitusOnLEGACY_TRANSACTION_CONTROL.
Lisätty versioon 3.12.
in_transaction
Tämä vain luku -attribuutti vastaa matalan tason SQLiteaautomaattinen vahvistustila.
True
jos tapahtuma on aktiivinen (sitoutumattomia muutoksia on),False
muuten.
Lisätty versioon 3.2.
isolation_level
Ohjaaperinteinen tapahtumien käsittelytila/sqlite3
. Jos asetettuNone
, tapahtumia ei koskaan avata epäsuorasti. Jos asetettuna on jokin seuraavista"DEFERRED"
, "IMMEDIATE"
, tai"EXCLUSIVE"
, joka vastaa taustalla olevaa kohdettaSQLite-tapahtumakäyttäytyminen, implisiittisten tapahtumien hallintaon esitetty.
Jos ei ohitaisolation_levelparametrikytkeä(), oletus on""
, joka on alias"DEFERRED"
.
Huomautus
Käyttämälläautomaattinen toimitusTransaktioiden käsittelyn ohjaamiseen suositellaan käyttöäisolation_level
. isolation_level
ei vaikuta, elleiautomaattinen toimituson asetettuLEGACY_TRANSACTION_CONTROL(oletusarvo).
rivi_tehdas
Alkukirjainrivi_tehdasvartenKursori tästä yhteydestä luodut objektit. Tämän määritteen määrittäminen ei vaikutarow_factory
tähän yhteyteen kuuluvista olemassa olevista kohdistimista, vain uusia. OnNone
oletusarvoisesti, mikä tarkoittaa, että jokainen rivi palautetaan muodossa amonikko.
KatsoKuinka luoda ja käyttää rivitehtaitaLisätietoja.
text_factory
Akutsuttavissajoka hyväksyy atavua parametri ja palauttaa sen tekstiesityksen. Kutsuttava kutsutaan SQLite-arvoille komennollaTEXT
tietotyyppi. Oletuksena tämä määrite on asetettu arvoonstr.
KatsoKuinka käsitellä ei-UTF-8-tekstikoodauksiaLisätietoja.
muutosten yhteismäärä
Palauttaa tietokantarivien kokonaismäärän, joita on muokattu, lisätty tai poistettu tietokantayhteyden avaamisen jälkeen.
A
Cursor
objekti edustaa atietokannan kohdistin jota käytetään SQL-käskyjen suorittamiseen ja hakutoiminnon kontekstin hallintaan. Kohdistimet luodaan käyttämälläConnection.cursor(), tai käyttämällä mitä tahansayhteyden pikakuvakemenetelmiä.Kohdistinobjektit ovatiteraattorit, eli jos sinäsuorittaa()a
SELECT
kyselyä, voit yksinkertaisesti iteroida kohdistimen päällä noutaaksesi tuloksena olevat rivit:for row in cur.execute("SELECT t FROM data"): print(row)
luokkaasqlite3.Osoitin
AKursoriinstanssilla on seuraavat attribuutit ja menetelmät.
suorittaa(sql, parametrit =(), /)
Suorita yksi SQL-käsky, valinnaisesti sitomalla Python-arvot käyttämälläpaikkamerkit.
Parametrit:
sql (str) – Yksi SQL-lause.
parametrit (sanele | järjestys) – Python-arvot, jotka sitoutuvat paikkamerkkiinsql . Adict
jos käytetään nimettyjä paikkamerkkejä. Sarja, jos käytetään nimeämättömiä paikkamerkkejä. KatsoKuinka käyttää paikkamerkkejä arvojen sitomiseen SQL-kyselyissä.
Nostaa:
Ohjelmointivirhe– Jossqlsisältää useamman kuin yhden SQL-käskyn.
Josautomaattinen toimitusOnLEGACY_TRANSACTION_CONTROL, isolation_levelei oleNone
, sqlonINSERT
, UPDATE
, DELETE
, taiREPLACE
lauseke, ja avointa tapahtumaa ei ole, tapahtuma avataan implisiittisesti ennen sen suorittamistasql.
Käytöstä poistettu versiosta 3.12 lähtien, poistetaan versiossa 3.14:Vanhentumisvaroitusvapautuu, josnimetyt paikkamerkitkäytetään japarametriton sekvenssi a:n sijaansanele . Python 3.14:stä alkaen,Ohjelmointivirhenostetaan sen sijaan.
Käyttääexecutescript()useiden SQL-käskyjen suorittamiseen.
executemany(sql, parametrit, /)
Jokaiselle tuotteelleparametrit, suorita toistuvastiparametroituDML SQL-lausesql.
Käyttää samaa implisiittistä tapahtumakäsittelyä kuinsuorittaa().
Parametrit:
sql (str) – Yksi SQL DML -käsky.
parametrit (toistettavissa) – Parametrien iteraatio paikkamerkkien kanssa sidottavaksisql . KatsoKuinka käyttää paikkamerkkejä arvojen sitomiseen SQL-kyselyissä.
Nostaa:
Ohjelmointivirhe– Jossqlsisältää useamman kuin yhden SQL-käskyn tai se ei ole DML-käsky.
Esimerkki:
rows = [ ("row1",), ("row2",), ] # cur is an sqlite3.Cursor object cur.executemany("INSERT INTO data VALUES(?)", rows)
Huomautus
Kaikki tuloksena olevat rivit hylätään, mukaan lukien DML-lausekkeetPALAUTUSlausekkeet.
Käytöstä poistettu versiosta 3.12 lähtien, poistetaan versiossa 3.14:Vanhentumisvaroitusvapautuu, josnimetyt paikkamerkitovat käytössä ja tavarat sisälläparametritovat sekvenssien sijaansanele s. Python 3.14:stä alkaen,Ohjelmointivirhenostetaan sen sijaan.
executescript(sql_script, /)
Suorita SQL-käskyt sisäänsql_script . Josautomaattinen toimitusOnLEGACY_TRANSACTION_CONTROLja siellä on vireillä oleva tapahtuma, implisiittinenCOMMIT
lauseke suoritetaan ensin. Mitään muuta implisiittistä tapahtuman valvontaa ei suoriteta; kaikki tapahtuman valvonta on lisättäväsql_script.
sql_scripttäytyy olla amerkkijono.
Esimerkki:
# 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; """)
nouto ()
Josrivi_tehdasOnNone
, palauta seuraavan rivin kyselyn tulos asetettuna amonikko . Muussa tapauksessa toimita se rivitehtaalle ja palauta tulos. PalataNone
jos enempää tietoja ei ole saatavilla.
hae monta (size=cursor.arraysize)
Palauttaa kyselytuloksen seuraavan rivijoukon muodossa alistaaaaaaaa . Palauta tyhjä luettelo, jos rivejä ei ole enää käytettävissä.
Noudettavien rivien lukumäärä puhelua kohden määrittääkoko parametri. Joskokoei anneta,arraysize määrittää haettavien rivien määrän. Jos vähemmän kuinkokorivit ovat käytettävissä, niin monta riviä kuin on käytettävissä, palautetaan.
Huomaa, että siihen liittyy suorituskykyä koskevia näkökohtiakoko parametri. Optimaalisen suorituskyvyn saavuttamiseksi on yleensä parasta käyttää arraysize-attribuuttia. Joskokoparametria käytetään, silloin on parasta, että se säilyttää saman arvon yhdestähae monta ()soita seuraavaan.
hae ()
Palauta kyselytuloksen kaikki (jäljellä olevat) rivit muodossa alistaaaaaaaa . Palauta tyhjä luettelo, jos rivejä ei ole käytettävissä. Huomaa, ettäarraysizeattribuutti voi vaikuttaa tämän toiminnon suorituskykyyn.
kiinni()
Sulje kohdistin nyt (eikä milloin tahansa__del__
kutsutaan).
Kohdistin on käyttökelvoton tästä eteenpäin; aOhjelmointivirhepoikkeus nostetaan, jos yritetän toimia kohdistimella.
setinputsizes(koot, /)
DB-API vaatii. Ei sisällä mitäänsqlite3
.
setoutputsize(koko, column=Ei mitään, /)
DB-API vaatii. Ei sisällä mitäänsqlite3
.
arraysize
Luku/kirjoitus-attribuutti, joka ohjaa palauttamien rivien määräähae monta () . Oletusarvo on 1, mikä tarkoittaa, että puhelua kohden haetaan yksi rivi.
yhteys
Vain luku -attribuutti, joka tarjoaa SQLite-tietokannanYhteys joka kuuluu kohdistimeen. AKursorikutsumalla luotu objekticon.cursor()tulee olemaan ayhteysattribuutti, joka viittaacon:
>>>
>>> con = sqlite3.connect(":memory:") >>> cur = con.cursor() >>> cur.connection == con True >>> con.close()
kuvaus
Vain luku -attribuutti, joka tarjoaa viimeisen kyselyn sarakkeiden nimet. Python DB API:n kanssa pysyäkseen yhteensopivana se palauttaa 7-tuplen jokaiselle sarakkeelle, jossa kunkin monikon viimeiset kuusi alkiota ovatNone
.
Se on asetettuSELECT
myös lausunnot ilman vastaavia rivejä.
lastrowid
Vain luku -attribuutti, joka antaa viimeksi lisätyn rivin rivitunnuksen. Se päivitetään vasta onnistumisen jälkeenINSERT
taiREPLACE
lausunnot käyttäensuorittaa() menetelmä. Muiden lausuntojen jälkeenexecutemany()taiexecutescript(), tai jos lisäys epäonnistui, arvolastrowid
jätetään ennalleen. Alkuarvolastrowid
OnNone
.
Huomautus
Lisää sisäänWITHOUT ROWID
taulukoita ei tallenneta.
Muutettu versiossa 3.6: Lisätty tukiREPLACE
lausunto.
rivien määrä
Vain luku -attribuutti, joka antaa muokattujen rivien lukumääränINSERT
, UPDATE
, DELETE
, jaREPLACE
lausunnot; On-1
muille lauseille, mukaan lukien CTE-kyselyt. Sen päivittää vainsuorittaa()jaexecutemany() menetelmiä, kun lauseke on suoritettu loppuun. Tämä tarkoittaa, että kaikki tuloksena olevat rivit on haettava järjestyksessärowcount
tulla päivitetyksi.
rivi_tehdas
Hallitse kuinka rivi haetaan tästäCursor
on edustettuna. JosNone
, rivi esitetään muodossa amonikko . Voidaan asettaa mukaansqlite3.Row ; tai akutsuttavissajoka hyväksyy kaksi argumenttia, aKursoriesine jatuple
riviarvoista ja palauttaa mukautetun objektin, joka edustaa SQLite-riviä.
Oletuksena mitäConnection.row_factoryasetettiin kunCursor
luotiin. Tämän määritteen määrittäminen ei vaikutaConnection.row_factoryvanhemman yhteydestä.
KatsoKuinka luoda ja käyttää rivitehtaitaLisätietoja.
luokkaasqlite3.Row
ARow
instanssi toimii erittäin optimoitunarivi_tehdasvartenYhteys esineitä. Se tukee iteraatiota, tasa-arvotestausta,len(), jakartoituspääsy sarakkeen nimen ja indeksin perusteella.
KaksiRow
objektit ovat samanarvoisia, jos niillä on samat sarakkeiden nimet ja arvot.
KatsoKuinka luoda ja käyttää rivitehtaitaLisätietoja.
avaimet ()
Paluu alistaaaaaaaasarakkeiden nimistä kutenjouset . Välittömästi kyselyn jälkeen se on jokaisen tuplen ensimmäinen jäsenCursor.description.
Muutettu versiossa 3.5: Lisätty viipalointituki.
luokkaasqlite3.Blob
Lisätty versioon 3.11.
AMöykkyesimerkki on atiedostomainen objekti joka osaa lukea ja kirjoittaa tietoja SQLite BLOBiin. Puhelulen (blob) saadaksesi blobin koon (tavumäärän). Käytä indeksejä javiipaleitapäästäksesi suoraan blob-tietoihin.
KäytäMöykkykuten akontekstinhallintavarmistaaksesi, että blob-kahva on suljettu käytön jälkeen.
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()
kiinni()
Sulje blob.
Blob on käyttökelvoton tästä eteenpäin. AnVirhe(tai alaluokka) poikkeus korotetaan, jos blobin kanssa yritetään tehdä lisätoimintoja.
lukea(pituus = -1, /)
Lukeapituus tavua dataa blobista nykyisessä siirtymäkohdassa. Jos blobin loppu saavutetaan, tiedot palautetaan EOF:ään asti. Kunpituusei ole määritelty tai se on negatiivinen,lukea()lukee blobin loppuun asti.
kirjoittaa(tiedot, /)
Kirjoittaatiedot blobiin nykyisellä poikkeamalla. Tämä toiminto ei voi muuttaa blobin pituutta. Kirjoittaminen blobin lopun jälkeen nostaaValueError.
kertoa()
Palauta blobin nykyinen käyttöoikeus.
etsiä (offset, origin=os.SEEK_SET, /)
Aseta blobin nykyinen käyttösijaintioffset . Thealkuperäargumentti on oletuksenaos.SEEK_SET (absoluuttinen blob-paikannus). Muut arvot kohteellealkuperäovatos.SEEK_CUR(haku suhteessa nykyiseen sijaintiin) jaos.SEEK_END(etsi suhteessa blobin päähän).
luokkaasqlite3.PrepareProtocol
PrepareProtocol-tyypin ainoa tarkoitus on toimia aPEP 246tyylisovitusprotokolla objekteille, jotka voivatsopeutua itsekohtaanalkuperäiset SQLite-tyypit.
Poikkeushierarkian määrittää DB-API 2.0 (PEP 249).
poikkeussqlite3.Varoitus
Tätä poikkeusta ei tällä hetkellä esitetäsqlite3
moduuli, mutta sitä käyttävät sovellukset voivat nostaa sen esiinsqlite3
, esimerkiksi jos käyttäjän määrittämä funktio katkaisee tietoja lisättäessä.Warning
on alaluokkaPoikkeus.
poikkeussqlite3.Error
Tämän moduulin muiden poikkeusten perusluokka. Käytä tätä nappaamaan kaikki virheet yhdellä kertaapaitsilausunto.Error
on alaluokkaPoikkeus.
Jos poikkeus on peräisin SQLite-kirjastosta, poikkeukseen lisätään seuraavat kaksi attribuuttia:
sqlite_errorcode
Numeerinen virhekoodi osoitteestaSQLite API
Lisätty versioon 3.11.
sqlite_errorname
Numeerisen virhekoodin symbolinen nimi kohteestaSQLite API
Lisätty versioon 3.11.
poikkeussqlite3.InterfaceError
Poikkeus esitetty matalan tason SQLite C API:n väärinkäytön vuoksi. Toisin sanoen, jos tämä poikkeus nostetaan esiin, se todennäköisesti viittaa virheeseensqlite3
moduuli.InterfaceError
on alaluokkaVirhe.
poikkeussqlite3.DatabaseError
Poikkeus nostetaan tietokantaan liittyville virheille. Tämä toimii peruspoikkeuksena useille tietokantavirheille. Se nostetaan esiin vain implisiittisesti erikoistuneiden alaluokkien kautta.DatabaseError
on alaluokkaVirhe.
poikkeussqlite3.DataError
Poikkeus on otettu esiin virheistä, jotka johtuvat käsiteltyjen tietojen ongelmista, kuten lukuarvot alueen ulkopuolella ja merkkijonot, jotka ovat liian pitkiä.DataError
on alaluokkaTietokanta virhe.
poikkeussqlite3.OperationalError
Poikkeus nostetaan virheille, jotka liittyvät tietokannan toimintaan, eivätkä välttämättä ole ohjelmoijan hallinnassa. Esimerkiksi tietokannan polkua ei löydy tai tapahtumaa ei voitu käsitellä.OperationalError
on alaluokkaTietokanta virhe.
poikkeussqlite3.IntegrityError
Poikkeus syntyy, kun tietokannan relaatioeheys vaikuttaa, esim. vieraan avaimen tarkistus epäonnistuu. Se on alaluokkaTietokanta virhe.
poikkeussqlite3.InternalError
Poikkeus syntyy, kun SQLite kohtaa sisäisen virheen. Jos tämä tuodaan esiin, se voi tarkoittaa, että ajonaikaisessa SQLite-kirjastossa on ongelma.InternalError
on alaluokkaTietokanta virhe.
poikkeussqlite3.ProgrammingError
Poikkeus nostettusqlite3
API-ohjelmointivirheet, esimerkiksi väärän määrän sidosten syöttäminen kyselyyn tai yrittäminen toimia suljetullaYhteys. ProgrammingError
on alaluokkaTietokanta virhe.
poikkeussqlite3.NotSupportedError
Poikkeus nostetaan esiin, jos taustalla oleva SQLite-kirjasto ei tue menetelmää tai tietokannan sovellusliittymää. Esimerkiksi asettaminendeterministinenkohtaanTrue
sisäänluo_funktio(), jos taustalla oleva SQLite-kirjasto ei tue deterministisiä toimintoja.NotSupportedError
on alaluokkaTietokanta virhe.
SQLite tukee natiivisti seuraavia tyyppejä:NULL
, INTEGER
, REAL
, TEXT
, BLOB
.
Seuraavat Python-tyypit voidaan siis lähettää SQLiteen ilman ongelmia:
Näin SQLite-tyypit muunnetaan oletusarvoisesti Python-tyypeiksi:
SQLite-tyyppi | Python-tyyppi |
---|---|
|
|
| |
| |
| riippuutext_factory, stroletuksena |
|
Tyyppijärjestelmäsqlite3
moduulia voidaan laajentaa kahdella tavalla: voit tallentaa lisää Python-tyyppejä SQLite-tietokantaan kauttaobjektisovittimet, ja voit antaasqlite3
moduuli muuntaa SQLite-tyypit Python-tyypeiksi kauttamuuntimet.
Huomautus
Oletussovittimet ja -muuntimet ovat vanhentuneet Python 3.12:sta lähtien. Käytä sen sijaanSovittimen ja muuntimen reseptitja räätälöidä ne tarpeidesi mukaan.
Vanhentuneet oletussovittimet ja -muuntimet koostuvat seuraavista:
Adapteri vartenpäivämääräaika.päivämäärävastustaajousetsisäänISO 8601muoto.
Adapteri vartendatetime.datetimeobjektit merkkijonoihin ISO 8601 -muodossa.
Muunnin vartenjulisti"päivämäärä" kirjoittaapäivämääräaika.päivämääräesineitä.
Muunnin ilmoitetuille "aikaleima"-tyypeilledatetime.datetime esineitä. Murto-osat katkaistaan 6 numeroon (mikrosekunnin tarkkuus).
Huomautus
Oletusarvoinen "aikaleima"-muunnin jättää huomioimatta tietokannan UTC-siirtymät ja palauttaa aina naiivindatetime.datetime esine. Säilyttääksesi UTC-poikkeamat aikaleimoissa joko jättämällä muuntimet pois käytöstä tai rekisteröimällä offset-tietoisen muuntimenregister_converter().
Poistettu käytöstä versiosta 3.12 lähtien.
Thesqlite3
moduuli voidaan kutsua komentosarjana tulkin avulla-m kytkintä, jotta saadaan yksinkertainen SQLite-kuori. Argumentin allekirjoitus on seuraava:
python -m sqlite3 [-h] [-v] [filename] [sql]
Tyyppi.quit
tai CTRL-D poistuaksesi komentotulkista.
-h, -apua
Tulosta CLI-ohje.
-v, --versio
Tulosta taustalla oleva SQLite-kirjastoversio.
Lisätty versioon 3.12.
SQL-toimintojen on yleensä käytettävä Python-muuttujien arvoja. Varo kuitenkin käyttämästä Pythonin merkkijonotoimintoja kyselyjen kokoamiseen, koska ne ovat haavoittuviaSQL-injektiohyökkäykset . Hyökkääjä voi esimerkiksi yksinkertaisesti sulkea yhden lainauksen ja lisätä senOR TRUE
valitaksesi kaikki rivit:
>>>
>>> # 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)
Käytä sen sijaan DB-API:n parametrien korvaamista. Jos haluat lisätä muuttujan kyselymerkkijonoon, käytä merkkijonossa paikkamerkkiä ja korvaa todelliset arvot kyselyssä antamalla nemonikkoarvoista kohdistimen toiseen argumenttiinsuorittaa()menetelmä.
SQL-käsky voi käyttää kahta tyyppistä paikkamerkkiä: kysymysmerkkejä (qmark-tyyli) tai nimettyjä paikkamerkkejä (nimetty tyyli). qmark-tyyliinparametrittäytyy olla ajärjestysjonka pituuden on vastattava paikkamerkkien määrää, tai aOhjelmointivirhe on nostettu. Nimetylle tyylilleparametrittäytyy olla esimerkki asanele (tai alaluokka), jonka tulee sisältää avaimet kaikille nimetyille parametreille; kaikki ylimääräiset kohteet jätetään huomioimatta. Tässä on esimerkki molemmista tyyleistä:
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()
Huomautus
PEP 249numeeriset paikkamerkit ovatei tuettu. Jos niitä käytetään, ne tulkitaan nimetyiksi paikkamerkeiksi.
SQLite tukee vain rajoitettua joukkoa tietotyyppejä natiivisti. Tallentaaksesi mukautettuja Python-tyyppejä SQLite-tietokantoihin,sopeutuane johonkinPython-tyypit SQLite ymmärtää natiivisti.
Python-objekteja voidaan mukauttaa SQLite-tyyppeihin kahdella tavalla: antaa objektin mukautua itse tai käyttämälläsoitettava sovitin . Jälkimmäinen menee edellisen edelle. Kirjastolle, joka vie mukautetun tyypin, voi olla järkevää sallia kyseisen tyypin mukautuminen itseensä. Sovelluskehittäjänä voi olla järkevämpää ottaa suoraan hallintaansa rekisteröimällä mukautettuja sovittimen toimintoja.
Oletetaan, että meillä on aPoint
luokka, joka edustaa koordinaattiparia,x
jay
, suorakulmaisessa koordinaattijärjestelmässä. Koordinaattipari tallennetaan tietokantaan tekstimerkkijonona käyttämällä puolipistettä koordinaattien erottamiseen. Tämä voidaan toteuttaa lisäämällä a__conform__(self, protocol)
menetelmä, joka palauttaa mukautetun arvon. Kohde siirtyiprotokollaatulee olemaan tyyppiäValmistele protokolla.
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()
Toinen mahdollisuus on luoda funktio, joka muuntaa Python-objektin SQLite-yhteensopivaksi tyypiksi. Tämä toiminto voidaan sitten rekisteröidä käyttämällä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()
Sovittimen kirjoittaminen mahdollistaa muuntamisenalkaenmukautetut Python-tyypitkohtaan SQLite-arvot. Jotta voisi muuntaaalkaenSQLite-arvotkohtaanmukautettuja Python-tyyppejä, käytämmemuuntimet.
Palataan asiaanPoint
luokkaa. Tallensimme x- ja y-koordinaatit puolipisteillä erotettuina merkkijonoina SQLiteen.
Ensin määritetään muunnosfunktio, joka hyväksyy merkkijonon parametriksi ja muodostaa aPoint
esine siitä.
Huomautus
Muunnintoiminnot ovatainaläpäissyt atavuaobjektin taustalla olevasta SQLite-tietotyypistä riippumatta.
def convert_point(s): x, y = map(float, s.split(b";")) return Point(x, y)
Meidän on nyt kerrottavasqlite3
milloin sen pitäisi muuntaa annettu SQLite-arvo. Tämä tehdään, kun muodostetaan yhteys tietokantaan käyttämällähavaitse_tyypitparametrikytkeä() . Vaihtoehtoja on kolme:
Implisiittinen: asetettuhavaitse_tyypitkohtaanPARSE_DECLTYPES
Selkeä: asetettuhavaitse_tyypitkohtaanPARSE_COLNAMES
Molemmat: asetettuhavaitse_tyypitkohtaansqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES
. Sarakkeiden nimet ovat etusijalla ilmoitettuihin tyyppeihin nähden.
Seuraava esimerkki havainnollistaa implisiittisiä ja eksplisiittisiä lähestymistapoja:
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()
Tämä osio näyttää reseptit yleisille sovittimille ja muuntimille.
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)
Käyttämälläsuorittaa(), executemany(), jaexecutescript()menetelmätYhteysluokkaa, koodisi voidaan kirjoittaa tiiviimmin, koska sinun ei tarvitse luoda (usein tarpeetonta)Kursori esineitä nimenomaisesti. Sen sijaanKursori objektit luodaan implisiittisesti ja nämä pikakuvakemenetelmät palauttavat kohdistinobjektit. Tällä tavalla voit suorittaa aSELECT
lauseke ja iteroi sen yli suoraan käyttämällä vain yhtä kutsuaYhteysesine.
# 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()
AYhteys objektia voidaan käyttää kontekstinhallintaohjelmana, joka automaattisesti sitoo tai peruuttaa avoimet tapahtumat poistuessaan kontekstinhallinnan rungosta. Jos runkokanssa lauseke päättyy ilman poikkeuksia, tapahtuma on sitoutunut. Jos tämä sitoumus epäonnistuu tai joswith
lauseke herättää havaitsemattoman poikkeuksen, tapahtuma peruutetaan. Josautomaattinen toimitusOnFalse
, uusi tapahtuma avataan implisiittisesti sitoutumisen tai peruutuksen jälkeen.
Jos ei ole avointa tapahtumaa poistuttaessa rungostawith
lausunto, tai josautomaattinen toimitusOnTrue
, kontekstinhallinta ei tee mitään.
Huomautus
Kontekstinhallinta ei implisiittisesti avaa uutta tapahtumaa eikä sulje yhteyttä. Jos tarvitset sulkevan kontekstinhallinnan, harkitse sen käyttöä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()
Joitakin hyödyllisiä URI-temppuja ovat:
Avaa tietokanta vain luku -tilassa:
>>>
>>> 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
Älä luo epäsuorasti uutta tietokantatiedostoa, jos sitä ei vielä ole olemassa. nostaaToimintavirhejos et pysty luomaan uutta tiedostoa:
>>>
>>> con = sqlite3.connect("file:nosuchdb.db?mode=rw", uri=True) Traceback (most recent call last): OperationalError: unable to open database file
Luo jaettu nimetty muistin sisäinen tietokanta:
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()
Lisätietoja tästä ominaisuudesta, mukaan lukien luettelo parametreista, löytyySQLite URI -dokumentaatio.
Oletuksena,sqlite3
edustaa jokaista riviä muodossa amonikko . Jostuple
ei vastaa tarpeitasi, voit käyttääsqlite3.Rowluokkaa tai mukautettuarivi_tehdas.
Sillä aikaarow_factory
olemassa attribuuttina sekäKursorijaYhteys, on suositeltavaa asettaaConnection.row_factory, joten kaikki yhteyden kautta luodut osoittimet käyttävät samaa rivitehdasta.
Row
tarjoaa indeksoidun ja kirjainkoolla välittömän nimetyn pääsyn sarakkeisiin minimaalisella muistin ja suorituskyvyn vaikutuksella yli atuple
. KäyttääRow
rivitehtaana, määritä serow_factory
attribuutti:
>>>
>>> con = sqlite3.connect(":memory:") >>> con.row_factory = sqlite3.Row
Kyselyt palaavat nytRow
esineet:
>>>
>>> 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()
Huomautus
TheFROM
lauseke voidaan jättää poisSELECT
lause, kuten yllä olevassa esimerkissä. Tällaisissa tapauksissa SQLite palauttaa yhden rivin sarakkeilla, jotka on määritelty lausekkeilla, esim. literaaleilla, annetuilla aliaksillaexpr AS alias
.
Voit luoda mukautetunrivi_tehdasjoka palauttaa jokaisen rivin muodossa asanele, sarakkeiden nimet on yhdistetty arvoihin:
def dict_factory(cursor, row): fields = [column[0] for column in cursor.description] return {key: value for key, value in zip(fields, row)}
Sitä käyttämällä kyselyt palauttavat nyt adict
a sijastatuple
:
>>>
>>> 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()
Seuraava rivi tehdas palauttaa animeltä tuple:
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()
voidaan käyttää seuraavasti:
>>>
>>> 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()
Yllä olevaa reseptiä voidaan tietyin muutoksin mukauttaa käyttämään atietoluokka, tai mikä tahansa muu mukautettu luokka animetty tupla.
Oletuksena,sqlite3
käyttäästrmukauttaaksesi SQLite-arvojaTEXT
tietotyyppi. Tämä toimii hyvin UTF-8-koodatun tekstin kanssa, mutta se voi epäonnistua muilla koodauksilla ja virheellisellä UTF-8:lla. Voit käyttää mukautettuatext_factoryhoitamaan tällaisia tapauksia.
SQLiten takiajoustava kirjoitus, ei ole harvinaista kohdata taulukon sarakkeitaTEXT
tietotyyppi, joka sisältää muita kuin UTF-8-koodauksia tai jopa mielivaltaisia tietoja. Havainnollistamiseksi oletetaan, että meillä on tietokanta, jossa on ISO-8859-2 (Latin-2) koodattua tekstiä, esimerkiksi taulukko tšekki-englannin sanakirjamerkinnöistä. Olettaen, että meillä on nyt aYhteysilmentymäcon
yhdistettynä tähän tietokantaan, voimme purkaa Latin-2-koodatun tekstin käyttämällä tätätext_factory:
con.text_factory = lambda data: str(data, encoding="latin2")
Virheellisille UTF-8- tai mielivaltaisille tiedoille, jotka on tallennettuTEXT
taulukon sarakkeita, voit käyttää seuraavaa tekniikkaa, joka on lainattuUnicode HOWTO:
con.text_factory = lambda data: str(data, errors="surrogateescape")
Huomautus
Thesqlite3
module API ei tue merkkijonoja, jotka sisältävät korvikkeita.
Katso myös
sqlite3
tarjoaa useita menetelmiä hallita, avataanko ja suljetaanko tietokantatapahtumat, milloin ja miten.Tapahtuman hallinta autocommit-attribuutin kauttaon suositeltavaa, kunTapahtuman hallinta isolation_level-attribuutillasäilyttää Python 3.12:ta edeltävän käyttäytymisen.
autocommit
attribuuttiSuositeltu tapa hallita tapahtumakäyttäytymistä onConnection.autocommitattribuutti, joka tulisi mieluiten asettaa käyttämälläautomaattinen toimitusparametrikytkeä().
On suositeltavaa asettaaautomaattinen toimituskohtaanFalse
, mikä tarkoittaaPEP 249 - Yhteensopiva liiketoimien valvonta. Tämä tarkoittaa:
sqlite3
varmistaa, että tapahtuma on aina auki, jotenkytkeä(), Connection.commit(), jaConnection.rollback()avaa implisiittisesti uuden tapahtuman (välittömästi vireillä olevan tapahtuman sulkemisen jälkeen kahdelle jälkimmäiselle).sqlite3
käyttääBEGIN DEFERRED
tiliotteita avattaessa tapahtumia.
Liiketoimet tulee sitoa nimenomaisesti käyttämälläcommit()
.
Tapahtumat tulee peruuttaa nimenomaisesti käyttämällärollback()
.
Implisiittinen palautus suoritetaan, jos tietokanta onkiinni()-ed odottavilla muutoksilla.
Asetaautomaattinen toimituskohtaanTrue
ottaaksesi SQLiten käyttöönautomaattinen vahvistustila . Tässä tilassaConnection.commit()jaConnection.rollback() ei ole vaikutusta. Huomaa, että SQLiten automaattinen vahvistustila eroaaPEP 249- yhteensopivaConnection.autocommit ominaisuus; käyttääConnection.in_transactionkysyäksesi matalan tason SQLiten automaattista toimitustilaa.
Asetaautomaattinen toimituskohtaanLEGACY_TRANSACTION_CONTROLjättää tapahtumanhallintakäyttäytymisenConnection.isolation_level attribuutti. KatsoTapahtuman hallinta isolation_level-attribuutillaLisätietoja.
isolation_level
attribuuttiHuomautus
Suositeltu tapa hallita liiketoimia on kauttaautomaattinen toimitus attribuutti. KatsoTapahtuman hallinta autocommit-attribuutin kautta.
JosConnection.autocommiton asetettuLEGACY_TRANSACTION_CONTROL(oletus), tapahtumakäyttäytymistä ohjataan käyttämälläConnection.isolation_level attribuutti. Muuten,isolation_level
ei ole vaikutusta.
Jos yhteysmääriteisolation_levelei oleNone
, uudet tapahtumat avataan implisiittisesti ennensuorittaa()jaexecutemany()teloittaaINSERT
, UPDATE
, DELETE
, taiREPLACE
lausunnot; muille lausumille ei suoriteta implisiittistä tapahtumakäsittelyä. Käytätehdä()japalautus() menetelmiä vireillä olevien tapahtumien sitomiseksi ja peruuttamiseksi. Voit valita taustanSQLite-tapahtumakäyttäytyminen– eli onko ja minkä tyyppinenBEGIN
lausunnotsqlite3
suorittaa implisiittisesti - kauttaisolation_levelattribuutti.
Josisolation_levelon asetettuNone
, mitään tapahtumia ei avata implisiittisesti ollenkaan. Tämä jättää alla olevan SQLite-kirjaston sisäänautomaattinen vahvistustila , mutta antaa myös käyttäjälle mahdollisuuden suorittaa omat tapahtumankäsittelynsä käyttämällä eksplisiittisiä SQL-käskyjä. Taustalla oleva SQLite-kirjaston automaattinen toimitustila voidaan kysyä käyttämälläin_transactionattribuutti.
Theexecutescript()menetelmä sitoo implisiittisesti kaikki odottavat tapahtumat ennen tietyn SQL-komentosarjan suorittamista riippumattaisolation_level.
Muutettu versiossa 3.6:sqlite3
käytetään implisiittisesti sitomaan avoin tapahtuma ennen DDL-lauseita. Näin ei enää ole.
Muutettu versiossa 3.12: Suositeltu tapa hallita tapahtumia on nytautomaattinen toimitusattribuutti.