はじめに
この記事では、サンプルソースを使いながらPythonのsqlite3を使ってテーブルの削除を行う処理について説明していきたいと思います。とはいっても、わざわざ永続化しているデータを消すことってなかなかないと思うので、処理の使い道を提案で、アプリケーションの初期化処理とかに使うのかなと思います。
前提条件
- SQLの基本知識があること
- SQLiteの操作ができること
SQLite(sqlite3)の操作方法については以下の記事にまとめています。興味のある方はご覧ください。
工事中
テーブルの削除(DROP TABLE)
実装例はこんな感じです。テーブルは前回の記事で取り上げた「TEST」テーブルを削除します。
興味のある方はご覧ください。
今回はテーブル定義に関してはあまり関係ないのでとりあえず「TEST」テーブルがあるんだなぁってことだけ覚えておけばばいいと思います。
それでは、実際に動かしていきましょう。まず初めに、削除対象の「TEST」テーブルが存在することを確認します。
「sqlite3.exe sample.db」で接続し、「.table」と入力すると「TEST」というテーブルが存在します。

それでは、プログラムを動かしてみましょう。プログラムの実行コマンドは「python sqlite_drop1.py」です。
この処理で実行するSQLは以下になります。「TEST」をDROPする処理です。
DROP TABLE TEST
実行後に「処理終了」のメッセージが出力されました。
$python sqlite_drop1.py

次に、「TEST」テーブルが削除されているか確認します。先ほど「.table」を実行した時とは異なり「TEST」テーブルが出力されなくなりました。つまり、「TEST」テーブルが削除(DROP)されました。
$sqlite3.exe sample.db$.table

2回目の実行でエラーが出力される( no such table )
今回もここでは終了しません。これだと二回目に実行した時にエラーが起きます。まあ、無いテーブルを削除することなんてあまりないとは思いますが。。。
出力「no such table」と書いてあります。要はそんなテーブルはありませんよと怒られています。存在しないテーブルを削除しようとしてシステムエラーになります。
これを回避するために次の章では「IF EXISTS」を使います。

sqlite3.OperationalError: no such table: TEST
既にテーブルが存在する場合のテーブル作成( DROP TABLE IF EXISTS)
先ほどの、エラーを解消するためにはDROP文のSQLを少し変更する必要があります。
スポンサーリンク
システム的にエラー終了するプログラムはイケてませんからね。修正箇所は「DROP TABLE」のあとに「IF EXISTS」を追加するだけです。
そうすると、対象のテーブルが存在する場合のみ「DROP TABLE」を実行します。
「 sqlite_drop2.py 」を実行する前に確認をします。下の画像を見ると「sample.db」には、テーブルが存在しません。先ほどはこの状態で「DROP TABLE」をしてエラーになっていたわけです。

それでは、実行します。今回は正常に終了しました。「TEST」テーブルが存在しないので 「DROP TABLE」の処理が行われずに後続処理が進んでいることが分かります。

まとめ
そもそも、テーブルを削除(DROP)することは少ない。
もし実装するならエラー処理を考慮して「IF EXISTS」を付けて実行する。