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

VPS Starter Arubacloud
0 głosów
133 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 Ekspert (344,100 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 93 wizyt
pytanie zadane 8 września 2016 w Python przez Macek Kolo Mądrala (5,480 p.)
0 głosów
1 odpowiedź 171 wizyt
pytanie zadane 7 lipca 2020 w PHP przez xnerwo Gaduła (3,270 p.)
0 głosów
1 odpowiedź 264 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...