• 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.

Cloud VPS
0 głosów
189 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,180 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 132 wizyt
pytanie zadane 8 września 2016 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 372 wizyt
pytanie zadane 7 lipca 2020 w PHP przez xnerwo Gaduła (3,270 p.)
0 głosów
1 odpowiedź 355 wizyt

93,469 zapytań

142,404 odpowiedzi

322,712 komentarzy

62,852 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

Kursy INF.02 i INF.03
...