用sql编写sql
sql的Python项目详细描述
sqly
sql是一种非常棒的语言,是世界上最成功的编程语言之一。我们应该使用它,而不是试图用定制的dsl来取代它。
然而,在构造sql查询时,有两件事是很好的帮助:
- dialect-aware-safe-value-substitution:每个数据库接口都有自己的语法来安全替换值(不允许sql注入)-例如,
$1
或?
或:varname
。它们对sql+values参数列表的格式也有不同的要求。我希望能够使用相同的值替换语法编写查询,而不管我使用的是哪一个数据库接口,并且知道sql将正确地为我的接口输出,并且这些值将安全地传递到数据库引擎。 - dynamic attributes:在许多应用程序中,我事先不知道要选择、插入、更新或筛选哪些属性。我想选择一个给定的属性列表,或者过滤一个给定的键/值映射,或者更新或插入特定的属性,而不必重写sql查询。
- 块组合:有些sql查询非常复杂。我希望能够将SQL块组合成更大的查询,这样我就可以有效地管理这种复杂性。(大多数数据库查询dsl无法处理复杂的查询,或者他们发明了一种难以学习的语言来编写这些查询。学习sql可以更好地利用我们的时间,但是有助于管理/操作查询中的不同块。)
sqly:
- 一个类
SQL
,有一个字段query
,还有一个方法.render
,它接受一个可选参数dialect
。 - 动态值替换,用支持的方言之一呈现:postgres(
$1
)、sqlalchemy(:varname
)、embedded(:varname
)、mysql(%(varname)s
)、sqlite(?
)。默认样式是embedded/:varname
。 - 在
SELECT
、WHERE
、INSERT
和UPDATE
语法中的动态属性/值列表 - 块组成