• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

peewee

date: 2023-12-28 excerpt: python peeweeの使い方

tag: databaseormpythonpeewee


python peeweeの使い方

概要

  • pythonでORMを使うためのライブラリ
  • 使い方はSQLAlchemyとほぼ同じ(より簡単)
  • sqliteのJSON1拡張を使うことができる

インストール

$ pip install peewee

使い方

モデルの定義

from peewee import *

db = SqliteDatabase('my_database.db')

class User(Model):
    username = CharField(unique=True)
    password = CharField(null=True)
    timestamp = DateTimeField(default=datetime.datetime.now)
    email = CharField(null=True)

    class Meta:
        database = db  # このモデルが使用するデータベース

class Tweet(Model):
    user = ForeignKeyField(User, backref='tweets')  # Userモデルへの外部キー
    message = TextField()

    class Meta:
        database = db

db.connect()
db.create_tables([User, Tweet])

モデルの操作

# ユーザの作成
user1 = User.create(username='user1', password='pass123', email='user1@example.com')
user2 = User.create(username='user2', password='pass123', email='user2@example.com')
# ユーザの取得と更新(get)
user = User.get(User.username == 'user1') # getは一致するものがないと例外を投げる
# ユーザの取得と更新(get_or_none)
user = User.get_or_none(User.username == 'user1') # get_or_noneは一致するものがないとNoneを返す
user.username = 'new_username'
user.save()
# ユーザの削除
user.delete_instance()
# すべてのデータを取得
for user in User.select():
    print(user.username) # user1, user2
# tweetデータを作成して検索
tweet = Tweet.create(user=user2, message='This is a tweet')
tweets = Tweet.select().where(Tweet.user == user2)
for tweet in tweets:
    print(tweet.message)

大量のデータを取得する

  • iterator()を使うと一件ずつ取得することができる
for tweet in Tweet.select().order_by(Tweet.id).iterator():
    print(tweet.message)


databaseormpythonpeewee Share Tweet