• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Połączenie z istniejącą bazą danych z użyciem biblioteki sqllite3.

0 głosów
270 wizyt
pytanie zadane 13 lutego 2019 w Python przez kluk123 Nowicjusz (220 p.)

Dzień dobry!

Zabrałem się ostatnio za pisanie programu w pythonie, który będzie wykorzystywał bazy danych. Do ich obsługi postanowiłem skorzystać z biblioteki sqlite3. Moją bazę tworzę w następujący sposób:

con = sqlite3.connect('words.db')
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS english_words;")
cur.execute("""
            CREATE TABLE IF NOT EXISTS english_words (
                id INTEGER PRIMARY KEY ASC,
                word varchar(30) DEFAULT ''
            )""")

cur.execute("DROP TABLE IF EXISTS polish_words;")
cur.execute("""
            CREATE TABLE IF NOT EXISTS polish_words (
                id INTEGER PRIMARY KEY ASC,
                word varchar(30) DEFAULT ''
            )""")

cur.executemany('INSERT INTO english_words VALUES(?,?)', eword)
cur.executemany('INSERT INTO polish_words VALUES(?,?)', pword)

Gdzie eword i pword to tuple zawierające rekordy.

Do tego momentu wszystko działa, powstaje baza danych z dwiema tabelami i wszystkimi zadanymi rekordami.

Problem pojawia się gdy chcę powstały po pierwszym wykonaniu programu plik words.db wykorzystać w innym skrypcie. Kiedy w innym skrypcie połączę się z już istniejącym plikiem words.db i spróbuję wypisać wybrane rekordy w następujący sposób :

con = sqlite3.connect('words.db') 
con.row_factory = sqlite3.Row 
cur = con.cursor()

cur.execute('SELECT word FROM english_words WHERE id BETWEEN 4 AND 7')

for i in cur.fetchall():
    print(i[0])

Program zachowuje się jakby nie znalazł żadnych pasujących rekordów (cur.fetchall() jest puste), a jednak nie wyrzuca żadnego błędu typu nieistniejące tablice.

Dodam jeszcze, że to samo zapytanie odnosiło pożądany skutek jeśli użyłem go w skrypcie, w którym stworzyłem bazę danych.

 

W skrócie moje pytanie brzmi: 

Jak mogę w moim skrypcie skorzystać z istniejącej już bazy danych utworzonej w innym skrypcie tak aby nie musiała ona być tworzona przy każdym uruchomieniu programu (chodzi o to żeby baza danych miała jakiś stan początkowy, który mógłbym edytować wewnątrz programu tak aby zmiany były zapamiętywane do kolejnych uruchomień)?

Pozdrawiam i z góry dziękuję za pomoc.

1 odpowiedź

+2 głosów
odpowiedź 13 lutego 2019 przez izonik Stary wyjadacz (12,560 p.)

Po wykonaniu tych insertów powinieneś zatwierdzić zmiany w bazie w taki sposób.
 

con.commit()

 

3
komentarz 13 lutego 2019 przez adrian17 Mentor (354,880 p.)
Albo lepiej, owinąć całe operacje na bazie w `with:`
komentarz 13 lutego 2019 przez kluk123 Nowicjusz (220 p.)

@izonik, Dziękuję bardzo, to właśnie to czego potrzebowałem.

Podobne pytania

0 głosów
0 odpowiedzi 194 wizyt
pytanie zadane 8 września 2016 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 1 sierpnia 2025 w PHP przez stanley1984 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 444 wizyt
pytanie zadane 7 lipca 2020 w PHP przez xnerwo Gaduła (3,270 p.)

93,727 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,287 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...