はじめに
今回はpythonでsqllit3を使った時に起きたエラーについての共有です。
普段は自分で簡単なスクリプトを作る時はファイル出力で済ませるのですがあえてsqlliteを使ってみることにしました。
が、あんの
エラーの原因と対処法
エラー
まず発生したエラーですが、
sqlite3.OperationalError: table keywords already exists
というものです。
日本語で訳すと
「sqlite3.OperationalError: テーブル「keywords」は既に存在します。」
となります(keywordsの部分は状況によって異なります)
原因とサンプルソース
原因と対処方法
このエラーは、SQLiteデータベースで「keywords」という名前のテーブルを作成しようとしたとき、そのテーブルが既にデータベース内に存在している場合に発生します。
対処方法は次の通り
- テーブルを作成する前に、そのテーブルが存在するかどうかを確認する。
- テーブルが存在しない場合のみ、テーブルを作成する。
エラーが発生するソースコード
次がエラーが発生するコードです。
(ただし、1度目はテーブルが作成されるのでエラーになりません)
import sqlite3
conn = sqlite3.connect('sample.db')
cursor = conn.cursor()
# keywordsテーブルを作成
cursor.execute('CREATE TABLE keywords (id INTEGER PRIMARY KEY, keyword TEXT)')
conn.close()
これを実行(2回目)すると
・
(省略)
・
cursor.execute('CREATE TABLE keywords (id INTEGER PRIMARY KEY, keyword TEXT)')
sqlite3.OperationalError: table keywords already exists
と7行目の「cursor.execute〜」でエラーになります
修正したソースコード
次がエラーを修正したコードです。
import sqlite3
conn = sqlite3.connect('sample.db')
cursor = conn.cursor()
# keywordsテーブルが存在しない場合のみ、テーブルを作成
cursor.execute('''
CREATE TABLE IF NOT EXISTS keywords (id INTEGER PRIMARY KEY, keyword TEXT)
''')
conn.close()
これを実行するとエラーが発生しなくなります。
Tips
今回のエラーやソースコードに関するTipsです。
CREATE TABLE IF NOT EXISTS
文を使用することで、テーブルが存在しない場合のみテーブルを作成することができます。これにより、テーブルが既に存在する場合のエラーを回避できます。- データベースのスキーマを変更する前に、バックアップを取ることをおすすめします。
- データベースの操作を行う際は、トランザクションを使用して、エラーが発生した場合にロールバックできるようにすると安全です。
さいごに
今回はpythonでsqllit3を使った時に起きたエラーについてでした。
個人的にSQLが非常に苦手で嫌いだったので使わなかったですが、いい勉強になりました。
使いこなせるとは程遠いですが、最近は昔より簡単にSQLが使える様になったのでデータなどの保存に利用してみるのもいいかもしれません。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。