#python #python_3x #sqlite
Пытаюсь работать с базой данных SQLite в Python. Пишу класс для этой цели. В конструкторе класса пишу такие строки: def __init__(self, file_name='test.db'): self.conn = sqlite3.connect(file_name) self.cur = self.conn.cursor() Эта БД должна именно хранить данные. Поэтому, если что-то случилось с файлом БД, то обязательно нужно эту ситуацию обнаружить и сообщить админу. Однако, если метод sqlite3.connect(file_name) не может открыть файл БД, то он просто пересоздаёт пустую БД. Это очень нежелательное поведение. Сколько я не читал документацию, нигде не говорится ни про какие коды завершения или except-оны. Как поймать такую ситуацию? Я понимаю, что можно средствами ОС обнаружить отсутствие файла БД, но это совсем не то... А вдруг - он есть, но испорчен? Поэтому вопрос: как предотвратить поведение по умолчанию метода сonnect и обнаружить ошибку?
Ответы
Ответ 1
Поскольку имя файла БД никаким образов не инкапсулировано в какой-нибудь хитрой строке подключения - совершенно нормально делать проверку на существование файла перед его открытием. В случае же если файл существует, но поврежден и не может быть прочитан - никто его автоматически пересоздавать не будет, вместо этого будет исключение. Также вместо проверки на существование файла можно попробовать использовать формат URI для имени БД: sqlite3.connect('file:test.db?mode=rw', uri=True) Как сказано в документации, в режиме rw драйвер sqlite не пытается создать новую базу данных. Это API существует с версии 3.4Ответ 2
Предлагаю перед открытием файла, делать проверку на существование. def __init__(self, file_name='test.db'): if os.path.isfile(file_name='test.db'): self.conn = sqlite3.connect(file_name) self.cur = self.conn.cursor() else: raise FileExistsError(file_name)
Комментариев нет:
Отправить комментарий