web-dev-qa-db-ja.com

Python sqlite3.OperationalError:そのようなテーブルはありません:

私は学校の生徒に関するデータを保存しようとしています。パスワードや教師用のテーブルなど、後で1つのプログラムにまとめるテーブルをいくつか作成しました。

これらのいずれかからテーブル作成関数をコピーし、Pupilの情報の値を変更しました。他のプログラムでは正常に動作しますが、次のようになります:

sqlite3.OperationalError: no such table: PupilPremiumTable

テーブルに生徒を追加しようとすると、次の行で発生します。

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

フォルダーを見ると、PupilPremiumTable.dbというファイルがあり、テーブルは既に作成されているので、なぜ機能しないのかわかりません。

以下に私のコードの一部を示します。もっと必要な場合はお気軽に教えてください。前に言ったように、なぜ機能していないのか、何が機能していないのかさえ分かりません:

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)
16
Ben

現在の作業ディレクトリは、スクリプトが存在するディレクトリと同じであると想定しています。これは、想定できるものではありません。スクリプトが、空の別のディレクトリにあるnewデータベースを開いています。

データベースファイルの絶対パスを使用します。スクリプトの絶対パスに基づいて作成できます。

_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:
_

os.getcwd() を使用すると、現在の作業ディレクトリが何であるかを確認できます。代わりに新しいデータベースファイルを開いている場所を把握したい場合は、おそらく、そこで作成した余分なファイルをクリーンアップする必要があります。

36
Martijn Pieters