Documentation for derive_named_parameters()

Closes #2284

Refs https://github.com/simonw/datasette-write/issues/7#issuecomment-1967593883
This commit is contained in:
Simon Willison 2024-02-27 13:24:47 -08:00
commit c863443ea1
2 changed files with 19 additions and 2 deletions

View file

@ -18,12 +18,14 @@ import time
import types import types
import secrets import secrets
import shutil import shutil
from typing import Iterable, Tuple from typing import Iterable, List, Tuple
import urllib import urllib
import yaml import yaml
from .shutil_backport import copytree from .shutil_backport import copytree
from .sqlite import sqlite3, supports_table_xinfo from .sqlite import sqlite3, supports_table_xinfo
if typing.TYPE_CHECKING:
from datasette.database import Database
# From https://www.sqlite.org/lang_keywords.html # From https://www.sqlite.org/lang_keywords.html
reserved_words = set( reserved_words = set(
@ -1130,7 +1132,13 @@ class StartupError(Exception):
_re_named_parameter = re.compile(":([a-zA-Z0-9_]+)") _re_named_parameter = re.compile(":([a-zA-Z0-9_]+)")
async def derive_named_parameters(db, sql): @documented
async def derive_named_parameters(db: "Database", sql: str) -> List[str]:
"""
Given a SQL statement, return a list of named parameters that are used in the statement
e.g. for ``select * from foo where id=:id`` this would return ``["id"]``
"""
explain = "explain {}".format(sql.strip().rstrip(";")) explain = "explain {}".format(sql.strip().rstrip(";"))
possible_params = _re_named_parameter.findall(sql) possible_params = _re_named_parameter.findall(sql)
try: try:

View file

@ -1256,6 +1256,15 @@ Utility function for calling ``await`` on a return value if it is awaitable, oth
.. autofunction:: datasette.utils.await_me_maybe .. autofunction:: datasette.utils.await_me_maybe
.. _internals_utils_derive_named_parameters:
derive_named_parameters(db, sql)
--------------------------------
Derive the list of named parameters referenced in a SQL query, using an ``explain`` query executed against the provided database.
.. autofunction:: datasette.utils.derive_named_parameters
.. _internals_tilde_encoding: .. _internals_tilde_encoding:
Tilde encoding Tilde encoding