2015-01-24 14 views
7

Próbuję przechowywać dane o uczniach w szkole. Zrobiłem wcześniej kilka tabel, na przykład jeden dla haseł i nauczycieli, które później zgromadzę w jednym programie.Python sqlite3.OperationalError: brak takiej tabeli:

Prawie skopiowałem funkcję tworzenia tabeli z jednego z nich i zmieniłem wartości dla informacji Ucznia. To działa dobrze na innych programów, ale wciąż otrzymuję:

sqlite3.OperationalError: no such table: PupilPremiumTable 

gdy próbuję dodać ucznia do stołu, to pojawia się na linii:

cursor.execute("select MAX(RecordID) from PupilPremiumTable") 

patrzę w folderze i tam to plik o nazwie PupilPremiumTable.db, a tabela została już wcześniej utworzona, więc nie wiem, dlaczego nie działa.

Oto niektóre z moich kodu, jeśli potrzebujesz więcej krępuj się powiedzieć tak, jak powiedziałem to działało wcześniej, więc nie mam pojęcia, dlaczego to nie działa lub nawet co nie działa:

with sqlite3.connect("PupilPremiumTable.db") as db: 
    cursor = db.cursor() 
    cursor.execute("select MAX(RecordID) from PupilPremiumTable") 
    Value = cursor.fetchone() 
    Value = str('.'.join(str(x) for x in Value)) 
    if Value == "None": 
     Value = int(0) 
    else: 
     Value = int('.'.join(str(x) for x in Value)) 
    if Value == 'None,': 
     Value = 0 
    TeacherID = Value + 1 
    print("This RecordID is: ",RecordID) 
+0

Utworzono tabelę "PupilPremiumTable", czy nie? –

+0

Tak, tabela została już wcześniej utworzona, przepraszam, jeśli nie było to jasne. Jest w tym samym folderze, co ten plik Pythona. – Ben

+0

Pamiętaj, że jeśli masz plik o nazwie "PupilPremiumTable.db", nie oznacza to, że masz tabelę o nazwie "PupilPremiumTable" –

Odpowiedz

20

Zakładasz, że bieżący katalog roboczy jest taki sam jak katalog, w którym znajduje się twój skrypt. To nie jest założenie, które możesz zrobić. Twój skrypt otwiera nową bazę danych w innym katalogu, takim, który jest pusty.

Użyj bezwzględnej ścieżki do pliku bazy danych. można oprzeć go na bezwzględną ścieżkę skryptu:

import os.path 

BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 
db_path = os.path.join(BASE_DIR, "PupilPremiumTable.db") 
with sqlite3.connect(db_path) as db: 

można sprawdzić jaki jest aktualny katalog roboczy jest z os.getcwd() jeśli chcesz dowiedzieć się, gdzie zamiast tego otwieramy nowy plik bazy danych; prawdopodobnie chcesz wyczyścić dodatkowy plik, który tam utworzyłeś.