python

用 pydantic 輕鬆進行設定管理(Settings management)

開發時,不免都會需要實作設定檔,藉由設定檔簡單地改變系統的行為。例如 Debug 模式的開關、資料庫相關設定等等,都通常會放在設定檔中。

而 Python 不僅提供內建模組 configparser 能夠簡單實作設定檔之外,也可以簡單利用 class 實作設定檔,例如以下 2 個檔案就是 class 形式的設定檔範例:

# settings.py
class Settings(object):
    DB_HOST = 'localhost'
    DB_PORT = 8888


settings = Settings()
# test.py
from settings import settings


print(settings.DB_HOST, settings.DB_PORT)

然而,現今開發專案也經常會使用 dotenv (例如 python-dotenv )讓設定更加方便。

除了自行開發結合 dotenv 的功能之外,其實可以選擇利用 pydantic 輕鬆地整合 class 形式的設定檔與 dotenv

Posted on  Jul 1, 2020  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 3 min read

使用 Python typing 模組對你的同事好一點

由於 Python 動態型別(執行階段可以任意改變變數的型別)的特性,所以很多時候開發者們都會透過變數的命名讓他人知道該變數的型別,例如:

dicts = [{"key": "value"}, {"key": "values"}]

複數型的 dicts 命名讓其他人在閱讀時能夠大致猜到它可能是個字典(dict)的列表(list)。

但是現代專案不可能經常是如此簡單的結構,有時光從命名仍難以了解是什麼型別的變數,例如:

def get_value(json):
     return parse(json)

當我們看到上述函式中的 json 時,就會疑惑它是什麼? str? dict? 而回傳的值到底長怎樣,有什麼 key 可以使用?也由於這種不確定性,所以在除錯甚至協同開發時都需要實際執行才能夠知道該變數到底是什麼型態,在複雜的大型專案中甚至會成為一種痛苦。

p.s. Javascript 也有相同的痛點,所以才有 TypeScript 問世

這種情況,我們除了用心命名之外,還可以搭配使用 typing 模組來改善!

Last updated on  Sep 24, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 6 min read

SQLAlchemy join subqueries 範例

子查詢(subquery)是使用 SQL 查詢經常會使用的技巧之一,不過各家 ORM(Object-relational mapping) 並沒有共通的實作標準,因此 subquery 的使用方法不一定會相同,這大概是使用 ORM 所必須面對的問題。

本篇紀錄 SQLAlchemy 中如何使用 subquery 以及 subquery 的 JOIN 範例。

Posted on  Mar 11, 2020  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

Python dotenv 介紹與使用教學

將一些重要的資料存在環境變數(environment variable)中,是開發時常見的手段,不僅可以避免將重要的資料不小心 commit 進 codebase 之外,也可以利用環境變數儲存系統或程式設定,實務上也經常利用環境變數區隔開發環境(development)與生產環境(production),例如:

if os. getenv('MODE') == 'development':
    # do development-related things
    pass
else:
    # do production-related things
    pass

但隨著需要設定的環境變數增多,可能導致每次進行開發都有一堆環境變數要先塞好,如果你有遇到這種情況,不妨試試 python-dotenv 吧!

Posted on  Feb 12, 2020  in  Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

Python 版本管理的好工具 - pyenv

Python 近 10 年來一直在演進,因此 Python 專案的開發也需要考慮版本的問題。

特別是 Python 2 已經退休了,而現在的 Python 專案都以 Python 3 為主,然而有些公司內部的老舊專案仍以 Python 2 開發,因此開發者必須在 Python 2 與 3 之間進行切換。

如果你有 Python 版本切換上的困擾,那麼 pyenv 會是你的好朋友!

Last updated on  Mar 13, 2023  in  Python 程式設計 - 初階 , Python 模組/套件推薦  by  Amo Chen  ‐ 2 min read

用 pytest 結合 Allure2 產生精美的測試報表

隨著專案的規模越來越大,測試的效率及測試工具的有效運用也會成為開發團隊很重要的需求之一。

剛好有人介紹一款不錯的測試報表產生工具 Allure ,除了支援支援 Java, Javascript, Ruby, PHP, .Net, Scala, Python 等多種程式語言之外,連 pytest , behave 等 Python 常見的測試套件也都有整合,故以此文記錄一下這款不錯的報表產生工具。

Posted on  Oct 13, 2019  in  Python 模組/套件推薦  by  Amo Chen  ‐ 3 min read