Python sqlite3.connect()とは?データベースに接続する方法

Pythonのsqlite3.connect()は、SQLiteデータベースに接続する関数です。

SQLiteはPythonに標準で入っているため、インストールもサーバーの起動も不要で、この1行から始められます。


sqlite3.connect()の基本的な使い方

import sqlite3

conn = sqlite3.connect("test.db")
print(type(conn).__name__)

conn.close()

実行結果:

Connection

戻り値はConnectionオブジェクトです。データベースとのつながりを表します。


ファイルは自動で作られる

test.dbが存在しなければ、その場で新しく作られます。「先にデータベースを作っておく」という手順は不要です。

これは便利な反面、ファイル名をタイプミスしても気づけません。「データが消えた」と思ったら、実は別名の空ファイルに接続していた——というのはよくある事故です。

import sqlite3, os

path = "test.db"
print("接続前に存在するか:", os.path.exists(path))

conn = sqlite3.connect(path)
conn.close()

print("接続後:", os.path.exists(path))

既存のデータベースを開くつもりなら、先に存在確認すると安全です。


フォルダは作られない

import sqlite3

sqlite3.connect("/no/such/dir/a.db")

実行結果:

OperationalError: unable to open database file

ファイルは自動で作られますが、フォルダは作られません。エラーメッセージが「開けない」としか言わないため、原因が分かりにくい部分です。

パスを組み立てるときは、フォルダの存在を先に確認してください。

from pathlib import Path
import sqlite3

path = Path("data/app.db")
path.parent.mkdir(parents=True, exist_ok=True)

conn = sqlite3.connect(path)
conn.close()

メモリ上のデータベースを作る

import sqlite3

conn = sqlite3.connect(":memory:")

conn.execute("CREATE TABLE t (x)")
conn.execute("INSERT INTO t VALUES (1)")
print(conn.execute("SELECT * FROM t").fetchall())

conn.close()

実行結果:

[(1,)]

":memory:"を渡すとファイルを作らず、メモリ上だけで動きます。close()すればすべて消えます。

用途 向いている
テストコード 後片付けが不要
使い捨ての集計 ディスクを汚さない
SQLの練習 すぐ作り直せる
データを残したい 向かない(消える)

よく使う引数

引数 役割
timeout ロック待ちの秒数(既定5秒)
isolation_level トランザクションの扱い
detect_types 日付型などを自動変換する
check_same_thread 別スレッドからの使用を許すか

timeoutは複数のプロセスが同じファイルを触るときに効きます。SQLiteは書き込み中にファイル全体をロックするため、混み合うと待たされます。


接続したらcursor()でカーソルを作る

import sqlite3

conn = sqlite3.connect(":memory:")
cur = conn.cursor()

cur.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
cur.execute("INSERT INTO users (name) VALUES (?)", ("佐藤",))
conn.commit()

print(cur.execute("SELECT * FROM users").fetchall())
conn.close()

実行結果:

[(1, '佐藤')]

これがsqlite3の基本形です。接続 → カーソル → 実行 → コミット → 切断という流れになります。

カーソルについては「Python Connection.cursor()とは?カーソルを作成する方法」で解説しています。


closeを忘れない書き方

Connectionはwith文に渡せますが、close()はしてくれません(コミットするだけです)。

import sqlite3
from contextlib import closing

with closing(sqlite3.connect(":memory:")) as conn:
    with conn:
        conn.execute("CREATE TABLE t (x)")
        conn.execute("INSERT INTO t VALUES (1)")
    print("中:", conn.execute("SELECT * FROM t").fetchall())

conn.execute("SELECT 1")

実行結果:

中: [(1,)]
ProgrammingError: Cannot operate on a closed database.

外側のclosing()が切断、内側のwith conn:がコミットという二重構造です。この形にしておけば、例外が起きても接続が残りません。


SQLiteを選ぶ基準

状況 SQLiteで足りるか
1人で使うツール 足りる
設定やキャッシュの保存 足りる
データ分析の作業用 足りる
読み取りが中心のWebサイト 足りることが多い
多人数が同時に書き込む 向かない
複数サーバーから接続する 向かない(ファイルなので)

境界は「同時に書き込む人が何人いるか」です。そこを超えるならPostgreSQLやMySQLを検討してください。


日時を保存する場合はタイムゾーンの扱いに注意が必要です。UTCで保存する方法は「Python zoneinfoとは?タイムゾーンを扱う標準モジュールを解説」で解説しています。

sqlite3.connect()のまとめ

  • connect()はConnectionを返す。インストール不要
  • ファイルは自動で作られる(タイプミスに注意)
  • フォルダは作られない——OperationalErrorになる
  • ":memory:"で使い捨てのデータベース
  • 基本形は接続 → カーソル → 実行 → コミット → 切断
  • with conn:はコミットするがcloseはしない

あわせて読みたい

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら