2015-01-24 23 views
7

Tôi đang cố gắng lưu trữ dữ liệu về học sinh tại một trường học. Tôi đã thực hiện một vài bảng trước, chẳng hạn như một cho mật khẩu và giáo viên mà sau này tôi sẽ tập hợp lại trong một chương trình.Python sqlite3.OperationalError: không có bảng như vậy:

Tôi đã sao chép khá nhiều chức năng tạo bảng từ một trong số này và thay đổi các giá trị cho thông tin của học sinh. Nó hoạt động tốt trên các chương trình khác nhưng tôi cứ bị:

sqlite3.OperationalError: no such table: PupilPremiumTable 

khi tôi cố gắng thêm một học sinh để bàn, nó xảy ra trên dòng:

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

tôi tìm trong các thư mục và có là một tệp có tên là PupilPremiumTable.db và bảng đã được tạo trước đó, vì vậy tôi không biết tại sao nó không hoạt động. Dưới đây là một số mã của tôi, nếu bạn cần thêm cảm giác tự do để nói với tôi như vậy, như tôi đã nói nó làm việc trước vì vậy tôi không có đầu mối tại sao nó không hoạt động hoặc thậm chí những gì không hoạt động:

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

Bạn đã tạo bảng 'PupilPremiumTable' hay chưa? –

+0

Có bảng đã được tạo trước đó, xin lỗi nếu điều này không rõ ràng. Nó nằm trong cùng thư mục với tệp python này. – Ben

+0

Lưu ý rằng nếu bạn có một tập tin gọi là 'PupilPremiumTable.db' nó không có nghĩa là bạn có một bảng gọi là' PupilPremiumTable' –

Trả lời

20

Bạn đang giả định rằng thư mục làm việc hiện tại giống với thư mục mà tập lệnh của bạn sống. Nó không phải là một giả định bạn có thể thực hiện. Tập lệnh của bạn đang mở một cơ sở dữ liệu mới trong một thư mục khác, thư mục trống.

Sử dụng đường dẫn tuyệt đối cho tệp cơ sở dữ liệu của bạn. Bạn có thể căn cứ trên các đường dẫn tuyệt đối của kịch bản của bạ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: 

Bạn có thể xác minh những gì các thư mục làm việc hiện nay là với os.getcwd() nếu bạn muốn tìm ra nơi thay vì bạn đang mở các tập tin cơ sở dữ liệu mới; bạn có thể muốn dọn dẹp tệp phụ bạn đã tạo ở đó.

Các vấn đề liên quan