2015-01-24 10 views
7

Bir okuldaki öğrencilerle ilgili verileri depolamaya çalışıyorum. Daha önce birkaç program yaptım, daha sonra bir programda bir araya getireceğim şifreler ve öğretmenler gibi.Python sqlite3.OperationalError: böyle bir tablo yok:

Oluşturma tablosu işlevini bunlardan birinden kopyaladım ve değerleri Öğrencinin bilgileri olarak değiştirdim. Bu diğer programlar üzerinde çalışıyor ancak ben almaya devam:

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

ben klasörüne bakın ve orada:

sqlite3.OperationalError: no such table: PupilPremiumTable 

Ben masaya bir öğrenci eklemeyi deneyin, bu hat üzerinde gerçekleşir PupilPremiumTable.db adlı bir dosyadır ve tablo önceden oluşturulmuştur, bu yüzden neden çalışmadığını bilmiyorum.

: daha fazla ihtiyaç söylemesini çekinmeyin eğer o yüzden çalışmıyor hatta ne neden çalışmadığını hiçbir ipucu önce çalışmış söylediği gibi İşte

, kodumu bazıları ise
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

'PupilPremiumTable' tablosunu oluşturdunuz mu, oluşturmadınız mı? –

+0

Evet, tablo daha önce oluşturuldu, bu açık değilse üzgünüm. Bu python dosyasıyla aynı klasörde. – Ben

+0

"PupilPremiumTable.db" adlı bir dosyanız varsa, "PupilPremiumTable" –

cevap

20

Geçerli çalışma dizininin, komut dosyanızın bulunduğu diziyle aynı olduğunu varsayıyorsunuz. Bu, yapabileceğiniz bir varsayım değildir. Komut dosyanız boş olan bir farklı dizinde yeni veritabanını açıyor.

Veritabanı dosyanız için mutlak bir yol kullanın.

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: 

Sen yeni veritabanı dosyası açılırken nereye yerine anlamaya istiyorsanız geçerli çalışma dizini os.getcwd() ile ne doğrulayabilir;: Eğer komut mutlak yolunda onu dayandırabilirsiniz muhtemelen orada yarattığınız ekstra dosyayı temizlemek istersiniz.