Documentation for derive_named_parameters()

Closes #2284

Refs https://github.com/simonw/datasette-write/issues/7#issuecomment-1967593883
pull/2288/head
Simon Willison 2024-02-27 13:24:47 -08:00
rodzic dfd4ad558b
commit c863443ea1
2 zmienionych plików z 19 dodań i 2 usunięć

Wyświetl plik

@ -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:

Wyświetl plik

@ -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