注目キーワード

【Python】SQLite(sqlite3)DROP TABLE文のサンプルソース

はじめに

この記事では、サンプルソースを使いながら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
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」をしてエラーになっていたわけです。

sqlite_drop2.py実行前

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

sqlite_drop2.py実行

まとめ

そもそも、テーブルを削除(DROP)することは少ない。

もし実装するならエラー処理を考慮して「IF EXISTS」を付けて実行する。