Python: SQLite3に改行を含むデータをINSERTする方法

以下のコードは改行を含むデータをテーブルにInsertする例です。

テーブル名 test、カラム(id, comment)。
commentは複数行で、idとcommentを同時に指定してインサートします。

import sqlite3

# データベースに接続
with sqlite3.connect('database.db') as conn:
	cursor = conn.cursor()

	# テーブルが存在しない場合は作成
	cursor.execute('''
	CREATE TABLE IF NOT EXISTS test (
		id INTEGER PRIMARY KEY,
		comment TEXT
	)
	''')

	# 改行を含むデータ
	data = [
		(1, "これは最初のコメントです。\n複数行にわたります。\n3行目です。"),
		(2, "2番目のコメントです。\n改行が含まれています。")
	]

	# データをインサート
	cursor.executemany('''
	INSERT INTO test (id, comment)
	VALUES (?, ?)
	''', data)

	# 変更をコミット
	conn.commit()

print("データが正常にインサートされました。")

コードの説明:

  1. sqlite3.connect('database.db')で、データベースに接続します。with文を使用しているので、処理が終わると自動的に接続が閉じられます。
  2. CREATE TABLE IF NOT EXISTS文で、テーブルが存在しない場合にテーブルを作成します。
  3. dataリストに、IDとコメントのタプルを格納します。コメントには\nを使用して改行を含めています。
  4. cursor.executemany()を使用して、複数のデータを一度にインサートします。?はプレースホルダーで、SQLインジェクション攻撃を防ぐのに役立ちます。
  5. conn.commit()で変更をデータベースに反映させます。

このコードを実行すると、指定したIDとともに、改行を含むコメントがテーブルにインサートされます。SQLite3は改行を含むテキストデータを正しく扱うことができるので、取り出す際にも改行は保持されます。

データの確認

データが正しくインサートされたかを確認したい場合は、以下のようなクエリを実行できます:

	# データの確認
	cursor.execute("SELECT * FROM test")
	rows = cursor.fetchall()
	for row in rows:
		print(f"ID: {row}")
		print(f"Comment:\n{row}")
		print("-" * 20)

このコードを追加すると、インサートされたデータを表示して確認することができます。

Python