Skip to content

SQL-tString 允许使用类似 f-string 的方式构造 SQL 查询,而无需担心 SQL 注入的风险。基本用法如下:

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

query 是一个 str 类型,values 是一个 list[Any] 类型,通常都会将它们传递给数据库连接。 注意,参数只能是标识变量的标识符(在上面的例子中是 locals() 中的变量),例如 {a - 1} 是无效的。

SQL-tString 会将参数转换为适当的 SQL 占位符。在其他情况下,SQL-tString 允许使用预定义的列名或表名,例如:

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}",
  )

如果 coltable 的值与提供给 sql_context 函数的有效值不匹配,则会引发错误。

重写值

如果将参数设置为特殊值 Absent(或 RewritingValue.Absent),SQL-tString 也会移除这些参数。 这对于可选更新或条件语句非常有用:

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

由于 ab 都是 Absent,因此上面的 query 将会是 UPDATE tbl SET b =1

此外,对于条件语句,可以使用 IsNull(或 RewritingValue.IS_NULL)和 IsNotNull(或 RewritingValue.IS_NOT_NULL)来按预期重写条件。这很有用,因为 x = NULL 在 SQL 中始终为 false。

Paramstyle (dialect)

默认情况下,SQL-tString 使用 qmark paramstyle (dialect),但也支持 $ paramstyle 或 asyncpg dialect。 最好通过以下方式全局更改:

from sql_tstring import Context, set_context
set_context(Context(dialect="asyncpg"))

Python 3.14 之前的版本的使用方法

t-strings 是在 Python 3.14 中通过 PEP 750 引入的。但是,这个库可以与 Python 3.12 和 3.13 一起使用,如下所示:

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

请注意,只有简单的变量标识符才能放置在大括号内。

关于

SQL-tString 允许使用类似 f-string 的方式构造 SQL 查询。

主题

python sql

资源

Readme

许可证

MIT license Activity

Stars

48 stars

Watchers

1 watching

Forks

2 forks Report repository

Releases

3 tags

Packages 0

No packages published

语言