Python sqlite3.OperationalError: таблица не найдена
Я пытаюсь сохранить данные о учениках в школе. Ранее я уже создавал несколько таблиц, таких как таблица для паролей и таблица для учителей, которые я затем объединю в одной программе.
Я практически скопировал функцию создания таблицы из одной из этих ранее созданных таблиц и изменил значения для информации о учениках. Все работает в других программах, но при попытке добавить ученика в таблицу я постоянно получаю ошибку:
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)
Заранее благодарю за помощь!
5 ответ(ов)
Во-первых, вам нужно проверить, существует ли эта таблица в базе данных. Для этого вы можете использовать SQLite viewer: https://inloop.github.io/sqlite-viewer/.
Если таблица существует, тогда вы можете записать название своей таблицы в одинарные кавычки, например:
SELECT * FROM 'TableName'
Какой бы ни был ваш запрос, я просто использую SELECT *
в качестве примера.
У меня возникла такая же проблема, и есть несколько подходов, но тот, который, по моему мнению, наиболее вероятен.
Возможно, вы загружаете представления или запросы к базе данных, но не дали достаточно времени Django для применения миграций моделей к базе данных. Именно поэтому возникает ошибка "таблица не существует".
Убедитесь, что вы используете следующую инициализацию в вашем коде представления:
class RegisterForm(forms.Form):
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
Второй подход — это очистить предыдущие миграции, удалить базу данных и начать заново процесс миграции.
У меня была такая же проблема, когда я следовал учебнику по Flask. Я инициализировал базу данных один раз, и после этого начал получать ошибку sqlite3.OperationalError. Затем я попробовал инициализировать снова, и оказалось, что у меня было много ошибок в схеме и файле db.py. Я исправил их и инициализировал снова — и всё заработало.
Вот перевод в стиле ответа на StackOverflow:
Добавление этого кода помогло мне:
import os.path
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_dir = (BASE_DIR + '\\PupilPremiumTable.db')
Обратите внимание, что необходимо использовать \\
перед PupilPremiumTable.db
, чтобы код работал правильно.
Просто проверьте имя таблицы, которую вы создали в первой команде execute. Оно должно совпадать с именем таблицы, в которую вы хотите вставить запись.
Как вставить несколько строк в SQLite?
Экранирование символов в Python и SQLite
Удаление таблицы в старой версии SQLite, где не поддерживается IF EXISTS
Django: Пакетное обновление/создание с использованием update_or_create?
Создание и чтение временного файла