1. ホーム
  2. python

[解決済み] Python sqlite3.OperationalError: そのようなテーブルがありません。

2022-02-01 08:44:15

質問

ある学校の生徒に関するデータを保存しようとしています。以前、パスワードや先生など、いくつかのテーブルを作成したことがありますが、後で1つのプログラムにまとめる予定です。

私は、これらのうちの1つからテーブル作成関数をほとんどコピーし、値を生徒の情報用に変更しました。他のプログラムでは問題なく動作しているのですが、このような問題が発生します。

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)

解決方法は?

現在の作業ディレクトリが、スクリプトが存在するディレクトリと同じであると仮定しているのでしょう。それは、あなたができる仮定ではありません。あなたのスクリプトが開いているディレクトリは 新しい データベースを別のディレクトリ、つまり空のディレクトリに作成します。

データベースファイルには絶対パスを使用します。スクリプトの絶対パスをベースにすることができます。

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() は、新しいデータベースファイルをどこで開いているのか知りたい場合、おそらくそこで作成した余分なファイルをクリーンアップしたいでしょう。