如果你的測試環境只有 10 筆資料,AI 寫出來的 Database Query 看起來蒸蚌。但這就是 AI 最陰險的地方。AI 根本不懂什麼叫「規模(Scale)」與「邊界(Boundary)」。它寫出來的 ORM 查詢,大概不會幫你加上 Pagination(分頁)限制。一上 Production,面對幾百萬筆使用者的資料,AI 那句 db.query_all() 就像在機房裡丟了一顆核彈,直接把 RAM 瞬間撐爆,引發 Out of Memory 慘案 。
對付 AI 這種無腦的資源浪費,不能只靠 Code Review,因為 .all() 在語法上完全合法,人眼極度容易漏看。我們必須在架構底層與 CI 雙管齊下
class SafeQuery(Query):
def all(self):
# 抓出沒有下 limit 就敢 call all() 的 Code
if self._limit is None:
raise UnboundedQueryException(
"禁止使用未限制的無腦 .all(),請使用分頁 (Pagination) 或 .yield_per()"
)
return super().all()
另外,用 Linter 查殺無分頁的 API,在 CI 階段,透過 AST 分析,找出那些回傳 list 但卻沒有接受 skip 或 limit 參數的 API Endpoint,強制作為 Code Smell 打回票。