pytilpack.sqlalchemy¶
必要なextra
pip install pytilpack[sqlalchemy]
pytilpack.sqlalchemy
¶
SQLAlchemy用のユーティリティ集。
AsyncMixin
¶
Bases: AsyncAttrs, _ReprMixin, _ToDictMixin
モデルのベースクラス。SQLAlchemy 2.0スタイル・async前提。
例:
モデル定義例::
class Base(sqlalchemy.orm.DeclarativeBase, pytilpack.sqlalchemy_.AsyncMixin):
pass
class User(Base):
__tablename__ = "users"
...
Quart例::
@app.before_request
async def _before_request() -> None:
quart.g.db_session_token = await models.Base.start_session()
@app.teardown_request
async def _teardown_request(_: BaseException | None) -> None:
if hasattr(quart.g, "db_session_token"):
await models.Base.close_session(quart.g.db_session_token)
del quart.g.db_session_token
session_var = contextvars.ContextVar('session_var')
class-attribute
instance-attribute
¶
セッション。
init(url, pool_size=None, max_overflow=None, pool_recycle=280, pool_pre_ping=True, autoflush=True, expire_on_commit=False, eagerly_init=True, **kwargs)
classmethod
¶
DB接続を初期化する。
engineとsessionmakerはスレッドローカルで遅延初期化される。 各スレッドが初めてDB操作を行う際にそのスレッド専用のengineとsessionmakerが生成される。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
url
|
str | URL
|
DB接続URL。 |
必須 |
pool_size
|
int | None
|
コネクションプールのサイズ。スレッド数に応じて調整要。負数の場合はプーリングを無効化する。 |
None
|
max_overflow
|
int | None
|
コネクションプールの最大オーバーフロー数。Noneの場合はデフォルト値を使用。 |
None
|
pool_recycle
|
int | None
|
コネクションプールのリサイクル時間。Noneの場合はデフォルト値を使用。 |
280
|
pool_pre_ping
|
bool
|
コネクションプールのプレピン。Noneの場合はデフォルト値を使用。 |
True
|
autoflush
|
bool
|
セッションのautoflushフラグ。デフォルトはTrue。 |
True
|
expire_on_commit
|
bool
|
セッションのexpire_on_commitフラグ。デフォルトはFalse。 |
False
|
eagerly_init
|
bool
|
Trueの場合(デフォルト)、呼び出し元スレッドのengineとsessionmakerをすぐに生成する。 |
True
|
**kwargs
|
Any
|
その他のsqlalchemy.create_async_engine()へのキーワード引数。 |
{}
|
ソースコード位置: pytilpack/sqlalchemy/async_.py
term()
async
classmethod
¶
現在のスレッドのDB接続を終了する。
スレッドローカルなengineをdisposeして解放する。 スレッド終了時やテスト後の後始末に使用する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
engine()
classmethod
¶
sessionmaker()
classmethod
¶
現在のスレッドのセッションファクトリを返す。init()後に初めて呼ばれた時点で遅延生成される。
connect()
classmethod
¶
DBに接続する。
使用例:: async with Base.connect() as conn: await conn.run_sync(Base.metadata.create_all)
session_scope(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: async with Base.session_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/async_.py
start_session(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
close_session(token, name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを終了する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
session()
classmethod
¶
セッションを取得する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
select()
classmethod
¶
insert()
classmethod
¶
update()
classmethod
¶
delete()
classmethod
¶
count(query)
async
classmethod
¶
queryのレコード数を取得する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalar_one(query)
async
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalar_one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalars(query)
async
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
one(query)
async
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT]
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT] | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
all(query)
async
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[Row[TT]]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
get_by_id_not_null(id_, for_update=False, options=None)
async
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/async_.py
get_by_id(id_, for_update=False, options=None)
async
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
paginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーション。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select | CompoundSelect
|
ページネーションするクエリ。 |
必須 |
page
|
int
|
ページ番号。 |
必須 |
per_page
|
int
|
1ページあたりのアイテム数。 |
必須 |
scalar
|
bool
|
Trueの場合、スカラー値を返す。Falseの場合、全件のインスタンスを返す。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Paginator
|
ページネーションされた結果を返すpytilpack.paginator.Paginatorインスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
run_with_session(func, *args, **kwargs)
classmethod
¶
非同期関数をセッション付きで同期実行する関数。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[P, Awaitable[R]]
|
デコレート対象の非同期関数 |
必須 |
*args
|
P.args
|
非同期関数への引数 |
()
|
**kwargs
|
P.kwargs
|
非同期関数へのキーワード引数 |
{}
|
戻り値:
| タイプ | デスクリプション |
|---|---|
R
|
非同期関数の戻り値 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
AsyncUniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
async
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
Mixin
¶
Bases: _ReprMixin, _ToDictMixin
テーブルクラスに共通メソッドを付与するMixin。
get_by_id_not_null(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/flask.py
get_by_id(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
UniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
SyncAsyncBridgeMixin
¶
同期DBを非同期環境から扱うためのブリッジMixin。
SQLAlchemyの同期APIによるI/Oをasyncio.to_threadでスレッドに逃がし、
awaitableなインターフェースを提供する。各呼び出しは別スレッド・独立セッション
・独立トランザクションで実行される。
SyncMixinが継承する形で提供されるため、SyncMixin.acount(...)等の
呼び出しはそのまま維持される。非同期専用のコードから同期DBを利用する場合の
責務分離を明確にする目的で、別Mixinとして切り出している。
acount(query)
async
classmethod
¶
queryのレコード数を返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalar_one(query)
async
classmethod
¶
queryの結果を1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalar_one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalars(query)
async
classmethod
¶
queryの結果を全件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aone(query)
async
classmethod
¶
queryの結果を1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aone_or_none(query)
async
classmethod
¶
queryの結果を0件または1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aall(query)
async
classmethod
¶
queryの結果を全件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aget_by_id(id_, for_update=False)
async
classmethod
¶
IDを元にインスタンスを取得する。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
apaginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーションを返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncMixin
¶
Bases: _ReprMixin, _ToDictMixin, SyncAsyncBridgeMixin
モデルのベースクラス。SQLAlchemy 2.0スタイル・同期前提。
例:
モデル定義例::
class Base(sqlalchemy.orm.DeclarativeBase, pytilpack.sqlalchemy_.sync_.SyncMixin):
pass
class User(Base):
__tablename__ = "users"
...
Quart例::
@app.before_request
async def _before_request() -> None:
quart.g.db_session_token = models.Base.start_session()
@app.teardown_request
async def _teardown_request(_: BaseException | None) -> None:
if hasattr(quart.g, "db_session_token"):
models.Base.close_session(quart.g.db_session_token)
del quart.g.db_session_token
engine = None
class-attribute
instance-attribute
¶
DB接続。
sessionmaker = None
class-attribute
instance-attribute
¶
セッションファクトリ。
session_var = contextvars.ContextVar('session_var')
class-attribute
instance-attribute
¶
セッション。
init(url, pool_size=None, max_overflow=None, pool_recycle=280, pool_pre_ping=True, autoflush=True, expire_on_commit=False, **kwargs)
classmethod
¶
DB接続を初期化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
url
|
str | URL
|
DB接続URL。 |
必須 |
pool_size
|
int | None
|
コネクションプールのサイズ。スレッド数に応じて調整要。 |
None
|
max_overflow
|
int | None
|
コネクションプールの最大オーバーフロー数。Noneの場合はデフォルト値を使用。 |
None
|
pool_recycle
|
int | None
|
コネクションプールのリサイクル時間。Noneの場合はデフォルト値を使用。 |
280
|
pool_pre_ping
|
bool
|
コネクションプールのプレピン。Noneの場合はデフォルト値を使用。 |
True
|
autoflush
|
bool
|
セッションのautoflushフラグ。デフォルトはTrue。 |
True
|
expire_on_commit
|
bool
|
セッションのexpire_on_commitフラグ。デフォルトはFalse。 |
False
|
**kwargs
|
Any
|
sqlalchemy.create_engineに渡す追加のキーワード引数。 |
{}
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
connect()
classmethod
¶
DBに接続する。
使用例:: with Base.connect() as conn: Base.metadata.create_all(conn)
ソースコード位置: pytilpack/sqlalchemy/sync.py
session_scope(name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: with Base.session_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
asession_scope(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: async with Base.asession_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
start_session(name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを開始する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
close_session(token, name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを終了する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
session()
classmethod
¶
select()
classmethod
¶
insert()
classmethod
¶
update()
classmethod
¶
delete()
classmethod
¶
count(query)
classmethod
¶
queryのレコード数を取得する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalar_one(query)
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalar_one_or_none(query)
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalars(query)
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
one(query)
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT]
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
one_or_none(query)
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT] | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
all(query)
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[Row[TT]]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
get_by_id_not_null(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/sync.py
get_by_id(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
paginate(query, page, per_page, scalar=True)
classmethod
¶
Flask-SQLAlchemy風ページネーション。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select | CompoundSelect
|
ページネーションするクエリ。 |
必須 |
page
|
int
|
ページ番号。 |
必須 |
per_page
|
int
|
1ページあたりのアイテム数。 |
必須 |
scalar
|
bool
|
Trueの場合、スカラー値を返す。Falseの場合、全件のインスタンスを返す。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Paginator
|
ページネーションされた結果を返すpytilpack.paginator.Paginatorインスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncUniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
asafe_close(session, log_level=logging.DEBUG)
async
¶
例外を送出せずにセッションをクローズ。
ソースコード位置: pytilpack/sqlalchemy/async_.py
await_for_connection(url, timeout=180.0)
async
¶
DBに接続可能になるまで待機する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
describe_table(table, orm_class, tablefmt='grid')
¶
テーブル構造を文字列化する。
ソースコード位置: pytilpack/sqlalchemy/describe.py
get_class_by_table(base, table)
¶
テーブルからクラスを取得する。
ソースコード位置: pytilpack/sqlalchemy/describe.py
register_ping()
¶
コネクションプールの切断対策。
ソースコード位置: pytilpack/sqlalchemy/flask.py
run_sync_with_session(func)
¶
同期関数を非同期に実行し、スレッド内でセッションを管理するデコレーター。
別スレッドで実行される関数内で自動的にセッションスコープを作成する。 各呼び出しは独立したセッション・トランザクションを持つ。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[Concatenate[type[SyncMixin], P], R]
|
デコレート対象の同期関数 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Callable[Concatenate[type[SyncMixin], P], Awaitable[R]]
|
非同期版の関数 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
safe_close(session, log_level=logging.DEBUG)
¶
例外を送出せずにセッションをクローズ。
ソースコード位置: pytilpack/sqlalchemy/sync.py
wait_for_connection(url, timeout=180.0)
¶
DBに接続可能になるまで待機する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
async_
¶
SQLAlchemy用のユーティリティ集(async版)。
AsyncMixin
¶
Bases: AsyncAttrs, _ReprMixin, _ToDictMixin
モデルのベースクラス。SQLAlchemy 2.0スタイル・async前提。
例:
モデル定義例::
class Base(sqlalchemy.orm.DeclarativeBase, pytilpack.sqlalchemy_.AsyncMixin):
pass
class User(Base):
__tablename__ = "users"
...
Quart例::
@app.before_request
async def _before_request() -> None:
quart.g.db_session_token = await models.Base.start_session()
@app.teardown_request
async def _teardown_request(_: BaseException | None) -> None:
if hasattr(quart.g, "db_session_token"):
await models.Base.close_session(quart.g.db_session_token)
del quart.g.db_session_token
session_var = contextvars.ContextVar('session_var')
class-attribute
instance-attribute
¶
セッション。
init(url, pool_size=None, max_overflow=None, pool_recycle=280, pool_pre_ping=True, autoflush=True, expire_on_commit=False, eagerly_init=True, **kwargs)
classmethod
¶
DB接続を初期化する。
engineとsessionmakerはスレッドローカルで遅延初期化される。 各スレッドが初めてDB操作を行う際にそのスレッド専用のengineとsessionmakerが生成される。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
url
|
str | URL
|
DB接続URL。 |
必須 |
pool_size
|
int | None
|
コネクションプールのサイズ。スレッド数に応じて調整要。負数の場合はプーリングを無効化する。 |
None
|
max_overflow
|
int | None
|
コネクションプールの最大オーバーフロー数。Noneの場合はデフォルト値を使用。 |
None
|
pool_recycle
|
int | None
|
コネクションプールのリサイクル時間。Noneの場合はデフォルト値を使用。 |
280
|
pool_pre_ping
|
bool
|
コネクションプールのプレピン。Noneの場合はデフォルト値を使用。 |
True
|
autoflush
|
bool
|
セッションのautoflushフラグ。デフォルトはTrue。 |
True
|
expire_on_commit
|
bool
|
セッションのexpire_on_commitフラグ。デフォルトはFalse。 |
False
|
eagerly_init
|
bool
|
Trueの場合(デフォルト)、呼び出し元スレッドのengineとsessionmakerをすぐに生成する。 |
True
|
**kwargs
|
Any
|
その他のsqlalchemy.create_async_engine()へのキーワード引数。 |
{}
|
ソースコード位置: pytilpack/sqlalchemy/async_.py
term()
async
classmethod
¶
現在のスレッドのDB接続を終了する。
スレッドローカルなengineをdisposeして解放する。 スレッド終了時やテスト後の後始末に使用する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
engine()
classmethod
¶
sessionmaker()
classmethod
¶
現在のスレッドのセッションファクトリを返す。init()後に初めて呼ばれた時点で遅延生成される。
connect()
classmethod
¶
DBに接続する。
使用例:: async with Base.connect() as conn: await conn.run_sync(Base.metadata.create_all)
session_scope(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: async with Base.session_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/async_.py
start_session(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
close_session(token, name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを終了する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
session()
classmethod
¶
セッションを取得する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
select()
classmethod
¶
insert()
classmethod
¶
update()
classmethod
¶
delete()
classmethod
¶
count(query)
async
classmethod
¶
queryのレコード数を取得する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalar_one(query)
async
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalar_one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
scalars(query)
async
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
one(query)
async
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT]
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT] | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
all(query)
async
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[Row[TT]]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
get_by_id_not_null(id_, for_update=False, options=None)
async
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/async_.py
get_by_id(id_, for_update=False, options=None)
async
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
paginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーション。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select | CompoundSelect
|
ページネーションするクエリ。 |
必須 |
page
|
int
|
ページ番号。 |
必須 |
per_page
|
int
|
1ページあたりのアイテム数。 |
必須 |
scalar
|
bool
|
Trueの場合、スカラー値を返す。Falseの場合、全件のインスタンスを返す。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Paginator
|
ページネーションされた結果を返すpytilpack.paginator.Paginatorインスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
run_with_session(func, *args, **kwargs)
classmethod
¶
非同期関数をセッション付きで同期実行する関数。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[P, Awaitable[R]]
|
デコレート対象の非同期関数 |
必須 |
*args
|
P.args
|
非同期関数への引数 |
()
|
**kwargs
|
P.kwargs
|
非同期関数へのキーワード引数 |
{}
|
戻り値:
| タイプ | デスクリプション |
|---|---|
R
|
非同期関数の戻り値 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
AsyncUniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
async
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/async_.py
await_for_connection(url, timeout=180.0)
async
¶
DBに接続可能になるまで待機する。
ソースコード位置: pytilpack/sqlalchemy/async_.py
asafe_close(session, log_level=logging.DEBUG)
async
¶
例外を送出せずにセッションをクローズ。
ソースコード位置: pytilpack/sqlalchemy/async_.py
describe
¶
SQLAlchemy用のユーティリティ集。
describe(Base, tablefmt='grid')
¶
DBのテーブル構造を文字列化する。
ソースコード位置: pytilpack/sqlalchemy/describe.py
get_class_by_table(base, table)
¶
テーブルからクラスを取得する。
ソースコード位置: pytilpack/sqlalchemy/describe.py
describe_table(table, orm_class, tablefmt='grid')
¶
テーブル構造を文字列化する。
ソースコード位置: pytilpack/sqlalchemy/describe.py
flask
¶
SQLAlchemy用のユーティリティ集(Flask-SQLAlchemy版)。
Mixin
¶
Bases: _ReprMixin, _ToDictMixin
テーブルクラスに共通メソッドを付与するMixin。
get_by_id_not_null(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/flask.py
get_by_id(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
UniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
register_ping()
¶
コネクションプールの切断対策。
ソースコード位置: pytilpack/sqlalchemy/flask.py
sync
¶
SQLAlchemy用のユーティリティ集(同期版)。
SyncAsyncBridgeMixin
¶
同期DBを非同期環境から扱うためのブリッジMixin。
SQLAlchemyの同期APIによるI/Oをasyncio.to_threadでスレッドに逃がし、
awaitableなインターフェースを提供する。各呼び出しは別スレッド・独立セッション
・独立トランザクションで実行される。
SyncMixinが継承する形で提供されるため、SyncMixin.acount(...)等の
呼び出しはそのまま維持される。非同期専用のコードから同期DBを利用する場合の
責務分離を明確にする目的で、別Mixinとして切り出している。
acount(query)
async
classmethod
¶
queryのレコード数を返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalar_one(query)
async
classmethod
¶
queryの結果を1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalar_one_or_none(query)
async
classmethod
¶
queryの結果を0件または1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
ascalars(query)
async
classmethod
¶
queryの結果を全件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aone(query)
async
classmethod
¶
queryの結果を1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aone_or_none(query)
async
classmethod
¶
queryの結果を0件または1件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aall(query)
async
classmethod
¶
queryの結果を全件返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
aget_by_id(id_, for_update=False)
async
classmethod
¶
IDを元にインスタンスを取得する。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
apaginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーションを返す。非同期版。
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncMixin
¶
Bases: _ReprMixin, _ToDictMixin, SyncAsyncBridgeMixin
モデルのベースクラス。SQLAlchemy 2.0スタイル・同期前提。
例:
モデル定義例::
class Base(sqlalchemy.orm.DeclarativeBase, pytilpack.sqlalchemy_.sync_.SyncMixin):
pass
class User(Base):
__tablename__ = "users"
...
Quart例::
@app.before_request
async def _before_request() -> None:
quart.g.db_session_token = models.Base.start_session()
@app.teardown_request
async def _teardown_request(_: BaseException | None) -> None:
if hasattr(quart.g, "db_session_token"):
models.Base.close_session(quart.g.db_session_token)
del quart.g.db_session_token
engine = None
class-attribute
instance-attribute
¶
DB接続。
sessionmaker = None
class-attribute
instance-attribute
¶
セッションファクトリ。
session_var = contextvars.ContextVar('session_var')
class-attribute
instance-attribute
¶
セッション。
init(url, pool_size=None, max_overflow=None, pool_recycle=280, pool_pre_ping=True, autoflush=True, expire_on_commit=False, **kwargs)
classmethod
¶
DB接続を初期化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
url
|
str | URL
|
DB接続URL。 |
必須 |
pool_size
|
int | None
|
コネクションプールのサイズ。スレッド数に応じて調整要。 |
None
|
max_overflow
|
int | None
|
コネクションプールの最大オーバーフロー数。Noneの場合はデフォルト値を使用。 |
None
|
pool_recycle
|
int | None
|
コネクションプールのリサイクル時間。Noneの場合はデフォルト値を使用。 |
280
|
pool_pre_ping
|
bool
|
コネクションプールのプレピン。Noneの場合はデフォルト値を使用。 |
True
|
autoflush
|
bool
|
セッションのautoflushフラグ。デフォルトはTrue。 |
True
|
expire_on_commit
|
bool
|
セッションのexpire_on_commitフラグ。デフォルトはFalse。 |
False
|
**kwargs
|
Any
|
sqlalchemy.create_engineに渡す追加のキーワード引数。 |
{}
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
connect()
classmethod
¶
DBに接続する。
使用例:: with Base.connect() as conn: Base.metadata.create_all(conn)
ソースコード位置: pytilpack/sqlalchemy/sync.py
session_scope(name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: with Base.session_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
asession_scope(name=None, log_level=logging.DEBUG)
async
classmethod
¶
セッションを開始するコンテキストマネージャ。
使用例:: async with Base.asession_scope() as session: ...
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
name
|
str | None
|
セッション名。指定時のみログ出力する。 |
None
|
log_level
|
int
|
ログレベル。 |
DEBUG
|
ソースコード位置: pytilpack/sqlalchemy/sync.py
start_session(name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを開始する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
close_session(token, name=None, log_level=logging.DEBUG)
classmethod
¶
セッションを終了する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
session()
classmethod
¶
select()
classmethod
¶
insert()
classmethod
¶
update()
classmethod
¶
delete()
classmethod
¶
count(query)
classmethod
¶
queryのレコード数を取得する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalar_one(query)
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalar_one_or_none(query)
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
T | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
scalars(query)
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[tuple[T]] | CompoundSelect[tuple[T]]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[T]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
one(query)
classmethod
¶
queryの結果を1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT]
|
1件のインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
NoResultFound
|
結果が0件の場合。 |
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
one_or_none(query)
classmethod
¶
queryの結果を0件または1件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Row[TT] | None
|
0件の場合はNone、1件の場合はインスタンス。 |
発生:
| タイプ | デスクリプション |
|---|---|
MultipleResultsFound
|
結果が複数件の場合。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
all(query)
classmethod
¶
queryの結果を全件取得する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select[TT] | CompoundSelect[TT]
|
クエリ。 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
list[Row[TT]]
|
全件のインスタンスのリスト。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
get_by_id_not_null(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。見つからない場合は例外を送出する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用する。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self
|
インスタンス。 |
Raises: ValueError: 見つからない場合。
ソースコード位置: pytilpack/sqlalchemy/sync.py
get_by_id(id_, for_update=False, options=None)
classmethod
¶
IDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
id_
|
int
|
ID。 |
必須 |
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
options
|
ExecutableOption | None
|
クエリオプション。eager loadingなどに使用。 |
None
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
paginate(query, page, per_page, scalar=True)
classmethod
¶
Flask-SQLAlchemy風ページネーション。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
query
|
Select | CompoundSelect
|
ページネーションするクエリ。 |
必須 |
page
|
int
|
ページ番号。 |
必須 |
per_page
|
int
|
1ページあたりのアイテム数。 |
必須 |
scalar
|
bool
|
Trueの場合、スカラー値を返す。Falseの場合、全件のインスタンスを返す。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Paginator
|
ページネーションされた結果を返すpytilpack.paginator.Paginatorインスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncUniqueIDMixin
¶
self.unique_idを持つテーブルクラスにユニークID操作メソッドを付与するmixin。
generate_unique_id()
classmethod
¶
get_by_unique_id(unique_id, allow_id=False, for_update=False)
classmethod
¶
ユニークIDを元にインスタンスを取得。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
unique_id
|
str | int
|
ユニークID。 |
必須 |
allow_id
|
bool
|
ユニークIDだけでなくID(int)も許可するかどうか。 |
False
|
for_update
|
bool
|
更新ロックを取得するか否か。 |
False
|
戻り値:
| タイプ | デスクリプション |
|---|---|
Self | None
|
インスタンス。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
wait_for_connection(url, timeout=180.0)
¶
DBに接続可能になるまで待機する。
ソースコード位置: pytilpack/sqlalchemy/sync.py
safe_close(session, log_level=logging.DEBUG)
¶
例外を送出せずにセッションをクローズ。
ソースコード位置: pytilpack/sqlalchemy/sync.py
run_sync_with_session(func)
¶
同期関数を非同期に実行し、スレッド内でセッションを管理するデコレーター。
別スレッドで実行される関数内で自動的にセッションスコープを作成する。 各呼び出しは独立したセッション・トランザクションを持つ。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
func
|
Callable[Concatenate[type[SyncMixin], P], R]
|
デコレート対象の同期関数 |
必須 |
戻り値:
| タイプ | デスクリプション |
|---|---|
Callable[Concatenate[type[SyncMixin], P], Awaitable[R]]
|
非同期版の関数 |