Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Как предотвратить создание пустой БД SQLite в Python

#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)

Комментариев нет:

Отправить комментарий