NyanSQLite チュートリアル
基礎から応用まで、NyanSQLiteを段階的に学ぶガイドです。
前提条件
- Python 3.9以上
- Pydanticの基本的な理解
- SQLiteの知識があると役立ちますが、必須ではありません
インストール
bash
pip install nyansqliteレッスン1: 最初のデータベース
NyanSQLiteはPydanticモデルをスキーマとして使用します。
モデルの定義と登録
python
from pydantic import BaseModel
from nyansqlite import NyanSQLite
# 1. モデル(スキーマ)を定義
class User(BaseModel):
id: int
name: str
email: str
# 2. データベースを初期化
db = NyanSQLite("tutorial.db")
# 3. モデルを登録(テーブルが自動作成されます)
db.register(User)
# 4. データを挿入
user = User(id=1, name="Alice", email="[email protected]")
db.insert(user)
# 5. データを取得
retrieved = db.get(User, id=1)
print(retrieved.name) # Alice
# 終了時にクローズ
db.close()コンテキストマネージャの使用
python
with NyanSQLite("tutorial.db") as db:
db.register(User)
# 操作...
# 自動的にクローズされますレッスン2: インデックスと全文検索
NyanSQLiteの強力な機能であるインデックスと全文検索(FTS5)を活用しましょう。
python
from nyansqlite import NyanSQLite, Indexed, Searchable
class Article(BaseModel):
id: int
author: Indexed[str] # B-treeインデックスが作成されます
title: Searchable[str] # 全文検索対象
body: Searchable[str] # 全文検索対象
category: str = "general"
db = NyanSQLite("blog.db")
db.register(Article)
# データ挿入
db.insert(Article(id=1, author="neko", title="SQLite入門", body="NyanSQLiteは便利です。"))
# インデックスを利用した高速クエリ
articles = db.query(Article, author="neko")
# 全文検索
results = db.search(Article, "SQLite")
for hit in results:
print(hit.title)レッスン3: Djangoライクなクエリ
複雑な検索もSQLを書かずに実現できます。
python
# 比較演算子
# __gt (>), __gte (>=), __lt (<), __lte (<=), __ne (!=)
old_users = db.query(User, age__gt=30)
# IN句
selected = db.query(User, id__in=[1, 2, 3])
# LIKE検索
search = db.query(User, name__like="Ali%")
# NULLチェック
null_emails = db.query(User, email__is_null=True)
# 順序指定と制限
recent = db.query(User, order_by="id", desc=True, limit=5)レッスン4: 一括処理(パフォーマンス)
大量のデータを扱う場合は insert_many を使用します。
python
users = [User(id=i, name=f"User{i}", email=f"user{i}@example.com") for i in range(1000)]
# 自動的にトランザクション内で実行され、高速です
db.insert_many(users)レッスン5: メンテナンス
python
# データベースの最適化(ファイルサイズの縮小)
db.vacuum()
# 全文検索インデックスの再構築
db.rebuild_fts(Article)
# 存在確認
if db.exists(User, id=1):
print("User exists")次のステップ
- 詳細なバリデーションについては validation を参照
- APIの全容は APIリファレンス を参照