Python
始めに ※ 自宅で再現しなかったので、そういう事象が発生したということをメモするだけの記事。 FastAPIでアップロードされたCSVをもとに登録する処理を作っていました。そして、特定の条件でエラーになることに気づきました。しかし、エラーが発生行を確認…
始めに Pythonのコンテキストマネージャは、with文と組み合わせてリソース(ファイル、DB接続、ロックなど)の確保と解放を自動化する仕組みです。enterメソッドでセットアップ、exitメソッドでクリーンアップを行うことで、例外発生時も安全にリソース管理…
始めに ※ 結果的に言えばどうにもできなかった話です。 検証環境へのデプロイが通常なら10分程度で終わるはずなのに、最悪のパターンだと30分くらいかかるようになりました。原因を追っていくと、どうやらFastAPIが起動時にメモリを大量消費していることがわ…
始めに 最近、回帰分析をやるようになりました。分析そのものはまだまだ知識不足なものの、とりあえずPyCharmで分析を可視化するJupyter Notebookを使用する方法がわからなかったのでメモします。 なお、本当に初心者向けの記事となります。 環境 PyCharm 20…
始めに 結果が分かれば単純なミスでした。Pydanticで型定義しただけと考えていましたが、少しでも振る舞いが変わるときはちゃんと確認しましょう。 環境 Python 3.13 Pydantic 2.11.4 実装 変更前のコード SaaS企業が外部連携しやすいようにライブラリを公開…
始めに Pythonに限らずアプリケーションを大規模で運用していくほどライブラリの依存関係が増えていきます。その時にAPIとバッチ等の用途に応じたアプリケーションごと分割する方法もありますが二重管理が面倒になります。JavaではGradleを使用してマルチプ…
始めに FastAPIはデフォルトではJSONResponseを使用してレスポンスします。FastAPI公式ヘルプにはパフォーマンスを向上させるためにORJSONResponseの使用を提案するページがあります。 fastapi[all]にorjsonが含まれていることもあり、ORJSONResponseを使用…
始めに 小ネタです。 Pythonでdatetime型を扱うときに、timezone情報を与えることができます。 from datetime import datetime from zoneinfo import ZoneInfo datetime.now(tz=ZoneInfo("UTC")) 簡単にtimezoneに合わせた時刻へ変更できることはメリットで…
始めに Pythonのpoetry.lockで確認した事象ですが、他のライブラリのlockファイルでも当てはまると思います。仕様上当たり前のことに気づいたのでメモします。 環境 Poetry 2.0.0 fastapi[standard] 0.115.8 httpx 0.28.1 まとめ dev dependenciesでバージョ…
始めに 特定の環境では再現したのですが、自宅では再現できませんでした。そのため、事象として発生したことのレポートです。 環境 ※ 再現しなかったためなし。 まとめ 基本的にはインスタンスの再更新はrefresh()で問題ないはず。しかし、問題発生したとき…
始めに 小ネタ。 以前、PythonのPytestでParametrizedTestをする記事を書きました。 PythonのPytestでParameterizedTestをする - きり丸の技術日記 調べたときに、もう少し便利できることが分かったのでメモします。 環境 Python 3.13 Pytest 8.3.4 実装 id…
始めに pydantic等のPythonのライブラリはコア部分がRustで書かれていて、Pythonでも十分な処理速度が確保されている、という表現をされることがあります。 そのため、基本的にはRustで作られたライブラリに移行しようとして、テンプレートエンジンのjinja2…
始めに 小ネタ。PythonでNestした配列に対して、flatなデータにしたいと思った時の処理を残します。 環境 Python 3.13 実装 構造が2階層だけならfrom itertools import chainのlist(chain.from_iterable(input_))を使用する。 from itertools import chain a…
20250201追記 PyCharm 2025.3.2からuvが指定できるようになったというアナウンスがありましたが、私のローカルだとWindows上で構築したプロジェクトは読めるものの、WSL上で構築したプロジェクトは読めないようです。残念。 https://www.jetbrains.com/help/…
始めに PydanticでEmailStrを拡張するという記事を書きました。今回の記事では、PydanticでEmailStrを拡張するで行ったことをさらに拡張して、大文字小文字のどちらでもパラメータを受け取りつつ、小文字化してアプリケーションで受け取れるようにさらに拡張…
始めに pydanticにはEmailStrというemailを検証するための拡張クラスがあります。しかし、Emailの仕様としてはUTF-8を許容しているものの、システム的にはASCIIしか許容したくないことがあります。その場合に向けて、EmailStrを継承してASCIIのみ許容する拡…
始めに Pythonでデータをグループ化する際、defaultdictを使用すると簡単かつ効率的に実装できます。この記事では、defaultdictを使ったgroup_byの実装方法と、itertools.groupbyとの違いについて解説します。 環境 Python 3.12.6 実装 defaultdictを使用す…
始めに PydanticにはJsonという便利な型があります。便利ではあるのですが、素のJson型では開発しづらい点があったので自分のアプリケーションでは拡張して使っています。 今回の記事では何に困ったのか、どのように拡張したのかを記載します。 環境 Python …
始めに email等の項目は大文字小文字を区別せずに比較したいことがあります。 その場合には小文字化して比較することになります。今回の記事では、PythonのSQLAlchemyで使用するlowerとilikeを素振りします。 環境 Python 3.12.3 SQLAlchemy 2.0.31 lower DB…
始めに 外部キー制約があるレコードを削除するとき、参照元テーブルよりも参照先テーブルを先に削除する必要があります。 Railsの場合、次のようにdependentに定義しておくと、Parentテーブルを削除したタイミングでChildテーブルも削除されます。 class Par…
始めに 自分用メモ。sqlalchemyではeager loadをする際にsubqueryloadとselectinload等々さまざまなload方法を指定できます。 しかし、片方はdeprecatedまでは設定されていませんが、非推奨なloading方法なのでそれを忘れないようにするための記事です。 環…
結論 pydanticではdefaultもdefault_factoryも同等の結果を返却しそう。 始めに 小ネタ記事。Pythonではデフォルト引数にミュータブルな値を指定したうえで、ミュータブルな操作を行うと、同じインスタンスを共有してしまいます。 def default_param(param: …
始めに 過去にPythonのenumはint等のプリミティブ型を継承すると便利という記事を投稿していました。 その後、Python3.11にてIntEnumやStrEnumが標準化されていることを知ったので共有します。 環境 Python 3.12.4 実装 intEnumの使用方法は次のとおりです。…
始めに FastAPIにてメソッドやクラスをDIできますが、DI時に部分的に処理を差し替えたい時があります。その時にパラメータを渡せば処理を差し替えられますが、少々ハマったのでそれをブログにします。 環境 Python 3.12.4 FastAPI 0.112.0 実装 同期処理の場…
始めに FastAPIではHTTPExceptionを使用すればHttpStatusを200以外でも返却可能です。しかし、エラー詳細は1つしか返却できません。ファイルのエラーハンドリングでは多数のエラーが発生した場合には、複数のエラーを返却したいユースケースがあります。 Exc…
始めに Pythonにてアプリケーション内ではdatetimeとして扱いつつ、APIとしてはYYYY-mm-dd等の特定のフォーマットの文字列で返却したいことがあります。 今回はPydanticを用いて実装する方法を記事にします。 環境 Python 3.12.4 Pydantic 2.8.2 実装 field_…
始めに ※ 自宅で検証した際には実装できなかったので詳細は不明です。 テスト実装中に次のエラーが発生しました。 E sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type <class 'models.User'> 発生原因が不明ですが、発生しないように</class>…
自動テストの原則として、1テストに1検証とした方が良いです。これが複数あった時には失敗箇所が分かりづらくなってしまうため、その状態をバッドパターンとしてAssertion Rouletteと呼びます。 今回の記事では、PythonのTestフレームワークであるPytestを拡…
始めに 各月の第2営業日に処理したいバッチ処理がありました。 PythonのpandasのCustomBusinessMonthBeginで営業日を計算できそうだったので、各月の営業日を求める方法を記載します。 環境 Python 3.12.3 holidays 0.50 pandas 2.2.2 実装 祝日と営業日につ…
Pythonで営業日換算するときにpandasの型に営業日換算できる型があったので素振りしました。 なお、個人的にpolarsというpandasよりも高速処理できるライブラリに移行しようとしていますが、polars側には今回紹介する型がないので自作する必要があります。 …