文章目录
11.2 查询生成器
http://docs.peewee-orm.com/en/latest/peewee/api.html#query-builder
11.2.1 基类 class Node
class Node
构成 SQL 查询的 AST 的所有组件的基类。
static copy(method)
与改变节点状态的节点方法一起使用的装饰器。这允许方法链接,例如:
query = MyModel.select()
new_query = query.where(MyModel.field == 'value')
unwrap()
用于递归解包“包装”节点的 API。基本情况是返回自我。
is_alias()
用于确定节点在任何时候是否已被用户显式别名的 API。
11.2.2 class Source
class Source([alias=None])
行元组的来源,例如表、连接或选择查询。默认情况下,提供一个名为“c”的“魔术”属性,它是列/属性查找的工厂,例如:
User = Table('users')
query = (User
.select(User.c.username)
.where(User.c.active == True)
.order_by(User.c.username))
alias(name)
返回应用了给定别名的对象的副本。
select(*columns)
参数: 列–Column实例、表达式、函数、子查询或您想要选择的任何其他内容。
在表上创建Select查询。如果表显式声明了列并且没有提供列,则默认情况下将选择表中所有定义的列。
join(dest[, join_type=‘INNER’[, on=None]])
参数:
dest ( Source ) – 加入具有给定目标的表。
join_type ( str ) – 连接类型。
on – 用作连接谓词的表达式。
回报:
一个Join实例。
连接类型可以是以下之一:
- JOIN.INNER
- JOIN.LEFT_OUTER
- JOIN.RIGHT_OUTER
- JOIN.FULL
- JOIN.FULL_OUTER
- JOIN.CROSS
left_outer_join(dest[, on=None])
参数:
dest ( Source ) – 加入具有给定目标的表。
on – 用作连接谓词的表达式。
回报:
一个Join实例。
join()使用 LEFT OUTER 连接调用的便捷方法。
11.2.3 class BaseTable
class BaseTable
类表对象的基类,通过运算符重载支持 JOIN。
and(dest)
在 上执行 INNER 连接dest。
add(dest)
在 上执行 LEFT OUTER 连接dest。
sub(dest)
在 上执行右外连接dest。
or(dest)
在 上执行 FULL OUTER 连接dest。
mul(dest)
在 上执行交叉连接dest。
11.2.4 class Table
class Table(name[, columns=None[, primary_key=None[, schema=None[, alias=None]]]])
表示数据库中的一个表(或类似表的对象,如视图)。
参数:
- name ( str ) – 数据库表名
- columns ( tuple ) – 列名列表(可选)。
- primary_key ( str ) – 主键列的名称。
- schema ( str ) – 用于访问表的模式名称(如有必要)。
- alias ( str ) – 用于 SQL 查询中的表的别名。
笔记
如果指定了列,那么神奇的“c”属性将被禁用。
当列没有明确定义时,表有一个特殊的属性“c”,它是一个提供动态访问表列的工厂。
例子:
User = Table('users')
query = (User
.select(User.c.id, User.c.username)
.order_by(User.c.username))
指定列时的等效示例:
User = Table('users', ('id', 'username'))
query = (User
.select(User.id, User.username)
.order_by(User.username))
bind([database=None])
参数: 数据库——Database对象。
将此表绑定到给定的数据库(或通过留空来取消绑定)。
当表绑定到数据库时,可以对其执行查询,而无需在查询的执行方法中指定数据库。
bind_ctx([database=None])
参数: 数据库——Database对象。
返回一个上下文管理器,它将在包装块的持续时间内将表绑定到给定的数据库。
select(*columns)
参数: 列–Column实例、表达式、函数、子查询或您想要选择的任何其他内容。
在表上创建Select查询。如果表显式声明了列并且没有提供列,则默认情况下将选择表中所有定义的列。
例子:
User = Table('users', ('id', 'username'))
# Because columns were defined on the Table, we will default to
# selecting both of the User table's columns.
# Evaluates to SELECT id, username FROM users
query = User.select()
Note = Table('notes')
query = (Note
.select(Note.c.content, Note.c.timestamp, User.username)
.join(User, on=(Note.c.user_id == User.id))
.where(Note.c.is_published == True)
.order_by(Note.c.timestamp.desc()))
# Using a function to select users and the number of notes they
# have authored.
query = (User
.select(
User.username,
fn.COUNT(Note.c.id).alias('n_notes'))
.join(
Note,
JOIN.LEFT_OUTER,
on=(User.id == Note.c.user_id))
.order_by(fn.COUNT(Note.c.id).desc()))
insert([insert=None[, columns=None[, **kwargs]]])
参数:
insert – 将列映射到值的字典、产生字典(即列表)的迭代或Select查询。
columns ( list ) – 当插入的数据不是字典时要插入的列列表。
kwargs – 列名到值的映射。
在表中创建Insert查询。
replace([insert=None[, columns=None[, **kwargs]]])
参数:
insert – 将列映射到值的字典、产生字典(即列表)的迭代或Select查询。
columns ( list ) – 当插入的数据不是字典时要插入的列列表。
kwargs – 列名到值的映射。
在要替换冲突解决方法的表中创建Insert查询。
update([update=None[, **kwargs]])
参数:
update – 将列映射到值的字典。
kwargs – 列名到值的映射。
为表创建Update查询。
delete()
为表创建Delete查询。
11.2.5 class Join
class Join(lhs, rhs[, join_type=JOIN.INNER[, on=None[, alias=None]]])
表示与类似表的对象之间的 JOIN。
参数:
- lhs - 连接的左侧。
- rhs - 连接的右侧。
- join_type – 连接类型。例如 JOIN.INNER、JOIN.LEFT_OUTER 等。
- on – 描述连接谓词的表达式。
- alias ( str ) – 应用于连接数据的别名。
on(predicate)
参数: 谓词(表达式)——连接谓词。
指定用于此连接的谓词表达式。
11.2.6 class ValuesList
class ValuesList(values[, columns=None[, alias=None]])
表示可以像表格一样使用的值列表。
参数:
values – 包含要表示的行数据的列表列表。
columns ( list ) – 赋予每一行中的列的名称。
别名( str ) – 用于值列表的别名。
例子:
data = [(1, 'first'), (2, 'second')]
vl = ValuesList(data, columns=('idx', 'name'))
query = (vl
.select(vl.c.idx, vl.c.name)
.order_by(vl.c.idx))
# Yields:
# SELECT t1.idx, t1.name
# FROM (VALUES (1, 'first'), (2, 'second')) AS t1(idx, name)
# ORDER BY t1.idx
columns(*names)
参数: 名字– 应用于数据列的名称。
例子:
vl = ValuesList([(1, 'first'), (2, 'second')])
vl = vl.columns('idx', 'name').alias('v')
query = vl.select(vl.c.idx, vl.c.name)
# Yields:
# SELECT v.idx, v.name
# FROM (VALUES (1, 'first'), (2, 'second')) AS v(idx, name)
11.2.7 class CTE
class CTE(name, query[, recursive=False[, columns=None]])
表示一个公共表表达式。例如查询,请参阅公用表表达式。
参数:
- name – CTE 的名称。
- query——Select描述 CTE 的查询。
- recursive ( bool ) – CTE 是否是递归的。
- columns ( list ) – CTE 生成的列的显式列表(可选)。
select_from(*columns)
创建一个使用给定公用表表达式作为新查询源的 SELECT 查询。
参数: 列– 从 CTE 中选择一列或多列。
回报: Select利用公用表表达式的查询
union_all(other)
用于基本情况 CTE 以构造 CTE 的递归项。
参数: 其他– 递归术语,通常是Select查询。
回报: 具有CTE给定递归项的递归。
11.2.8 class ColumnBase
class ColumnBase
类列对象、属性或表达式的基类。
可以使用各种运算符和特殊方法来组合列状对象。
- &: 逻辑与
- |: 逻辑或
- +: 添加
- -: 减法
- *: 乘法
- /: 分配
- ^: 异或
- ==: 平等
- !=: 不平等
-
: 比…更棒
- <: 少于
-
=: 大于或等于
- <=: 小于或等于
- <<:IN
-
:(IS即)IS NULL
- %:LIKE
- **:ILIKE
- bin_and(): 二进制与
- bin_or(): 二进制或
- in_():IN
- not_in():NOT IN
- regexp():REGEXP
- is_null(True/False):或IS NULLIS NOT NULL
- contains(s):LIKE %s%
- startswith(s):LIKE s%
- endswith(s):LIKE %s
- between(low, high):BETWEEN low AND high
- concat():||
alias(alias)
参数: 别名( str ) – 给定列状对象的别名。
回报: 一个Alias对象。
指示应赋予指定的类列对象的别名。
cast( as_type )
参数: as_type( str ) – 要转换为的类型名称。
回报: 一个Cast对象。
创建CAST表达式。
asc([collation=None[, nulls=None]])
参数:
collation ( str ) – 用于排序的排序规则名称。
nulls ( str ) – 对空值进行排序(FIRST 或 LAST)。
回报:
列的升序Ordering对象。
desc([collation=None[, nulls=None]])
参数:
collation ( str ) – 用于排序的排序规则名称。
nulls ( str ) – 对空值进行排序(FIRST 或 LAST)。
回报:
列的降序Ordering对象。
invert()
回报: 列的Negated包装器。
11.2.9 class Column(source, name)
class Column(source, name)
参数:
- source ( Source ) – 列的来源。
- name ( str ) – 列名。
表上的列或子查询返回的列。
11.2.10 class Alias
class Alias(node, alias)
参数:
节点( Node ) – 一个类似列的对象。
alias ( str ) – 分配给列的别名。
为给定的类列对象创建一个命名别名。
alias([别名=无])
参数: 别名( str ) – 别名列的新名称(或无)。
Alias为别名列类对象创建一个新对象。如果新别名是None,则返回原始的类似列的对象。