Skip to main content

SQL builder via string templates

Project description

Build Status pypi python license

SQL-tString allows for t-string based construction of sql queries without allowing for SQL injection. The basic usage is as follows,

from sql_tstring import sql

a = 1

query, values = sql(
    t"""SELECT a, b, c
          FROM tbl
         WHERE a = {a}""",
)

The query is a str and values a list[Any], both are then typically passed to a DB connection. Note the parameters can only be identifiers that identify variables (in the above example in the locals()) e.g. {a - 1} is not valid.

SQL-tString will convert parameters to SQL placeholders where appropriate. In other locations SQL-tString will allow pre defined column or table names to be used,

from sql_tstring import sql, sql_context

col = "a"
table = "tbl"

with sql_context(columns={"a"}, tables={"tbl"}):
    query, values = sql(
        t"SELECT {col} FROM {table}",
    )

If the value of col or table does not match the valid values given to the sql_context function an error will be raised.

Rewriting values

SQL-tString will also remove parameters if they are set to the special value of Absent (or RewritingValue.Absent). This is most useful for optional updates, or conditionals,

from sql_tstring import Absent, sql

a = Absent
b = Absent

query, values = sql(
    t"""UPDATE tbl
           SET a = {a},
               b = 1
         WHERE b = {b}""",
)

As both a and b are Absent the above query will be UPDATE tbl SET b =1.

In addition for conditionals the values IsNull (or RewritingValue.IS_NULL) and IsNotNull (or RewritingValue.IS_NOT_NULL) can be used to rewrite the conditional as expected. This is useful as x = NULL is always false in SQL.

Paramstyle (dialect)

By default SQL-tString uses the qmark paramstyle (dialect) but also supports the $ paramstyle or asyncpg dialect. This is best changed globally via,

from sql_tstring import Context, set_context

set_context(Context(dialect="asyncpg"))

Pre Python 3.14 usage

t-strings were introduced in Python 3.14 via, PEP 750, however this library can be used with Python 3.12 and 3.13 as follows,

from sql_tstring import sql

a = 1

query, values = sql(
    """SELECT a, b, c
         FROM tbl
        WHERE a = {a}""",
    locals(),
)

Please note though that only simple variable identifiers can be placed within the braces.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sql_tstring-0.4.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sql_tstring-0.4.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file sql_tstring-0.4.0.tar.gz.

File metadata

  • Download URL: sql_tstring-0.4.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for sql_tstring-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ae046930e134692ac222e817e1cef77dd1d6aad4c2a10b47a45bff1b9043afa5
MD5 a083560adec058e7dab05cd01f25e8d4
BLAKE2b-256 e718a1829e1ca3815abfdd5a8b80890be8924b8f72740ac5a09475b0aa42fa61

See more details on using hashes here.

Provenance

The following attestation bundles were made for sql_tstring-0.4.0.tar.gz:

Publisher: publish.yml on pgjones/sql-tstring

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sql_tstring-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: sql_tstring-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for sql_tstring-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 004bf3baa59833296e6364726ce779273a92adbb2348e9c355ae8cf35e6ef44b
MD5 b17cacbc33aabea254e1330199c14854
BLAKE2b-256 b497f08f911ddd4cf970cdb253d6c4efa29c4265782256fb25ed5442f118b691

See more details on using hashes here.

Provenance

The following attestation bundles were made for sql_tstring-0.4.0-py3-none-any.whl:

Publisher: publish.yml on pgjones/sql-tstring

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page