SQL 안에서 Python 호출
SQLite는 SQL에서 부를 수 있는 Python 함수를 등록하게 해줘. 엔진 안에서 제대로 대접받는 함수라 WHERE에도, SELECT list에도, 인덱스에도, trigger에도 쓸 수 있어. 주로 쓰는 API는 둘이야.
conn.create_function(name, n_args, callable, deterministic=False)— scalar 함수야. row 하나 받아 값 하나 내놔.conn.create_aggregate(name, n_args, AggregateClass)— 집계 함수야. 여러 row를 받아 값 하나 내놔.
어디에 쓰냐면, regex extension이 없을 때 정규식 매칭을 대신하거나, 도메인에 맞춘 점수 계산을 하거나, JSON1보다 Python이 더 잘하는 JSON 조작을 하거나, 비교 함수를 직접 만들 때야.
Warning: Python 쪽 함수는 호출할 때마다 C와 Python 경계를 넘나들어. SQL 기준으로는 느리다는 뜻이지. 처리량보다 정확성이 중요한 자리에만 써. 백만 row가 도는 뜨거운 루프에는 넣지 마.