【SQLite超解説】特殊データの扱い方!BLOB、DATETIME、BOOL型をマスターしよう!
SQLite に特殊データを追加する方法
BLOB 型:
BLOB 型は、バイナリ データ (画像、音声、ビデオ など) を格納するために使用されます。 BLOB データを挿入するには、次のステートメントを使用します。
INSERT INTO my_table (name, data) VALUES ('photo.jpg', :blob_data);
ここで、:blob_data
は、バイナリ データをバインドされたパラメータとして渡します。 データを取得するには、次のようにします。
SELECT name, data FROM my_table WHERE id = 1;
結果セットの data
カラムには、バイナリ データが格納されます。
DATETIME 型:
DATETIME 型は、日付と時刻を格納するために使用されます。 DATETIME データを挿入するには、次のようにします。
INSERT INTO my_table (event_date, event_time) VALUES ('2024-07-07', '10:30:00');
DATETIME データを取得するには、次のようにします。
SELECT event_date, event_time FROM my_table WHERE id = 1;
結果セットの event_date
と event_time
カラムには、それぞれ日付と時刻が格納されます。
BOOL 型は、真偽値を格納するために使用されます。 BOOL データを挿入するには、次のようにします。
INSERT INTO my_table (active) VALUES (1);
または、次のようにします。
INSERT INTO my_table (active) VALUES ('true');
SELECT active FROM my_table WHERE id = 1;
結果セットの active
カラムには、1 (真) または 0 (偽) の値が格納されます。
NULL 型:
NULL 型は、値が存在しないことを示すために使用されます。 NULL データを挿入するには、次のようにします。
INSERT INTO my_table (name, email) VALUES ('John Doe', NULL);
SELECT name, email FROM my_table WHERE id = 1;
結果セットの email
カラムは NULL になります。
追加リソース
BLOB データ
この例では、image.jpg
という名前の画像ファイルを photos
テーブルに挿入する方法を示します。
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
with open('image.jpg', 'rb') as f:
image_data = f.read()
cursor.execute('INSERT INTO photos (name, data) VALUES (?, ?)', ('image.jpg', image_data))
connection.commit()
connection.close()
このコードは、まず sqlite3
モジュールをインポートします。 次に、my_database.db
という名前のデータベースへの接続を作成します。 接続が確立されると、カーソルが作成されます。
次に、image.jpg
ファイルを開いてバイナリ データを読み取ります。 データが読み込まれたら、INSERT
ステートメントを使用して、データと名前を photos
テーブルに挿入します。 最後に、コミットして変更を保存し、接続を閉じます。
画像を取得するには、次のようなコードを使用します。
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute('SELECT data FROM photos WHERE name = ?', ('image.jpg',))
image_data = cursor.fetchone()[0]
with open('image_copy.jpg', 'wb') as f:
f.write(image_data)
connection.close()
このコードは、まずデータベースへの接続を開き、カーソルを作成します。 次に、SELECT
ステートメントを使用して、image.jpg
という名前の画像のデータを取得します。 データが取得されると、最初の行の最初の要素がバイナリ データとして取得されます。
最後に、バイナリ データを image_copy.jpg
という名前の新しいファイルに書き込み、接続を閉じます。
この例では、現在の日付と時刻を events
テーブルに挿入する方法を示します。
import sqlite3
import datetime
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
now = datetime.datetime.now()
cursor.execute('INSERT INTO events (event_date, event_time) VALUES (?, ?)', (now.date(), now.time()))
connection.commit()
connection.close()
このコードは、まず sqlite3
と datetime
モジュールをインポートします。 次に、データベースへの接続を開き、カーソルを作成します。
次に、datetime.datetime.now()
を使用して現在の日付と時刻を取得します。 日付と時刻が取得されると、INSERT
ステートメントを使用して、それらを events
テーブルに挿入します。 最後に、コミットして変更を保存し、接続を閉じます。
イベントの日付と時刻を取得するには、次のようなコードを使用します。
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute('SELECT event_date, event_time FROM events WHERE id = 1')
event_date, event_time = cursor.fetchone()
print(f"Event date: {event_date}")
print(f"Event time: {event_time}")
connection.close()
このコードは、まずデータベースへの接続を開き、カーソルを作成します。 次に、SELECT
ステートメントを使用して、id
が 1 のイベントの日付と時刻を取得します。
日付と時刻が取得されると、それらは変数に格納されます。 最後に、イベントの日付と時刻をコンソールに印刷し、接続を閉じます。
この例では、active
列が True
である行を users
テーブルに挿入する方法を示します。
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute('INSERT INTO users (name, active) VALUES (?, ?)', ('John Doe', True))
connection.commit()
connection.close()
次に、name
が 'John Doe' で active
が True
である行を users
テーブルに挿入する INSERT
ステートメントを実行します。 最後に、コミットして変更を保存し、接続を閉じます。
SQLite には、BLOB、DATETIME、および BOOL データ型を処理するための組み込み関数を提供する sqlite3
モジュールが付属しています。 これらの関数は、前述の例で使用した方法と同様に使用できます。
SQL クエリのパラメータ化を使用する:
SQL クエリのパラメータ化を使用すると、SQL インジェクション攻撃のリスクを軽減できます。 パラメータ化されたクエリを使用するには、プレースホルダを使用して値をクエリに挿入し、次にバインドされたパラメータとして値を渡します。
ライブラリを使用する:
SQLite を操作するのに役立つライブラリが多数あります。 これらのライブラリは、特殊データの処理をより簡単にする追加機能を提供する場合があります。
外部ストレージを使用する:
非常に大きな BLOB データを格納する必要がある場合は、データベースに格納する代わりに、外部ストレージに格納することを検討してください。 次に、データベースにファイルへのパスを格納できます。
留意事項
特殊データを SQLite に追加する際には、次の点に注意する必要があります。
- パフォーマンスを考慮してください。 BLOB データなどの大きなデータを追加すると、データベースのパフォーマンスが低下する可能性があります。
- データサイズが制限を超えていないことを確認してください。 SQLite データベースの最大サイズは 2GB です。
- データ型が適切であることを確認してください。 たとえば、日付と時刻を格納するには、DATETIME データ型を使用する必要があります。
sqlite