2009-10-04 12 views
7

データベースファイルがすでに存在するかどうかを確認するにはどうすればよいですか? それが存在する場合、既に特定のテーブルがあるかどうかを確認するにはどうすればよいですか?sqlite3 in Python

+0

を参照してくださいhttp://stackoverflow.com/questions/211501/using-sqlite-in-a-python-program、http://stackoverflow.com/questions/1449495/can-i- sqlite-database-table-in-a-sqlite-databaseのテストを行う –

答えて

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を使用する場合:あなたがsqlite3.connect前 os.path.exists( 'dbname.db') 輸入はos.pathは、このチェックを実行します( )データベースが存在しない場合は作成しないでください。 –