2009-10-04 3 views
7

Как проверить, существует ли файл базы данных или нет? И, если он существует, как проверить, имеет ли он уже определенную таблицу или нет?sqlite3 в Python

+0

См http://stackoverflow.com/questions/211501/using-sqlite-in-a-python-program, http://stackoverflow.com/questions/1449495/can-i- База данных test-for-the-of-a-table-in-a-sqlite –

ответ

10

Чтобы узнать, существует ли база данных, вы можете sqlite3.connect файлу, который, по вашему мнению, содержит базу данных, и попробуйте запустить на нем запрос. Если это не базы данных, вы получите сообщение об ошибке:

>>> c.execute("SELECT * FROM tbl") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
sqlite3.DatabaseError: file is encrypted or is not a database 

sqlite3.connectбудет создать базу данных, если она не существует; как указывает @johnp в комментариях, os.path.exists расскажет вам, существует ли файл.

Для проверки существующих таблиц вы найдете query against sqlite_master. Например:

>>> def foo(name): 
...  for row in c.execute("SELECT name FROM sqlite_master WHERE type='table'"): 
...    if row == (name,): 
...      return True 
...  return False 
... 
>>> foo("tz_data") 
True 
>>> foo("asdf") 
False 
+1

hmm ... вызывает вызов sqlite3.connect(), автоматически создавая базу данных? – john2x

+0

@ john2x - да, делает. –

+0

Если вы хотите увидеть, если файл существует, использование os.path.exists(): импорт os.path os.path.exists ('dbname.db') выполнять эту проверку, прежде чем sqlite3.connect (), чтобы избежать создания базы данных, если она не существует. –