pytilpack.sqlalchemy¶
必要なextra
pip install pytilpack[sqlalchemy]
pytilpack.sqlalchemy
¶
SQLAlchemy用のユーティリティ集。
AsyncMixin
¶
Bases: AsyncAttrs, _ReprMixin
モデルのベースクラス。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
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: 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を持つテーブルクラスに便利メソッドを生やす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
テーブルクラスに色々便利機能を生やすMixin。
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/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
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
UniqueIDMixin
¶
self.unique_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
SyncMixin
¶
Bases: _ReprMixin
モデルのベースクラス。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)
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)
async
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
commit()
classmethod
¶
acount(query)
async
classmethod
¶
queryのレコード数を取得する。(非同期版)
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を元にインスタンスを取得。(非同期版)
apaginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーション。(非同期版)
ソースコード位置: pytilpack/sqlalchemy/sync.py
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncUniqueIDMixin
¶
self.unique_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
モデルのベースクラス。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
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: 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を持つテーブルクラスに便利メソッドを生やす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
テーブルクラスに色々便利機能を生やすMixin。
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/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
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: pytilpack/sqlalchemy/flask.py
UniqueIDMixin
¶
self.unique_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用のユーティリティ集(同期版)。
SyncMixin
¶
Bases: _ReprMixin
モデルのベースクラス。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)
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)
async
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
commit()
classmethod
¶
acount(query)
async
classmethod
¶
queryのレコード数を取得する。(非同期版)
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を元にインスタンスを取得。(非同期版)
apaginate(query, page, per_page, scalar=True)
async
classmethod
¶
Flask-SQLAlchemy風ページネーション。(非同期版)
ソースコード位置: pytilpack/sqlalchemy/sync.py
to_dict(includes=None, excludes=None, exclude_none=False, value_converter=None, datetime_to_iso=True)
¶
インスタンスを辞書化する。
引数:
| 名前 | タイプ | デスクリプション | デフォルト |
|---|---|---|---|
includes
|
list[str] | None
|
辞書化するフィールド名のリスト。excludesと同時指定不可。 |
None
|
excludes
|
list[str] | None
|
辞書化しないフィールド名のリスト。includesと同時指定不可。 |
None
|
exclude_none
|
bool
|
Noneのフィールドを除外するかどうか。 |
False
|
value_converter
|
Callable[[Any], Any] | None
|
各フィールドの値を変換する関数。引数は値、戻り値は変換後の値。 |
None
|
datetime_to_iso
|
bool
|
datetime型の値をISOフォーマットの文字列に変換するかどうか。 |
True
|
戻り値:
| タイプ | デスクリプション |
|---|---|
dict[str, Any]
|
辞書。 |
ソースコード位置: pytilpack/sqlalchemy/sync.py
SyncUniqueIDMixin
¶
self.unique_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]]
|
非同期版の関数 |