2009-10-04 18 views
7

¿Cómo puedo verificar si el archivo de la base de datos ya existe o no? Y, si existe, ¿cómo puedo verificar si ya tiene una tabla específica o no?sqlite3 en Python

+0

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

Respuesta

10

Para ver si existe una base de datos, puede sqlite3.connect al archivo que cree que contiene la base de datos, e intente ejecutar una consulta en él. Si no es una base de datos, se obtiene este error:

>>> 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 será crear la base de datos si no existe; como @johnp señala en los comentarios, os.path.exists le dirá si el archivo existe.

Para verificar las tablas existentes, usted query against sqlite_master. Por ejemplo:

>>> 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 ... ¿la llamada a sqlite3.connect() crea automáticamente la base de datos? – john2x

+0

@ john2x - sí, lo hace. –

+0

Si desea ver si el archivo existe, os.path.exists uso(): importación os.path os.path.exists ('dbname.db') realizar esta comprobación antes de sqlite3.connect () para evitar crear la base de datos si no existe. –