2009-10-04 33 views
7

Jak sprawdzić, czy plik bazy danych już istnieje? A jeśli to istnieje, w jaki sposób mogę sprawdzić, czy ma już określoną tabelę, czy nie?sqlite3 w języku Python

+0

Zobacz http://stackoverflow.com/questions/211501/using-sqlite-in-a-python-program, http://stackoverflow.com/questions/1449495/can-i- test-for-the-exist-of-a-table-in-a-sqlite-database –

Odpowiedz

10

Aby sprawdzić, czy istnieje baza danych, można sqlite3.connect do pliku, który myśli, że zawiera bazę danych, i spróbuj uruchomić kwerendę na nim. Jeśli jest nie bazy danych, pojawi się ten błąd:

>>> 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.connectbędzie utworzyć bazę danych, jeśli nie istnieje; jak @johnp wskazuje w komentarzach, os.path.exists powie Ci, czy plik istnieje.

Aby sprawdzić istniejące tabele, należy query against sqlite_master. Na przykład:

>>> 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 ... czy wywołanie sqlite3.connect() automatycznie tworzy bazę danych? – john2x

+0

@ john2x - tak, robi. –

+0

Jeśli chcesz sprawdzić, czy plik istnieje, os.path.exists użytku(): import os.path os.path.exists ('dbname.db') wykonać to sprawdzić przed sqlite3.connect (), aby uniknąć tworzenia bazy danych, jeśli nie istnieje. –