SQLAlchemy 2.0 文档
SQLAlchemy Core
- SQL 语句和表达式 API
- Schema 定义语言
- 使用MetaData描述数据库¶
- 访问表和列
- 创建和删除数据库表
- 通过迁移更改数据库对象
- 指定 Schema 名称
- 后端特定选项
- Column、Table、MetaData API
Column
Column.__eq__()
Column.__init__()
Column.__le__()
Column.__lt__()
Column.__ne__()
Column.all_()
Column.anon_key_label
Column.anon_label
Column.any_()
Column.argument_for()
Column.asc()
Column.between()
Column.bitwise_and()
Column.bitwise_lshift()
Column.bitwise_not()
Column.bitwise_or()
Column.bitwise_rshift()
Column.bitwise_xor()
Column.bool_op()
Column.cast()
Column.collate()
Column.compare()
Column.compile()
Column.concat()
Column.contains()
Column.copy()
Column.desc()
Column.dialect_kwargs
Column.dialect_options
Column.distinct()
Column.endswith()
Column.expression
Column.foreign_keys
Column.get_children()
Column.icontains()
Column.iendswith()
Column.ilike()
Column.in_()
Column.index
Column.info
Column.inherit_cache
Column.is_()
Column.is_distinct_from()
Column.is_not()
Column.is_not_distinct_from()
Column.isnot()
Column.isnot_distinct_from()
Column.istartswith()
Column.key
Column.kwargs
Column.label()
Column.like()
Column.match()
Column.not_ilike()
Column.not_in()
Column.not_like()
Column.notilike()
Column.notin_()
Column.notlike()
Column.nulls_first()
Column.nulls_last()
Column.nullsfirst()
Column.nullslast()
Column.op()
Column.operate()
Column.params()
Column.proxy_set
Column.references()
Column.regexp_match()
Column.regexp_replace()
Column.reverse_operate()
Column.self_group()
Column.shares_lineage()
Column.startswith()
Column.timetuple
Column.unique
Column.unique_params()
MetaData
SchemaConst
SchemaItem
insert_sentinel()
Table
Table.__init__()
Table.add_is_dependent_on()
Table.alias()
Table.append_column()
Table.append_constraint()
Table.argument_for()
Table.autoincrement_column
Table.c
Table.columns
Table.compare()
Table.compile()
Table.constraints
Table.corresponding_column()
Table.create()
Table.delete()
Table.description
Table.dialect_kwargs
Table.dialect_options
Table.drop()
Table.entity_namespace
Table.exported_columns
Table.foreign_key_constraints
Table.foreign_keys
Table.get_children()
Table.implicit_returning
Table.indexes
Table.info
Table.inherit_cache
Table.insert()
Table.is_derived_from()
Table.join()
Table.key
Table.kwargs
Table.lateral()
Table.outerjoin()
Table.params()
Table.primary_key
Table.replace_selectable()
Table.schema
Table.select()
Table.self_group()
Table.table_valued()
Table.tablesample()
Table.to_metadata()
Table.tometadata()
Table.unique_params()
Table.update()
- 反射数据库对象
- 列 INSERT/UPDATE 默认值
- 定义约束和索引
- 自定义 DDL
- 使用MetaData描述数据库¶
- SQL 数据类型对象
- 引擎和连接的使用
- Core API 基础知识
项目版本
- 上一个: Schema 定义语言
- 下一个: 反射数据库对象
- 上: 首页
- 在此页上
- 使用MetaData描述数据库
- 访问表和列
- 创建和删除数据库表
- 通过迁移更改数据库对象
- 指定 Schema 名称
- 后端特定选项
- Column、Table、MetaData API
Column
Column.__eq__()
Column.__init__()
Column.__le__()
Column.__lt__()
Column.__ne__()
Column.all_()
Column.anon_key_label
Column.anon_label
Column.any_()
Column.argument_for()
Column.asc()
Column.between()
Column.bitwise_and()
Column.bitwise_lshift()
Column.bitwise_not()
Column.bitwise_or()
Column.bitwise_rshift()
Column.bitwise_xor()
Column.bool_op()
Column.cast()
Column.collate()
Column.compare()
Column.compile()
Column.concat()
Column.contains()
Column.copy()
Column.desc()
Column.dialect_kwargs
Column.dialect_options
Column.distinct()
Column.endswith()
Column.expression
Column.foreign_keys
Column.get_children()
Column.icontains()
Column.iendswith()
Column.ilike()
Column.in_()
Column.index
Column.info
Column.inherit_cache
Column.is_()
Column.is_distinct_from()
Column.is_not()
Column.is_not_distinct_from()
Column.isnot()
Column.isnot_distinct_from()
Column.istartswith()
Column.key
Column.kwargs
Column.label()
Column.like()
Column.match()
Column.not_ilike()
Column.not_in()
Column.not_like()
Column.notilike()
Column.notin_()
Column.notlike()
Column.nulls_first()
Column.nulls_last()
Column.nullsfirst()
Column.nullslast()
Column.op()
Column.operate()
Column.params()
Column.proxy_set
Column.references()
Column.regexp_match()
Column.regexp_replace()
Column.reverse_operate()
Column.self_group()
Column.shares_lineage()
Column.startswith()
Column.timetuple
Column.unique
Column.unique_params()
MetaData
SchemaConst
SchemaItem
insert_sentinel()
Table
Table.__init__()
Table.add_is_dependent_on()
Table.alias()
Table.append_column()
Table.append_constraint()
Table.argument_for()
Table.autoincrement_column
Table.c
Table.columns
Table.compare()
Table.compile()
Table.constraints
Table.corresponding_column()
Table.create()
Table.delete()
Table.description
Table.dialect_kwargs
Table.dialect_options
Table.drop()
Table.entity_namespace
Table.exported_columns
Table.foreign_key_constraints
Table.foreign_keys
Table.get_children()
Table.implicit_returning
Table.indexes
Table.info
Table.inherit_cache
Table.insert()
Table.is_derived_from()
Table.join()
Table.key
Table.kwargs
Table.lateral()
Table.outerjoin()
Table.params()
Table.primary_key
Table.replace_selectable()
Table.schema
Table.select()
Table.self_group()
Table.table_valued()
Table.tablesample()
Table.to_metadata()
Table.tometadata()
Table.unique_params()
Table.update()
使用MetaData描述数据库¶
本节讨论基本的 Table
、Column
和 MetaData
对象。
另请参阅
使用数据库元数据 - SQLAlchemy 统一教程 中 SQLAlchemy 数据库元数据概念的教程介绍
元数据实体的集合存储在一个名为 MetaData
的对象中
from sqlalchemy import MetaData
metadata_obj = MetaData()
MetaData
是一个容器对象,用于将数据库(或多个数据库)被描述的许多不同功能组合在一起。
要表示表,请使用 Table
类。它的两个主要参数是表名,然后是它将与之关联的 MetaData
对象。其余的位置参数主要是描述每列的 Column
对象
from sqlalchemy import Table, Column, Integer, String
user = Table(
"user",
metadata_obj,
Column("user_id", Integer, primary_key=True),
Column("user_name", String(16), nullable=False),
Column("email_address", String(60)),
Column("nickname", String(50), nullable=False),
)
上面,描述了一个名为 user
的表,其中包含四列。表的主键由 user_id
列组成。可以为多列分配 primary_key=True
标志,该标志表示多列主键,称为复合主键。
另请注意,每列都使用对应于通用类型的对象(例如 Integer
和 String
)描述其数据类型。SQLAlchemy 具有数十种不同具体程度的类型,以及创建自定义类型的能力。有关类型系统的文档,请参见 SQL 数据类型对象。
访问表和列¶
MetaData
对象包含我们与之关联的所有 schema 构造。它支持几种访问这些表对象的方法,例如 sorted_tables
访问器,该访问器返回每个 Table
对象的列表,按外键依赖关系排序(即,每个表都以它引用的所有表为前导)
>>> for t in metadata_obj.sorted_tables:
... print(t.name)
user
user_preference
invoice
invoice_item
在大多数情况下,已经显式声明了单个 Table
对象,并且这些对象通常作为应用程序中的模块级变量直接访问。一旦定义了 Table
,它就具有一组完整的访问器,允许检查其属性。给定以下 Table
定义
employees = Table(
"employees",
metadata_obj,
Column("employee_id", Integer, primary_key=True),
Column("employee_name", String(60), nullable=False),
Column("employee_dept", Integer, ForeignKey("departments.department_id")),
)
请注意此表中使用 ForeignKey
对象 - 此构造定义了对远程表的引用,并在 定义外键 中进行了全面描述。访问有关此表信息的方法包括
# access the column "employee_id":
employees.columns.employee_id
# or just
employees.c.employee_id
# via string
employees.c["employee_id"]
# a tuple of columns may be returned using multiple strings
# (new in 2.0)
emp_id, name, type = employees.c["employee_id", "name", "type"]
# iterate through all columns
for c in employees.c:
print(c)
# get the table's primary key columns
for primary_key in employees.primary_key:
print(primary_key)
# get the table's foreign key objects:
for fkey in employees.foreign_keys:
print(fkey)
# access the table's MetaData:
employees.metadata
# access a column's name, type, nullable, primary key, foreign key
employees.c.employee_id.name
employees.c.employee_id.type
employees.c.employee_id.nullable
employees.c.employee_id.primary_key
employees.c.employee_dept.foreign_keys
# get the "key" of a column, which defaults to its name, but can
# be any user-defined string:
employees.c.employee_name.key
# access a column's table:
employees.c.employee_id.table is employees
# get the table related by a foreign key
list(employees.c.employee_dept.foreign_keys)[0].column.table
提示
FromClause.c
集合,与 FromClause.columns
集合同义,是 ColumnCollection
的实例,它为列的集合提供了类似字典的接口。名称通常像属性名称一样访问,例如 employees.c.employee_name
。但是,对于带有空格的特殊名称或与字典方法名称(例如 ColumnCollection.keys()
或 ColumnCollection.values()
)匹配的名称,必须使用索引访问,例如 employees.c['values']
或 employees.c["some column"]
。有关更多信息,请参见 ColumnCollection
。
创建和删除数据库表¶
一旦定义了一些 Table
对象,假设您正在使用全新的数据库,您可能想要做的一件事是为这些表及其相关构造发出 CREATE 语句(顺便说一句,如果您已经有首选的方法,例如数据库附带的工具或现有的脚本系统,那么您也可能不想这样做 - 如果是这种情况,请随时跳过本节 - SQLAlchemy 不要求使用它来创建您的表)。
发出 CREATE 的常用方法是在 MetaData
对象上使用 create_all()
。此方法将发出首先检查每个表是否存在的查询,如果未找到,则发出 CREATE 语句
engine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData()
user = Table(
"user",
metadata_obj,
Column("user_id", Integer, primary_key=True),
Column("user_name", String(16), nullable=False),
Column("email_address", String(60), key="email"),
Column("nickname", String(50), nullable=False),
)
user_prefs = Table(
"user_prefs",
metadata_obj,
Column("pref_id", Integer, primary_key=True),
Column("user_id", Integer, ForeignKey("user.user_id"), nullable=False),
Column("pref_name", String(40), nullable=False),
Column("pref_value", String(100)),
)
metadata_obj.create_all(engine)
PRAGMA table_info(user){}
CREATE TABLE user(
user_id INTEGER NOT NULL PRIMARY KEY,
user_name VARCHAR(16) NOT NULL,
email_address VARCHAR(60),
nickname VARCHAR(50) NOT NULL
)
PRAGMA table_info(user_prefs){}
CREATE TABLE user_prefs(
pref_id INTEGER NOT NULL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES user(user_id),
pref_name VARCHAR(40) NOT NULL,
pref_value VARCHAR(100)
)
create_all()
通常在表定义本身中创建表之间的外键约束,因此它也按依赖顺序生成表。有一些选项可以更改此行为,以便改为使用 ALTER TABLE
。
类似地,使用 drop_all()
方法可以实现删除所有表。此方法与 create_all()
的作用完全相反 - 首先检查每个表是否存在,然后按依赖关系的反向顺序删除表。
可以通过 Table
的 create()
和 drop()
方法来创建和删除单个表。默认情况下,这些方法会发出 CREATE 或 DROP,而不管表是否存在
engine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData()
employees = Table(
"employees",
metadata_obj,
Column("employee_id", Integer, primary_key=True),
Column("employee_name", String(60), nullable=False, key="name"),
Column("employee_dept", Integer, ForeignKey("departments.department_id")),
)
employees.create(engine)
CREATE TABLE employees(
employee_id SERIAL NOT NULL PRIMARY KEY,
employee_name VARCHAR(60) NOT NULL,
employee_dept INTEGER REFERENCES departments(department_id)
)
{}
drop()
方法
employees.drop(engine)
DROP TABLE employees
{}
要启用“首先检查表是否存在”逻辑,请将 checkfirst=True
参数添加到 create()
或 drop()
employees.create(engine, checkfirst=True)
employees.drop(engine, checkfirst=False)
通过迁移更改数据库对象¶
虽然 SQLAlchemy 直接支持为 schema 构造发出 CREATE 和 DROP 语句,但更改这些构造(通常通过 ALTER 语句以及其他特定于数据库的构造)的能力超出了 SQLAlchemy 本身的范围。虽然手动发出 ALTER 语句等很容易,例如通过将 text()
构造传递给 Connection.execute()
或使用 DDL
构造,但通常的做法是使用 schema 迁移工具来自动化维护与应用程序代码相关的数据库 schema。
SQLAlchemy 项目为此目的提供了 Alembic 迁移工具。Alembic 具有高度可定制的环境和极简主义的使用模式,支持诸如事务性 DDL、自动生成“候选”迁移、“脱机”模式(生成 SQL 脚本)以及分支解析支持等功能。
Alembic 取代了 SQLAlchemy-Migrate 项目,后者是 SQLAlchemy 的原始迁移工具,现在被认为是遗留工具。
指定 Schema 名称¶
大多数数据库都支持多个“schema”的概念 - 指的是表和其他构造的备用集合的命名空间。服务器端“schema”的几何结构采用多种形式,包括特定数据库范围下的“schema”名称(例如 PostgreSQL schema)、命名的同级数据库(例如 MySQL / MariaDB 对同一服务器上其他数据库的访问),以及其他概念,例如其他用户名拥有的表(Oracle 数据库、SQL Server),甚至是指备用数据库文件(SQLite ATTACH)或远程服务器(带有同义词的 Oracle 数据库 DBLINK)的名称。
以上所有方法(主要)的共同点是,有一种方法可以使用字符串名称引用此备用表集。SQLAlchemy 将此名称称为 schema 名称。在 SQLAlchemy 中,这仅仅是一个字符串名称,它与 Table
对象相关联,然后在 SQL 语句中以适合目标数据库的方式呈现,以便在其远程“schema”中引用该表,无论目标数据库上是什么机制。
“schema”名称可以直接与 Table
关联,方法是使用 Table.schema
参数;当将 ORM 与 声明性表 配置一起使用时,该参数通过 __table_args__
参数字典传递。
“schema”名称也可以与 MetaData
对象关联,其中它将自动对与该 MetaData
关联的所有 Table
对象生效,否则这些对象不会指定自己的名称。最后,SQLAlchemy 还支持“动态”schema 名称系统,该系统通常用于多租户应用程序,以便一组 Table
元数据可以引用每个连接或每个语句动态配置的一组 schema 名称。
另请参阅
使用声明性表的显式 Schema 名称 - 使用 ORM 声明性表 配置时的 schema 名称规范
最基本的示例是使用 Core Table
对象的 Table.schema
参数,如下所示
metadata_obj = MetaData()
financial_info = Table(
"financial_info",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("value", String(100), nullable=False),
schema="remote_banks",
)
使用此 Table
呈现的 SQL,例如下面的 SELECT 语句,将使用 remote_banks
schema 名称显式限定表名 financial_info
>>> print(select(financial_info))
SELECT remote_banks.financial_info.id, remote_banks.financial_info.value
FROM remote_banks.financial_info
当使用显式 schema 名称声明 Table
对象时,它使用 schema 和表名的组合存储在内部 MetaData
命名空间中。我们可以在 MetaData.tables
集合中查看此内容,方法是搜索键 'remote_banks.financial_info'
>>> metadata_obj.tables["remote_banks.financial_info"]
Table('financial_info', MetaData(),
Column('id', Integer(), table=<financial_info>, primary_key=True, nullable=False),
Column('value', String(length=100), table=<financial_info>, nullable=False),
schema='remote_banks')
此点式名称也必须用于引用表以与 ForeignKey
或 ForeignKeyConstraint
对象一起使用,即使引用表也位于同一 schema 中
customer = Table(
"customer",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("financial_info_id", ForeignKey("remote_banks.financial_info.id")),
schema="remote_banks",
)
Table.schema
参数也可以与某些方言一起使用,以指示到特定表的多令牌(例如,点式)路径。这在 Microsoft SQL Server 等数据库上尤为重要,在这些数据库上,通常有点式“数据库/所有者”令牌。令牌可以直接一次放在名称中,例如
schema = "dbo.scott"
使用 MetaData 指定默认 Schema 名称¶
MetaData
对象还可以通过将 MetaData.schema
参数传递给顶级 MetaData
构造,为所有 Table.schema
参数设置显式默认选项
metadata_obj = MetaData(schema="remote_banks")
financial_info = Table(
"financial_info",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("value", String(100), nullable=False),
)
上面,对于任何 Table
对象(或直接与 Sequence
对象关联的 MetaData
对象),将 Table.schema
参数保留为其默认值 None
,将改为表现得好像该参数设置为值 "remote_banks"
。这包括 Table
使用 schema 限定名称在 MetaData
中编目,即
metadata_obj.tables["remote_banks.financial_info"]
当使用 ForeignKey
或 ForeignKeyConstraint
对象引用此表时,可以使用 schema 限定名称或非 schema 限定名称来引用 remote_banks.financial_info
表
# either will work:
refers_to_financial_info = Table(
"refers_to_financial_info",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("fiid", ForeignKey("financial_info.id")),
)
# or
refers_to_financial_info = Table(
"refers_to_financial_info",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("fiid", ForeignKey("remote_banks.financial_info.id")),
)
当使用设置了 MetaData.schema
的 MetaData
对象时,希望指定不应进行 schema 限定的 Table
可以使用特殊符号 BLANK_SCHEMA
from sqlalchemy import BLANK_SCHEMA
metadata_obj = MetaData(schema="remote_banks")
financial_info = Table(
"financial_info",
metadata_obj,
Column("id", Integer, primary_key=True),
Column("value", String(100), nullable=False),
schema=BLANK_SCHEMA, # will not use "remote_banks"
)
另请参阅
应用动态 Schema 命名约定¶
Table.schema
参数使用的名称也可以应用于每个连接或每次执行动态查找,以便例如在多租户情况下,每个事务或语句都可以针对一组特定的 schema 名称,这些名称会更改。第 Schema 名称的转换 节描述了如何使用此功能。
另请参阅
为新连接设置默认 Schema¶
以上方法都指的是在 SQL 语句中包含显式 schema 名称的方法。数据库连接实际上具有“默认”schema 的概念,它是如果表名未显式进行 schema 限定时发生的“schema”(或数据库、所有者等)的名称。这些名称通常在登录级别配置,例如在连接到 PostgreSQL 数据库时,默认的“schema”称为“public”。
在许多情况下,无法通过登录本身设置默认“schema”,而是每次建立连接时都应进行有用的配置,方法是使用诸如 PostgreSQL 上的“SET SEARCH_PATH”或 Oracle 数据库上的“ALTER SESSION”之类的语句。这些方法可以通过使用 PoolEvents.connect()
事件来实现,该事件允许在首次创建 DBAPI 连接时访问它。例如,要将 Oracle 数据库 CURRENT_SCHEMA 变量设置为备用名称
from sqlalchemy import event
from sqlalchemy import create_engine
engine = create_engine(
"oracle+oracledb://scott:tiger@localhost:1521?service_name=freepdb1"
)
@event.listens_for(engine, "connect", insert=True)
def set_current_schema(dbapi_connection, connection_record):
cursor_obj = dbapi_connection.cursor()
cursor_obj.execute("ALTER SESSION SET CURRENT_SCHEMA=%s" % schema_name)
cursor_obj.close()
上面,set_current_schema()
事件处理程序将在上面的 Engine
首次连接时立即发生;由于该事件“插入”到处理程序列表的开头,因此它也将在方言自身的事件处理程序运行之前发生,尤其包括将确定连接“默认 schema”的处理程序。
对于其他数据库,请查阅数据库和/或方言文档,以获取有关如何配置默认 schema 的具体信息。
在版本 1.4.0b2 中更改: 上面的方法现在可以工作,而无需建立额外的事件处理程序。
另请参阅
在连接时设置备用搜索路径 - 在 PostgreSQL 方言文档中。
Schema 和反射¶
SQLAlchemy 的 schema 功能与 反射数据库对象 中介绍的表反射功能交互。有关其工作原理的更多详细信息,请参见 从其他 Schema 反射表 部分。
后端特定选项¶
Table
支持特定于数据库的选项。例如,MySQL 具有不同的表后端类型,包括“MyISAM”和“InnoDB”。可以使用带有 mysql_engine
的 Table
来表示这一点
addresses = Table(
"engine_email_addresses",
metadata_obj,
Column("address_id", Integer, primary_key=True),
Column("remote_user_id", Integer, ForeignKey(users.c.user_id)),
Column("email_address", String(20)),
mysql_engine="InnoDB",
)
其他后端也可能支持表级选项 - 这些选项将在每个方言的单独文档部分中进行描述。
Column、Table、MetaData API¶
对象名称 | 描述 |
---|---|
表示数据库表中的列。 |
|
insert_sentinel([name, type_], *, [default, omit_from_statements]) |
提供一个替代 |
|
|
一个枚举。 |
|
用于定义数据库模式的项的基类。 |
|
表示数据库中的表。 |
-
属性
sqlalchemy.schema.sqlalchemy.schema.
sqlalchemy.schema.BLANK_SCHEMA
-
属性
sqlalchemy.schema.sqlalchemy.schema.
sqlalchemy.schema.RETAIN_SCHEMA
- 类 sqlalchemy.schema.Column¶
表示数据库表中的列。
成员
__eq__(), __init__(), __le__(), __lt__(), __ne__(), all_(), anon_key_label, anon_label, any_(), argument_for(), asc(), between(), bitwise_and(), bitwise_lshift(), bitwise_not(), bitwise_or(), bitwise_rshift(), bitwise_xor(), bool_op(), cast(), collate(), compare(), compile(), concat(), contains(), copy(), desc(), dialect_kwargs, dialect_options, distinct(), endswith(), expression, foreign_keys, get_children(), icontains(), iendswith(), ilike(), in_(), index, info, inherit_cache, is_(), is_distinct_from(), is_not(), is_not_distinct_from(), isnot(), isnot_distinct_from(), istartswith(), key, kwargs, label(), like(), match(), not_ilike(), not_in(), not_like(), notilike(), notin_(), notlike(), nulls_first(), nulls_last(), nullsfirst(), nullslast(), op(), operate(), params(), proxy_set, references(), regexp_match(), regexp_replace(), reverse_operate(), self_group(), shares_lineage(), startswith(), timetuple, unique, unique_params()
类签名
class
sqlalchemy.schema.Column
(sqlalchemy.sql.base.DialectKWArgs
,sqlalchemy.schema.SchemaItem
,sqlalchemy.sql.expression.ColumnClause
)-
方法
sqlalchemy.schema.Column.
__eq__(other: Any) → ColumnOperators¶ 继承自
sqlalchemy.sql.expression.ColumnOperators.__eq__
方法,源自ColumnOperators
实现
==
运算符。在列上下文中,生成子句
a = b
。如果目标是None
,则生成a IS NULL
。
-
方法
sqlalchemy.schema.Column.
__init__(_Column__name_pos: str | _TypeEngineArgument[_T] | SchemaEventTarget | None = None, _Column__type_pos: _TypeEngineArgument[_T] | SchemaEventTarget | None = None, *args: SchemaEventTarget, name: str | None = None, type_: _TypeEngineArgument[_T] | None = None, autoincrement: _AutoIncrementType = 'auto', default: Any | None = _NoArg.NO_ARG, insert_default: Any | None = _NoArg.NO_ARG, doc: str | None = None, key: str | None = None, index: bool | None = None, unique: bool | None = None, info: _InfoType | None = None, nullable: bool | Literal[SchemaConst.NULL_UNSPECIFIED] | None = SchemaConst.NULL_UNSPECIFIED, onupdate: Any | None = None, primary_key: bool = False, server_default: _ServerDefaultArgument | None = None, server_onupdate: _ServerOnUpdateArgument | None = None, quote: bool | None = None, system: bool = False, comment: str | None = None, insert_sentinel: bool = False, _omit_from_statements: bool = False, _proxies: Any | None = None, **dialect_kwargs: Any)¶ 构造一个新的
Column
对象。- 参数:
name¶ –
此列在数据库中表示的名称。此参数可以是第一个位置参数,或通过关键字指定。
不包含大写字符的名称将被视为不区分大小写的名称,除非它们是保留字,否则不会被引用。 包含任何数量大写字符的名称将被引用并精确发送。 请注意,即使对于像 Oracle 数据库这样将大写名称标准化为不区分大小写的数据库,此行为也适用。
名称字段可以在构造时省略,并在之后应用,在 Column 与
Table
关联之前的任何时间都可以设置。 这是为了支持在declarative
扩展中方便使用。type_¶ –
列的类型,使用
TypeEngine
的子类实例来指定。 如果类型不需要参数,则也可以发送类型的类,例如# use a type with arguments Column("data", String(50)) # use no arguments Column("level", Integer)
type
参数可以是第二个位置参数,或通过关键字指定。如果
type
为None
或省略,它将首先默认为特殊类型NullType
。 如果当此Column
使用ForeignKey
和/或ForeignKeyConstraint
引用另一个列时,远程引用列的类型也会被复制到此列,当外键针对该远程Column
对象解析时。*args¶ – 附加的位置参数包括各种
SchemaItem
派生的构造,这些构造将作为选项应用于列。 这些包括Constraint
,ForeignKey
,ColumnDefault
,Sequence
,Computed
和Identity
的实例。 在某些情况下,可以使用等效的关键字参数,例如server_default
,default
和unique
。autoincrement¶ –
为没有外键依赖的整数主键列设置“自动递增”语义(更具体的定义请参阅本文档字符串的后续部分)。 这可能会影响在创建表期间为此列生成的 DDL,以及在编译和执行 INSERT 语句时如何考虑该列。
默认值是字符串
"auto"
,表示对于 INTEGER 类型的单列(即非复合)主键,且没有其他客户端或服务器端默认构造指示的情况,应自动应用自动递增语义。 其他值包括True
(强制此列也对 复合主键 启用自动递增语义),False
(此列不应具有自动递增语义),以及字符串"ignore_fk"
(外键列的特殊情况,见下文)。术语“自动递增语义”既指在 CREATE TABLE 语句中为列生成的 DDL 类型(当调用
MetaData.create_all()
和Table.create()
等方法时),也指在编译 INSERT 语句并将其发送到数据库时如何考虑该列。DDL 渲染(即
MetaData.create_all()
,Table.create()
): 当用于没有其他默认生成构造(例如Sequence
或Identity
构造)的Column
时,此参数将暗示数据库特定的关键字,例如 PostgreSQL 的SERIAL
, MySQL 的AUTO_INCREMENT
, 或 SQL Server 上的IDENTITY
也应该被渲染。 并非每个数据库后端都提供“隐含”的默认生成器; 例如,Oracle 数据库后端始终需要一个显式的构造,如Identity
,与Column
一起使用,以便渲染的 DDL 也包括在数据库中生成的自动生成构造。INSERT 语义(即,当
insert()
构造被编译为 SQL 字符串,然后使用Connection.execute()
或等效方法在数据库上执行时): 单行 INSERT 语句将被识别为会为此列自动生成一个新的整数主键值。在语句执行后,可以通过CursorResult.inserted_primary_key
属性在Result
对象上访问此值。 当 ORM 映射的对象被持久化到数据库时,这也适用于 ORM 的使用。这表明新的整数主键将可用于成为该对象的 标识键 的一部分。 无论与Column
关联的 DDL 构造如何,此行为都会发生,并且独立于前面注释中讨论的 “DDL 渲染” 行为。
该参数可以设置为
True
,以指示复合主键(即多列主键)中的某一列应具有自动递增语义。但请注意,主键中只能有一列具有此设置。 也可以将其设置为True
,以指示配置了客户端或服务端默认值的列的自动递增语义,但请注意,并非所有方言都能适应所有类型的默认值作为“自动递增”。 还可以将其设置为False
,以禁用 INTEGER 类型单列主键的自动递增语义。此设置仅对以下列有效:
整数类型衍生列(即 INT、SMALLINT、BIGINT)。
主键的组成部分
不通过
ForeignKey
引用另一列,除非该值被指定为'ignore_fk'
# turn on autoincrement for this column despite # the ForeignKey() Column( "id", ForeignKey("other.id"), primary_key=True, autoincrement="ignore_fk", )
通常不希望在通过外键引用另一列的列上启用“自动递增”,因为此类列需要引用源自其他地方的值。
此设置对符合上述条件的列具有以下影响:
如果列尚不包含后端支持的默认值生成结构(例如
Identity
),则为该列发出的 DDL 将包含特定于数据库的关键字,旨在将此列标识为特定后端上的“自动递增”列。 主要 SQLAlchemy 方言的行为包括:MySQL 和 MariaDB 上的 AUTO INCREMENT
PostgreSQL 上的 SERIAL
MS-SQL 上的 IDENTITY - 即使没有
Identity
构造也会发生这种情况,因为Column.autoincrement
参数早于此构造。SQLite - SQLite 整数主键列隐式地“自动递增”,并且不呈现额外的关键字; 不包含呈现特殊的 SQLite 关键字
AUTOINCREMENT
,因为这是不必要的,并且数据库供应商不推荐这样做。 有关更多背景信息,请参阅 SQLite 自动递增行为 部分。Oracle 数据库 - Oracle 数据库方言目前没有默认的“自动递增”功能,而是建议使用
Identity
构造来实现此目的(也可以使用Sequence
构造)。第三方方言 - 有关其具体行为的详细信息,请查阅这些方言的文档。
当编译和执行不设置
Insert.inline()
修饰符的单行insert()
构造时,将在语句执行后使用特定于所用数据库驱动程序的方法自动检索此列新生成的主键值。MySQL、SQLite - 调用
cursor.lastrowid()
(请参阅 https://pythonlang.cn/dev/peps/pep-0249/#lastrowid)PostgreSQL、SQL Server、Oracle 数据库 - 在呈现 INSERT 语句时使用 RETURNING 或等效构造,然后在执行后检索新生成的主键值
PostgreSQL、Oracle 数据库,对于将
Table.implicit_returning
设置为 False 的Table
对象 - 对于Sequence
,仅在 INSERT 语句发生之前显式调用Sequence
,以便客户端可以使用新生成的主键值SQL Server,对于将
Table.implicit_returning
设置为 False 的Table
对象 - 在调用 INSERT 语句后,使用SELECT scope_identity()
构造来检索新生成的主键值。第三方方言 - 有关其具体行为的详细信息,请查阅这些方言的文档。
对于使用参数列表(即“executemany”语义)调用的多行
insert()
构造,主键检索行为通常被禁用,但是,可能存在特殊的 API 可用于检索“executemany”的新主键值列表,例如 psycopg2 “fast insertmany”功能。 这些功能非常新,可能尚未在文档中得到充分说明。
default¶ –
标量、Python 可调用对象或
ColumnElement
表达式,表示此列的默认值,如果在 insert 的 VALUES 子句中未另行指定此列,则会在 insert 时调用此值。 这是使用ColumnDefault
作为位置参数的快捷方式; 有关参数结构的完整详细信息,请参阅该类。将此参数与
Column.server_default
进行对比,后者在数据库端创建默认值生成器。另请参阅
insert_default¶ –
为了与
mapped_column()
兼容,Column.default
的别名。doc¶ – 可选的字符串,可供 ORM 或类似工具用于记录 Python 端的属性。 此属性不呈现 SQL 注释; 请使用
Column.comment
参数来实现此目的。key¶ – 可选的字符串标识符,用于在
Table
上标识此Column
对象。 当提供 key 时,这是应用程序中引用Column
的唯一标识符,包括 ORM 属性映射;name
字段仅在呈现 SQL 时使用。index¶ –
当为
True
时,指示将为此Column
自动生成Index
构造,这将导致在调用 DDL 创建操作时,为Table
发出 “CREATE INDEX” 语句。使用此标志等同于在
Table
构造级别显式使用Index
构造Table( "some_table", metadata, Column("x", Integer), Index("ix_some_table_x", "x"), )
要将
Index.unique
标志添加到Index
,请同时将Column.unique
和Column.index
标志设置为 True,这将产生呈现 “CREATE UNIQUE INDEX” DDL 指令而不是 “CREATE INDEX” 的效果。索引的名称使用 默认命名约定 生成,对于
Index
构造,其形式为ix_<tablename>_<columnname>
。由于此标志仅旨在方便向表定义添加单列、默认配置索引的常见情况,因此对于大多数用例,应首选显式使用
Index
构造,包括包含多列的复合索引、带有 SQL 表达式或排序的索引、特定于后端的索引配置选项以及使用特定名称的索引。注意
Column.index
上Column
的属性不指示此列是否被索引,仅指示此处是否显式设置了此标志。 要查看列上的索引,请查看Table.indexes
集合或使用Inspector.get_indexes()
。info¶ – 可选数据字典,将填充到此对象的
SchemaItem.info
属性中。nullable¶ –
设置为
False
时,将导致在为列生成 DDL 时添加 “NOT NULL” 短语。 当为True
时,通常不生成任何内容(在 SQL 中,这默认为 “NULL”),但在某些非常特定的后端特定边缘情况下,“NULL” 可能会显式呈现。 默认为True
,除非Column.primary_key
也为True
或列指定了Identity
,在这种情况下,它默认为False
。 此参数仅在发出 CREATE TABLE 语句时使用。注意
当列指定
Identity
时,DDL 编译器通常会忽略此参数。 PostgreSQL 数据库允许通过将此参数显式设置为True
来实现可为空的 identity 列。onupdate¶ –
标量、Python 可调用对象或
ClauseElement
,表示要在 UPDATE 语句中应用于列的默认值,如果在 update 的 SET 子句中不存在此列,则会在 update 时调用此值。 这是使用for_update=True
的ColumnDefault
作为位置参数的快捷方式。另请参阅
列 INSERT/UPDATE 默认值 - 关于 onupdate 的完整讨论
primary_key¶ – 如果为
True
,则将此列标记为主键列。 可以设置多个列的此标志以指定复合主键。 作为替代方案,可以通过显式的PrimaryKeyConstraint
对象来指定Table
的主键。server_default¶ –
一个
FetchedValue
实例、str、Unicode 或text()
构造,表示列的 DDL DEFAULT 值。字符串类型将按原样发出,并用单引号括起来
Column("x", Text, server_default="val")
将呈现
x TEXT DEFAULT 'val'
text()
表达式将按原样呈现,不带引号Column("y", DateTime, server_default=text("NOW()"))
将呈现
y DATETIME DEFAULT NOW()
字符串和 text() 将在初始化时转换为
DefaultClause
对象。此参数还可以接受上下文有效的 SQLAlchemy 表达式或构造的复杂组合
from sqlalchemy import create_engine from sqlalchemy import Table, Column, MetaData, ARRAY, Text from sqlalchemy.dialects.postgresql import array engine = create_engine( "postgresql+psycopg2://scott:tiger@localhost/mydatabase" ) metadata_obj = MetaData() tbl = Table( "foo", metadata_obj, Column( "bar", ARRAY(Text), server_default=array(["biz", "bang", "bash"]) ), ) metadata_obj.create_all(engine)
上述操作将创建一个具有以下 SQL 的表
CREATE TABLE foo ( bar TEXT[] DEFAULT ARRAY['biz', 'bang', 'bash'] )
使用
FetchedValue
指示现有列将在数据库端生成默认值,该默认值将在插入后可供 SQLAlchemy 进行后提取。 此构造不指定任何 DDL,实现留给数据库,例如通过触发器。另请参阅
服务器调用的 DDL 显式默认表达式 - 关于服务器端默认值的完整讨论
server_onupdate¶ –
一个
FetchedValue
实例,表示数据库端默认值生成函数,例如触发器。 这向 SQLAlchemy 指示,更新后可以使用新生成的值。 此构造实际上并未在数据库中实现任何类型的生成函数,而必须单独指定。警告
此指令当前不生成 MySQL 的 “ON UPDATE CURRENT_TIMESTAMP()” 子句。 有关如何生成此子句的背景信息,请参阅 为 MySQL / MariaDB 的 explicit_defaults_for_timestamp 呈现 ON UPDATE CURRENT TIMESTAMP。
另请参阅
quote¶ – 强制对此列的名称启用或禁用引号,对应于
True
或False
。 当保留其默认值None
时,将根据名称是否区分大小写(至少包含一个大写字符的标识符被视为区分大小写)或是否为保留字来引用列标识符。 仅当需要强制引用 SQLAlchemy 方言未知的保留字时,才需要此标志。unique¶ –
当为
True
且Column.index
参数保留其默认值False
时,指示将为此Column
自动生成UniqueConstraint
构造,这将导致在为Table
对象调用 DDL 创建操作时,在发出的CREATE TABLE
语句中包含引用此列的 “UNIQUE CONSTRAINT” 子句。当此标志为
True
,同时Column.index
参数同时设置为True
时,效果是生成Index
构造,其中包括Index.unique
参数设置为True
。 有关更多详细信息,请参阅Column.index
的文档。使用此标志等同于在
Table
构造级别显式使用UniqueConstraint
构造Table("some_table", metadata, Column("x", Integer), UniqueConstraint("x"))
唯一约束对象的
UniqueConstraint.name
参数保留其默认值None
; 在缺少封闭MetaData
的 命名约定 的情况下,UNIQUE CONSTRAINT 构造将作为未命名发出,这通常会调用特定于数据库的命名约定来执行。由于此标志仅旨在方便向表定义添加单列、默认配置的唯一约束的常见情况,因此对于大多数用例,应首选显式使用
UniqueConstraint
构造,包括包含多列的复合约束、特定于后端的索引配置选项以及使用特定名称的约束。注意
Column.unique
上Column
的属性不指示此列是否具有唯一约束,仅指示此处是否显式设置了此标志。 要查看可能涉及此列的索引和唯一约束,请查看Table.indexes
和/或Table.constraints
集合,或使用Inspector.get_indexes()
和/或Inspector.get_unique_constraints()
system¶ –
当为
True
时,指示这是一个“系统”列,即数据库自动提供的列,不应包含在CREATE TABLE
语句的列列表中。对于应在不同后端有条件地以不同方式呈现列的更复杂场景,请考虑
CreateColumn
的自定义编译规则。comment¶ –
可选字符串,将在表创建时呈现 SQL 注释。
1.2 版本新增: 为
Column
添加了Column.comment
参数。insert_sentinel¶ –
将此
Column
标记为 插入哨兵,用于优化不具有合格主键配置的表的 insertmanyvalues 功能的性能。2.0.10 版本新增。
-
method
sqlalchemy.schema.Column.
__le__(other: Any) → ColumnOperators¶ 继承自
sqlalchemy.sql.expression.ColumnOperators.__le__
方法,来自ColumnOperators
实现
<=
运算符。在列上下文中,生成子句
a <= b
。
-
method
sqlalchemy.schema.Column.
__lt__(other: Any) → ColumnOperators¶ 继承自
sqlalchemy.sql.expression.ColumnOperators.__lt__
方法,来自ColumnOperators
实现
<
运算符。在列上下文中,生成子句
a < b
。
-
方法
sqlalchemy.schema.Column.
__ne__(other: Any) → ColumnOperators¶ 继承自
sqlalchemy.sql.expression.ColumnOperators.__ne__
方法,来自ColumnOperators
实现
!=
运算符。在列上下文中,生成子句
a != b
。如果目标是None
,则生成a IS NOT NULL
。
-
方法
sqlalchemy.schema.Column.
all_() → ColumnOperators¶ 继承自
ColumnOperators.all_()
方法,来自ColumnOperators
生成针对父对象的
all_()
子句。有关示例,请参阅
all_()
的文档。注意
请务必不要将较新的
ColumnOperators.all_()
方法与此方法的旧版版本混淆,即特定于ARRAY
的Comparator.all()
方法,后者使用不同的调用样式。
-
属性
sqlalchemy.schema.Column.
anon_key_label¶ 继承自
ColumnElement.anon_key_label
属性,来自ColumnElement
版本 1.4 中已弃用:
ColumnElement.anon_key_label
属性现在是私有的,公共访问器已被弃用。
-
属性
sqlalchemy.schema.Column.
anon_label¶ 继承自
ColumnElement.anon_label
属性,来自ColumnElement
版本 1.4 中已弃用:
ColumnElement.anon_label
属性现在是私有的,公共访问器已被弃用。
-
方法
sqlalchemy.schema.Column.
any_() → ColumnOperators¶ 继承自
ColumnOperators.any_()
方法,来自ColumnOperators
生成针对父对象的
any_()
子句。有关示例,请参阅
any_()
的文档。注意
请务必不要将较新的
ColumnOperators.any_()
方法与此方法的旧版版本混淆,即特定于ARRAY
的Comparator.any()
方法,后者使用不同的调用样式。
-
类方法
sqlalchemy.schema.Column.
argument_for(dialect_name, argument_name, default)¶ 继承自
DialectKWArgs.argument_for()
方法,来自DialectKWArgs
为此类添加一种新的特定于方言的关键字参数。
例如:
Index.argument_for("mydialect", "length", None) some_index = Index("a", "b", mydialect_length=5)
DialectKWArgs.argument_for()
方法是一种为DefaultDialect.construct_arguments
字典添加额外参数的按参数方式。此字典提供了各种模式级别构造代表方言接受的参数名称列表。新方言通常应一次性将此字典指定为方言类的数据成员。临时添加参数名称的用例通常用于最终用户代码,这些代码也使用自定义编译方案来使用其他参数。
- 参数:
dialect_name¶ – 方言名称。方言必须是可定位的,否则会引发
NoSuchModuleError
异常。方言还必须包含现有的DefaultDialect.construct_arguments
集合,表明它参与关键字参数验证和默认系统,否则会引发ArgumentError
异常。如果方言不包含此集合,则已经可以代表此方言指定任何关键字参数。SQLAlchemy 中打包的所有方言都包含此集合,但是对于第三方方言,支持可能会有所不同。argument_name¶ – 参数名称。
default¶ – 参数的默认值。
-
方法
sqlalchemy.schema.Column.
asc() → ColumnOperators¶ 继承自
ColumnOperators.asc()
方法,来自ColumnOperators
生成针对父对象的
asc()
子句。
-
方法
sqlalchemy.schema.Column.
between(cleft: Any, cright: Any, symmetric: bool = False) → ColumnOperators¶ 继承自
ColumnOperators.between()
方法,来自ColumnOperators
生成针对父对象的
between()
子句,给定下限和上限范围。
-
方法
sqlalchemy.schema.Column.
bitwise_and(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.bitwise_and()
方法,来自ColumnOperators
生成按位与运算,通常通过
&
运算符实现。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bitwise_lshift(other: Any) → ColumnOperators¶ -
生成按位左移运算,通常通过
<<
运算符实现。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bitwise_not() → ColumnOperators¶ 继承自
ColumnOperators.bitwise_not()
方法,来自ColumnOperators
生成按位非运算,通常通过
~
运算符实现。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bitwise_or(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.bitwise_or()
方法,来自ColumnOperators
生成按位或运算,通常通过
|
运算符实现。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bitwise_rshift(other: Any) → ColumnOperators¶ -
生成按位右移运算,通常通过
>>
运算符实现。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bitwise_xor(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.bitwise_xor()
方法,来自ColumnOperators
生成按位异或运算,通常通过
^
运算符实现,或者对于 PostgreSQL 使用#
运算符。2.0.2 版本新增。
另请参阅
-
方法
sqlalchemy.schema.Column.
bool_op(opstring: str, precedence: int = 0, python_impl: Callable[[...], Any] | None = None) → Callable[[Any], Operators]¶ 继承自
Operators.bool_op()
方法,来自Operators
返回自定义布尔运算符。
此方法是调用
Operators.op()
并传递Operators.op.is_comparison
标志为 True 的简写方式。使用Operators.bool_op()
的一个主要优点是,当使用列构造时,出于 PEP 484 目的,返回表达式的“布尔”性质将存在。另请参阅
-
方法
sqlalchemy.schema.Column.
cast(type_: _TypeEngineArgument[_OPT]) → Cast[_OPT]¶ 继承自
ColumnElement.cast()
方法,来自ColumnElement
生成类型转换,即
CAST(<expression> AS <type>)
。这是
cast()
函数的快捷方式。
-
方法
sqlalchemy.schema.Column.
collate(collation: str) → ColumnOperators¶ 继承自
ColumnOperators.collate()
方法,来自ColumnOperators
生成针对父对象的
collate()
子句,给定排序规则字符串。另请参阅
-
方法
sqlalchemy.schema.Column.
compare(other: ClauseElement, **kw: Any) → bool¶ 继承自
ClauseElement.compare()
方法,来自ClauseElement
将此
ClauseElement
与给定的ClauseElement
进行比较。子类应覆盖默认行为,默认行为是直接标识比较。
**kw 是子类
compare()
方法使用的参数,可用于修改比较的标准(请参阅ColumnElement
)。
-
方法
sqlalchemy.schema.Column.
compile(bind: _HasDialect | None = None, dialect: Dialect | None = None, **kw: Any) → Compiled¶ 继承自
CompilerElement.compile()
方法,源自CompilerElement
编译此 SQL 表达式。
返回值是一个
Compiled
对象。在返回的值上调用str()
或unicode()
将产生结果的字符串表示形式。Compiled
对象还可以使用params
访问器返回绑定参数名称和值的字典。- 参数:
bind¶ – 一个
Connection
或Engine
,它可以提供Dialect
以生成Compiled
对象。如果bind
和dialect
参数都被省略,则使用默认的 SQL 编译器。column_keys¶ – 用于 INSERT 和 UPDATE 语句,应出现在已编译语句的 VALUES 子句中的列名列表。如果为
None
,则呈现目标表对象中的所有列。compile_kwargs¶ –
将传递给所有 “visit” 方法中编译器的可选附加参数字典。 这允许任何自定义标志传递给自定义编译构造,例如。 它也用于传递
literal_binds
标志的情况from sqlalchemy.sql import table, column, select t = table("t", column("x")) s = select(t).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))
-
方法
sqlalchemy.schema.Column.
concat(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.concat()
方法,源自ColumnOperators
实现 ‘concat’ 运算符。
在列上下文中,生成子句
a || b
,或在 MySQL 上使用concat()
运算符。
-
方法
sqlalchemy.schema.Column.
contains(other: Any, **kw: Any) → ColumnOperators¶ 继承自
ColumnOperators.contains()
方法,源自ColumnOperators
实现 ‘contains’ 运算符。
生成一个 LIKE 表达式,用于测试字符串值中间部分的匹配项
column LIKE '%' || <other> || '%'
例如:
stmt = select(sometable).where(sometable.c.column.contains("foobar"))
由于运算符使用
LIKE
,因此出现在 <other> 表达式内部的通配符"%"
和"_"
也将表现得像通配符。 对于文字字符串值,可以将ColumnOperators.contains.autoescape
标志设置为True
,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配,而不是作为通配符匹配。 或者,ColumnOperators.contains.escape
参数将建立给定的字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。 这通常是纯字符串值,但也可以是任意 SQL 表达式。 除非将
ColumnOperators.contains.autoescape
标志设置为 True,否则 LIKE 通配符%
和_
默认情况下不会转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.contains("foo%bar", autoescape=True)
将呈现为
somecolumn LIKE '%' || :param || '%' ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.contains("foo/%bar", escape="^")
将呈现为
somecolumn LIKE '%' || :param || '%' ESCAPE '^'
该参数也可以与
ColumnOperators.contains.autoescape
结合使用somecolumn.contains("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
方法
sqlalchemy.schema.Column.
copy(**kw: Any) → Column[Any]¶ 在 1.4 版本中已弃用:
Column.copy()
方法已弃用,并将在未来版本中删除。
-
方法
sqlalchemy.schema.Column.
desc() → ColumnOperators¶ 继承自
ColumnOperators.desc()
方法,源自ColumnOperators
生成针对父对象的
desc()
子句。
-
属性
sqlalchemy.schema.Column.
dialect_kwargs¶ 继承自
DialectKWArgs.dialect_kwargs
属性,源自DialectKWArgs
指定为此构造的特定于方言的选项的关键字参数集合。
参数以其原始的
<dialect>_<kwarg>
格式存在于此处。 仅包含实际传递的参数; 与DialectKWArgs.dialect_options
集合不同,后者包含此方言已知的所有选项,包括默认值。该集合也是可写的; 接受
<dialect>_<kwarg>
形式的键,其中值将组合到选项列表中。另请参阅
DialectKWArgs.dialect_options
- 嵌套字典形式
-
属性
sqlalchemy.schema.Column.
dialect_options¶ 继承自
DialectKWArgs.dialect_options
属性,源自DialectKWArgs
指定为此构造的特定于方言的选项的关键字参数集合。
这是一个两级嵌套注册表,键入为
<dialect_name>
和<argument_name>
。 例如,postgresql_where
参数可以定位为arg = my_object.dialect_options["postgresql"]["where"]
0.9.2 版本中的新功能。
另请参阅
DialectKWArgs.dialect_kwargs
- 平面字典形式
-
方法
sqlalchemy.schema.Column.
distinct() → ColumnOperators¶ 继承自
ColumnOperators.distinct()
方法,源自ColumnOperators
生成针对父对象的
distinct()
子句。
-
方法
sqlalchemy.schema.Column.
endswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ 继承自
ColumnOperators.endswith()
方法,源自ColumnOperators
实现 ‘endswith’ 运算符。
生成一个 LIKE 表达式,用于测试字符串值结尾的匹配项
column LIKE '%' || <other>
例如:
stmt = select(sometable).where(sometable.c.column.endswith("foobar"))
由于运算符使用
LIKE
,因此出现在 <other> 表达式内部的通配符"%"
和"_"
也将表现得像通配符。 对于文字字符串值,可以将ColumnOperators.endswith.autoescape
标志设置为True
,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配,而不是作为通配符匹配。 或者,ColumnOperators.endswith.escape
参数将建立给定的字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。 这通常是纯字符串值,但也可以是任意 SQL 表达式。 除非将
ColumnOperators.endswith.autoescape
标志设置为 True,否则 LIKE 通配符%
和_
默认情况下不会转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.endswith("foo%bar", autoescape=True)
将呈现为
somecolumn LIKE '%' || :param ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.endswith("foo/%bar", escape="^")
将呈现为
somecolumn LIKE '%' || :param ESCAPE '^'
该参数也可以与
ColumnOperators.endswith.autoescape
结合使用somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
属性
sqlalchemy.schema.Column.
expression¶ 继承自
ColumnElement.expression
属性,源自ColumnElement
返回列表达式。
检查接口的一部分; 返回自身。
-
属性
sqlalchemy.schema.Column.
foreign_keys: Set[ForeignKey] = frozenset({})¶ 继承自
ColumnElement.foreign_keys
属性,源自ColumnElement
与此
Column
关联的所有ForeignKey
标记对象的集合。每个对象都是
Table
范围的ForeignKeyConstraint
的成员。另请参阅
-
方法
sqlalchemy.schema.Column.
get_children(*, column_tables=False, **kw)¶ 继承自
ColumnClause.get_children()
方法,源自ColumnClause
返回此
HasTraverseInternals
的直接子HasTraverseInternals
元素。这用于访问遍历。
**kw 可能包含更改返回集合的标志,例如,为了减少较大的遍历,返回项目子集,或者从不同的上下文返回子项(例如,模式级别集合而不是子句级别)。
-
方法
sqlalchemy.schema.Column.
icontains(other: Any, **kw: Any) → ColumnOperators¶ 继承自
ColumnOperators.icontains()
方法,源自ColumnOperators
实现
icontains
运算符,例如ColumnOperators.contains()
的不区分大小写版本。生成一个 LIKE 表达式,用于测试字符串值中间部分的不区分大小写的匹配项
lower(column) LIKE '%' || lower(<other>) || '%'
例如:
stmt = select(sometable).where(sometable.c.column.icontains("foobar"))
由于运算符使用
LIKE
,因此出现在 <other> 表达式内部的通配符"%"
和"_"
也将表现得像通配符。 对于文字字符串值,可以将ColumnOperators.icontains.autoescape
标志设置为True
,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配,而不是作为通配符匹配。 或者,ColumnOperators.icontains.escape
参数将建立给定的字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。 这通常是纯字符串值,但也可以是任意 SQL 表达式。 除非将
ColumnOperators.icontains.autoescape
标志设置为 True,否则 LIKE 通配符%
和_
默认情况下不会转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.icontains("foo%bar", autoescape=True)
将呈现为
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.icontains("foo/%bar", escape="^")
将呈现为
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '^'
该参数也可以与
ColumnOperators.contains.autoescape
结合使用somecolumn.icontains("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
method
sqlalchemy.schema.Column.
iendswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ 继承自
ColumnOperators.iendswith()
方法,源自ColumnOperators
实现
iendswith
操作符,例如ColumnOperators.endswith()
的不区分大小写版本。生成一个 LIKE 表达式,用于测试字符串值的末尾是否不区分大小写匹配
lower(column) LIKE '%' || lower(<other>)
例如:
stmt = select(sometable).where(sometable.c.column.iendswith("foobar"))
由于此操作符使用
LIKE
,因此出现在 <other> 表达式中的通配符"%"
和"_"
也将表现为通配符。对于文字字符串值,可以将ColumnOperators.iendswith.autoescape
标志设置为True
,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配,而不是作为通配符匹配。或者,ColumnOperators.iendswith.escape
参数将指定一个字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。这通常是一个纯字符串值,但也可是任意 SQL 表达式。 除非将
ColumnOperators.iendswith.autoescape
标志设置为 True,否则 LIKE 通配符%
和_
默认情况下不会被转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.iendswith("foo%bar", autoescape=True)
将呈现为
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.iendswith("foo/%bar", escape="^")
将呈现为
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '^'
此参数也可以与
ColumnOperators.iendswith.autoescape
结合使用somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
method
sqlalchemy.schema.Column.
ilike(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.ilike()
方法,源自ColumnOperators
实现
ilike
操作符,例如不区分大小写的 LIKE。在列上下文中,生成以下形式的表达式
lower(a) LIKE lower(other)
或者在支持 ILIKE 操作符的后端
a ILIKE other
例如:
stmt = select(sometable).where(sometable.c.column.ilike("%foobar%"))
-
method
sqlalchemy.schema.Column.
in_(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.in_()
方法,源自ColumnOperators
实现
in
操作符。在列上下文中,生成子句
column IN <other>
。给定的参数
other
可以是文字值列表,例如:
stmt.where(column.in_([1, 2, 3]))
在这种调用形式中,项目列表将转换为一组绑定参数,其长度与给定的列表相同
WHERE COL IN (?, ?, ?)
如果要与包含多个表达式的
tuple_()
进行比较,则可以提供元组列表from sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
空列表,例如:
stmt.where(column.in_([]))
在这种调用形式中,表达式呈现一个“空集”表达式。这些表达式是为各个后端量身定制的,通常尝试获取一个空的 SELECT 语句作为子查询。例如在 SQLite 上,该表达式为
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
在版本 1.4 中变更:空的 IN 表达式现在在所有情况下都使用执行时生成的 SELECT 子查询。
绑定参数,例如
bindparam()
,如果它包含bindparam.expanding
标志,则可以使用stmt.where(column.in_(bindparam("value", expanding=True)))
在这种调用形式中,表达式呈现一个特殊的非 SQL 占位符表达式,如下所示:
WHERE COL IN ([EXPANDING_value])
此占位符表达式在语句执行时被拦截,以转换为前面说明的可变数量的绑定参数形式。如果语句执行为
connection.execute(stmt, {"value": [1, 2, 3]})
数据库将为每个值传递一个绑定参数
WHERE COL IN (?, ?, ?)
1.2 版本中新增:添加了“expanding”绑定参数
如果传递空列表,则呈现一个特殊的“空列表”表达式,该表达式特定于正在使用的数据库。在 SQLite 上,这将是
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
1.3 版本中新增:“expanding”绑定参数现在支持空列表
一个
select()
构造,通常是相关的标量选择stmt.where( column.in_(select(othertable.c.y).where(table.c.x == othertable.c.x)) )
在这种调用形式中,
ColumnOperators.in_()
呈现为给定形式WHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
- 参数:
other¶ – 文字列表,
select()
构造,或包含设置为 True 的bindparam.expanding
标志的bindparam()
构造。
-
attribute
sqlalchemy.schema.Column.
index: bool | None¶ Column.index
参数的值。不指示此
Column
是否实际被索引;请使用Table.indexes
。另请参阅
-
attribute
sqlalchemy.schema.Column.
info¶ 继承自
SchemaItem.info
属性,源自SchemaItem
与对象关联的信息字典,允许用户定义的数据与此
SchemaItem
关联。
-
attribute
sqlalchemy.schema.Column.
inherit_cache: bool | None = True¶ 指示此
HasCacheKey
实例是否应使用其直接超类使用的缓存键生成方案。此属性默认为
None
,表示构造尚未考虑其是否适合参与缓存;这在功能上等同于将值设置为False
,但也会发出警告。如果与对象对应的 SQL 不会根据此类的局部属性(而不是其超类)而更改,则可以在特定类上将此标志设置为
True
。另请参阅
为自定义构造启用缓存支持 - 关于为第三方或用户定义的 SQL 构造设置
HasCacheKey.inherit_cache
属性的通用指南。
-
method
sqlalchemy.schema.Column.
is_(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.is_()
方法,源自ColumnOperators
实现
IS
操作符。通常,当与
None
值比较时,会自动生成IS
,它会解析为NULL
。但是,如果要在某些平台上与布尔值进行比较,则可能需要显式使用IS
。
-
method
sqlalchemy.schema.Column.
is_distinct_from(other: Any) → ColumnOperators¶ -
实现
IS DISTINCT FROM
操作符。在大多数平台上呈现 “a IS DISTINCT FROM b”;在某些平台(例如 SQLite)上可能呈现 “a IS NOT b”。
-
method
sqlalchemy.schema.Column.
is_not(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.is_not()
方法,源自ColumnOperators
实现
IS NOT
操作符。通常,当与
None
值比较时,会自动生成IS NOT
,它会解析为NULL
。但是,如果要在某些平台上与布尔值进行比较,则可能需要显式使用IS NOT
。在版本 1.4 中变更:
is_not()
操作符已从之前的版本中的isnot()
重命名。为了向后兼容,之前的名称仍然可用。
-
method
sqlalchemy.schema.Column.
is_not_distinct_from(other: Any) → ColumnOperators¶ -
实现
IS NOT DISTINCT FROM
操作符。在大多数平台上呈现 “a IS NOT DISTINCT FROM b”;在某些平台(例如 SQLite)上可能呈现 “a IS b”。
在版本 1.4 中变更:
is_not_distinct_from()
操作符已从之前的版本中的isnot_distinct_from()
重命名。为了向后兼容,之前的名称仍然可用。
-
method
sqlalchemy.schema.Column.
isnot(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.isnot()
方法,源自ColumnOperators
实现
IS NOT
操作符。通常,当与
None
值比较时,会自动生成IS NOT
,它会解析为NULL
。但是,如果要在某些平台上与布尔值进行比较,则可能需要显式使用IS NOT
。在版本 1.4 中变更:
is_not()
操作符已从之前的版本中的isnot()
重命名。为了向后兼容,之前的名称仍然可用。
-
method
sqlalchemy.schema.Column.
isnot_distinct_from(other: Any) → ColumnOperators¶ -
实现
IS NOT DISTINCT FROM
操作符。在大多数平台上呈现 “a IS NOT DISTINCT FROM b”;在某些平台(例如 SQLite)上可能呈现 “a IS b”。
在版本 1.4 中变更:
is_not_distinct_from()
操作符已从之前的版本中的isnot_distinct_from()
重命名。为了向后兼容,之前的名称仍然可用。
-
method
sqlalchemy.schema.Column.
istartswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ 继承自
ColumnOperators.istartswith()
方法,源自ColumnOperators
实现
istartswith
操作符,例如ColumnOperators.startswith()
的不区分大小写版本。生成一个 LIKE 表达式,用于测试字符串值的开头是否不区分大小写匹配
lower(column) LIKE lower(<other>) || '%'
例如:
stmt = select(sometable).where(sometable.c.column.istartswith("foobar"))
由于此操作符使用
LIKE
,因此出现在 <other> 表达式中的通配符"%"
和"_"
也将表现为通配符。对于文字字符串值,可以将ColumnOperators.istartswith.autoescape
标志设置为True
,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配,而不是作为通配符匹配。或者,ColumnOperators.istartswith.escape
参数将指定一个字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。这通常是一个纯字符串值,但也可是任意 SQL 表达式。 除非将
ColumnOperators.istartswith.autoescape
标志设置为 True,否则 LIKE 通配符%
和_
默认情况下不会被转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.istartswith("foo%bar", autoescape=True)
将呈现为
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.istartswith("foo/%bar", escape="^")
将呈现为
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '^'
此参数也可以与
ColumnOperators.istartswith.autoescape
结合使用somecolumn.istartswith("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
attribute
sqlalchemy.schema.Column.
key: str = None¶ 继承自
ColumnElement.key
属性,源自ColumnElement
“key”,在某些情况下,它在 Python 命名空间中引用此对象。
这通常指的是列的“key”,它存在于 selectable 的
.c
集合中,例如sometable.c["somekey"]
将返回一个Column
,其.key
为 “somekey”。
-
attribute
sqlalchemy.schema.Column.
kwargs¶ 继承自
DialectKWArgs.kwargs
属性,源自DialectKWArgs
-
method
sqlalchemy.schema.Column.
label(name: str | None) → Label[_T]¶ 继承自
ColumnElement.label()
方法,源自ColumnElement
生成列标签,即
<columnname> AS <name>
。这是
label()
函数的快捷方式。如果 ‘name’ 是
None
,则会生成一个匿名标签名。
-
method
sqlalchemy.schema.Column.
like(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.like()
方法,源自ColumnOperators
实现
like
操作符。在列上下文中,生成表达式
a LIKE other
例如:
stmt = select(sometable).where(sometable.c.column.like("%foobar%"))
-
method
sqlalchemy.schema.Column.
match(other: Any, **kwargs: Any) → ColumnOperators¶ 继承自
ColumnOperators.match()
方法,源自ColumnOperators
实现数据库特定的 ‘match’ 操作符。
ColumnOperators.match()
尝试解析为后端提供的类似 MATCH 的函数或操作符。例如包括PostgreSQL - 渲染
x @@ plainto_tsquery(y)
Changed in version 2.0:
plainto_tsquery()
现在用于 PostgreSQL 而不是to_tsquery()
;为了与其他形式兼容,请参阅 全文搜索。MySQL - 渲染
MATCH {(}x{)} AGAINST {(}y IN BOOLEAN MODE{)}
另请参阅
match
- MySQL 特定构造,具有附加功能。Oracle Database - 渲染
CONTAINS(x, y)
其他后端可能会提供特殊的实现。
没有任何特殊实现的后端将发出操作符 “MATCH”。例如,这与 SQLite 兼容。
-
method
sqlalchemy.schema.Column.
not_ilike(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.not_ilike()
方法,源自ColumnOperators
实现
NOT ILIKE
操作符。这等效于对
ColumnOperators.ilike()
使用否定,即~x.ilike(y)
。Changed in version 1.4:
not_ilike()
操作符在之前的版本中从notilike()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
not_in(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.not_in()
方法,源自ColumnOperators
实现
NOT IN
操作符。这等效于对
ColumnOperators.in_()
使用否定,即~x.in_(y)
。如果
other
是一个空序列,编译器将生成一个 “empty not in” 表达式。这默认为表达式 “1 = 1” 以在所有情况下产生 true。create_engine.empty_in_strategy
可用于更改此行为。Changed in version 1.4:
not_in()
操作符在之前的版本中从notin_()
重命名而来。之前的名称仍然可用以保持向后兼容性。Changed in version 1.2:
ColumnOperators.in_()
和ColumnOperators.not_in()
操作符现在默认为空 IN 序列生成 “静态” 表达式。
-
method
sqlalchemy.schema.Column.
not_like(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.not_like()
方法,源自ColumnOperators
实现
NOT LIKE
操作符。这等效于对
ColumnOperators.like()
使用否定,即~x.like(y)
。Changed in version 1.4:
not_like()
操作符在之前的版本中从notlike()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
notilike(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.notilike()
方法,源自ColumnOperators
实现
NOT ILIKE
操作符。这等效于对
ColumnOperators.ilike()
使用否定,即~x.ilike(y)
。Changed in version 1.4:
not_ilike()
操作符在之前的版本中从notilike()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
notin_(other: Any) → ColumnOperators¶ 继承自
ColumnOperators.notin_()
方法,源自ColumnOperators
实现
NOT IN
操作符。这等效于对
ColumnOperators.in_()
使用否定,即~x.in_(y)
。如果
other
是一个空序列,编译器将生成一个 “empty not in” 表达式。这默认为表达式 “1 = 1” 以在所有情况下产生 true。create_engine.empty_in_strategy
可用于更改此行为。Changed in version 1.4:
not_in()
操作符在之前的版本中从notin_()
重命名而来。之前的名称仍然可用以保持向后兼容性。Changed in version 1.2:
ColumnOperators.in_()
和ColumnOperators.not_in()
操作符现在默认为空 IN 序列生成 “静态” 表达式。
-
method
sqlalchemy.schema.Column.
notlike(other: Any, escape: str | None = None) → ColumnOperators¶ 继承自
ColumnOperators.notlike()
方法,源自ColumnOperators
实现
NOT LIKE
操作符。这等效于对
ColumnOperators.like()
使用否定,即~x.like(y)
。Changed in version 1.4:
not_like()
操作符在之前的版本中从notlike()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
nulls_first() → ColumnOperators¶ 继承自
ColumnOperators.nulls_first()
方法,源自ColumnOperators
生成针对父对象的
nulls_first()
子句。Changed in version 1.4:
nulls_first()
操作符在之前的版本中从nullsfirst()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
nulls_last() → ColumnOperators¶ 继承自
ColumnOperators.nulls_last()
方法,源自ColumnOperators
生成针对父对象的
nulls_last()
子句。Changed in version 1.4:
nulls_last()
操作符在之前的版本中从nullslast()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
nullsfirst() → ColumnOperators¶ 继承自
ColumnOperators.nullsfirst()
方法,源自ColumnOperators
生成针对父对象的
nulls_first()
子句。Changed in version 1.4:
nulls_first()
操作符在之前的版本中从nullsfirst()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
nullslast() → ColumnOperators¶ 继承自
ColumnOperators.nullslast()
方法,源自ColumnOperators
生成针对父对象的
nulls_last()
子句。Changed in version 1.4:
nulls_last()
操作符在之前的版本中从nullslast()
重命名而来。之前的名称仍然可用以保持向后兼容性。
-
method
sqlalchemy.schema.Column.
op(opstring: str, precedence: int = 0, is_comparison: bool = False, return_type: Type[TypeEngine[Any]] | TypeEngine[Any] | None = None, python_impl: Callable[..., Any] | None = None) → Callable[[Any], Operators]¶ 继承自
Operators.op()
方法,源自Operators
生成通用操作符函数。
例如:
somecolumn.op("*")(5)
生成
somecolumn * 5
此函数还可用于显式创建位运算符。例如
somecolumn.op("&")(0xFF)
是
somecolumn
中值的按位与。- 参数:
opstring¶ – 一个字符串,将作为中缀运算符输出在此元素和传递给生成函数的表达式之间。
precedence¶ –
数据库预期应用于 SQL 表达式中运算符的优先级。此整数值充当 SQL 编译器知道何时应在特定操作周围呈现显式括号的提示。当应用于另一个具有较高优先级的运算符时,较低的数字将导致表达式被括起来。默认值
0
低于除逗号 (,
) 和AS
运算符之外的所有运算符。值 100 将高于或等于所有运算符,而 -100 将低于或等于所有运算符。另请参阅
我正在使用 op() 生成自定义运算符,但我的括号没有正确显示 - 有关 SQLAlchemy SQL 编译器如何呈现括号的详细说明
is_comparison¶ –
遗留;如果为 True,则该运算符将被视为 “比较” 运算符,即评估为布尔值 true/false,如
==
、>
等。提供此标志是为了让 ORM 关系可以确定该运算符在自定义连接条件中使用时是比较运算符。使用
is_comparison
参数已被使用Operators.bool_op()
方法取代;这种更简洁的运算符会自动设置此参数,但也提供正确的 PEP 484 类型支持,因为返回的对象将表达 “boolean” 数据类型,即BinaryExpression[bool]
。return_type¶ –
TypeEngine
类或对象,它将强制此运算符生成的表达式的返回类型为该类型。默认情况下,指定Operators.op.is_comparison
的运算符将解析为Boolean
,而未指定的运算符将与左侧操作数的类型相同。python_impl¶ –
一个可选的 Python 函数,可以像此运算符在数据库服务器上运行时一样评估两个 Python 值。对于 Python 内 SQL 表达式评估函数(例如 ORM 混合属性)以及 ORM “评估器”(用于在多行更新或删除后匹配会话中的对象)非常有用。
例如:
>>> expr = column("x").op("+", python_impl=lambda a, b: a + b)("y")
上述表达式的运算符也适用于非 SQL 左侧和右侧对象
>>> expr.operator(5, 10) 15
New in version 2.0.
-
method
sqlalchemy.schema.Column.
operate(op: OperatorType, *other: Any, **kwargs: Any) → ColumnElement[Any]¶ 继承自
ColumnElement.operate()
方法,源自ColumnElement
对参数执行操作。
这是最低级别的操作,默认情况下引发
NotImplementedError
。在子类中重写此方法可以允许将通用行为应用于所有操作。例如,重写
ColumnOperators
以将func.lower()
应用于左侧和右侧class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
-
方法
sqlalchemy.schema.Column.
params(*optionaldict, **kwargs)¶ 继承自
Immutable.params()
方法,源自Immutable
返回一个副本,其中的
bindparam()
元素已被替换。返回此 ClauseElement 的副本,其中的
bindparam()
元素已替换为从给定字典中取出的值>>> clause = column("x") + bindparam("foo") >>> print(clause.compile().params) {'foo':None} >>> print(clause.params({"foo": 7}).compile().params) {'foo':7}
-
属性
sqlalchemy.schema.Column.
proxy_set: util.generic_fn_descriptor[FrozenSet[Any]]¶ 继承自
ColumnElement.proxy_set
属性,源自ColumnElement
我们正在代理的所有列的集合
从 2.0 版本开始,这显式地是未注解的列。之前实际上是未注解的列,但没有强制执行。注解的列基本上不应该放入集合中,如果可能的话,因为它们的哈希行为性能非常差。
-
方法
sqlalchemy.schema.Column.
references(column: Column[Any]) → bool¶ 如果此 Column 通过外键引用给定的列,则返回 True。
-
方法
sqlalchemy.schema.Column.
regexp_match(pattern: Any, flags: str | None = None) → ColumnOperators¶ -
实现数据库特定的“regexp match”操作符。
例如:
stmt = select(table.c.some_column).where( table.c.some_column.regexp_match("^(b|c)") )
ColumnOperators.regexp_match()
尝试解析为后端提供的类似 REGEXP 的函数或操作符,但是,可用的具体正则表达式语法和标志**并非后端无关**。示例包括
PostgreSQL - 当取反时渲染为
x ~ y
或x !~ y
。Oracle 数据库 - 渲染为
REGEXP_LIKE(x, y)
SQLite - 使用 SQLite 的
REGEXP
占位符操作符并调用 Python 的re.match()
内置函数。其他后端可能会提供特殊的实现。
没有任何特殊实现的后端将操作符作为 “REGEXP” 或 “NOT REGEXP” 发出。例如,这与 SQLite 和 MySQL 兼容。
正则表达式支持目前已在 Oracle 数据库、PostgreSQL、MySQL 和 MariaDB 中实现。SQLite 提供部分支持。第三方方言的支持可能会有所不同。
- 参数:
1.4 版本新增。
在 1.4.48 版本中更改:2.0.18 请注意,由于实现错误,“flags” 参数之前除了纯 Python 字符串外,还接受 SQL 表达式对象,例如列表达式。此实现无法正确地与缓存一起工作,并且已被删除;“flags” 参数应仅传递字符串,因为这些标志在 SQL 表达式中呈现为文字内联值。
-
方法
sqlalchemy.schema.Column.
regexp_replace(pattern: Any, replacement: Any, flags: str | None = None) → ColumnOperators¶ -
实现数据库特定的“regexp replace”操作符。
例如:
stmt = select( table.c.some_column.regexp_replace("b(..)", "XY", flags="g") )
ColumnOperators.regexp_replace()
尝试解析为后端提供的类似 REGEXP_REPLACE 的函数,该函数通常发出函数REGEXP_REPLACE()
。但是,可用的具体正则表达式语法和标志**并非后端无关**。正则表达式替换支持目前已在 Oracle 数据库、PostgreSQL、MySQL 8 或更高版本以及 MariaDB 中实现。第三方方言的支持可能会有所不同。
- 参数:
1.4 版本新增。
在 1.4.48 版本中更改:2.0.18 请注意,由于实现错误,“flags” 参数之前除了纯 Python 字符串外,还接受 SQL 表达式对象,例如列表达式。此实现无法正确地与缓存一起工作,并且已被删除;“flags” 参数应仅传递字符串,因为这些标志在 SQL 表达式中呈现为文字内联值。
-
方法
sqlalchemy.schema.Column.
reverse_operate(op: OperatorType, other: Any, **kwargs: Any) → ColumnElement[Any]¶ 继承自
ColumnElement.reverse_operate()
方法,源自ColumnElement
对参数执行反向操作。
用法与
operate()
相同。
-
方法
sqlalchemy.schema.Column.
self_group(against: OperatorType | None = None) → ColumnElement[Any]¶ 继承自
ColumnElement.self_group()
方法,源自ColumnElement
对此
ClauseElement
应用“分组”。子类会重写此方法以返回“分组”结构,即括号。特别是,当“二元”表达式放入更大的表达式中时,以及当
select()
结构放入另一个select()
的 FROM 子句中时,它用于为它们自身提供分组。(请注意,子查询通常应使用Select.alias()
方法创建,因为许多平台要求命名嵌套的 SELECT 语句)。当表达式组合在一起时,
self_group()
的应用是自动的 - 最终用户代码永远不需要直接使用此方法。请注意,SQLAlchemy 的子句构造考虑了运算符优先级 - 因此可能不需要括号,例如,在像x OR (y AND z)
这样的表达式中 - AND 的优先级高于 OR。ClauseElement 的基本
self_group()
方法只返回 self。
-
方法
sqlalchemy.schema.Column.
shares_lineage(othercolumn: ColumnElement[Any]) → bool¶ 继承自
ColumnElement.shares_lineage()
方法,源自ColumnElement
如果给定的
ColumnElement
与此ColumnElement
有共同的祖先,则返回 True。
-
方法
sqlalchemy.schema.Column.
startswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ 继承自
ColumnOperators.startswith()
方法,源自ColumnOperators
实现
startswith
操作符。生成一个 LIKE 表达式,该表达式针对字符串值的开头进行匹配测试
column LIKE <other> || '%'
例如:
stmt = select(sometable).where(sometable.c.column.startswith("foobar"))
由于该操作符使用 LIKE,因此 <other> 表达式中存在的通配符 “%” 和 “_” 也将表现得像通配符。对于文字字符串值,可以将
ColumnOperators.startswith.autoescape
标志设置为 True,以对字符串值中出现的这些字符应用转义,以便它们作为自身匹配而不是作为通配符匹配。或者,ColumnOperators.startswith.escape
参数将建立一个给定的字符作为转义字符,当目标表达式不是文字字符串时,这可能很有用。- 参数:
other¶ – 要比较的表达式。这通常是一个纯字符串值,但也可以是任意 SQL 表达式。除非
ColumnOperators.startswith.autoescape
标志设置为 True,否则 LIKE 通配符 % 和 _ 默认情况下不会被转义。autoescape¶ –
布尔值; 如果为 True,则在 LIKE 表达式中建立转义字符,然后将其应用于比较值(假定为文字字符串而不是 SQL 表达式)中所有出现的
"%"
、"_"
和转义字符本身。例如,表达式
somecolumn.startswith("foo%bar", autoescape=True)
将呈现为
somecolumn LIKE :param || '%' ESCAPE '/'
其中
:param
的值为"foo/%bar"
。escape¶ –
一个字符,当给定该字符时,将使用
ESCAPE
关键字呈现,以将该字符建立为转义字符。 然后可以将此字符放在%
和_
之前,以使其充当自身而不是通配符。例如,表达式
somecolumn.startswith("foo/%bar", escape="^")
将呈现为
somecolumn LIKE :param || '%' ESCAPE '^'
该参数也可以与
ColumnOperators.startswith.autoescape
结合使用somecolumn.startswith("foo%bar^bat", escape="^", autoescape=True)
在上面的示例中,给定的文字参数将在传递到数据库之前转换为
"foo^%bar^^bat"
。
-
属性
sqlalchemy.schema.Column.
timetuple: Literal[None] = None¶ 继承自
ColumnOperators.timetuple
属性,源自ColumnOperators
Hack,允许在 LHS 上比较 datetime 对象。
-
属性
sqlalchemy.schema.Column.
unique: bool | None¶ Column.unique
参数的值。不指示此
Column
是否实际上受唯一约束的约束;请使用Table.indexes
和Table.constraints
。
-
方法
sqlalchemy.schema.Column.
unique_params(*optionaldict, **kwargs)¶ 继承自
Immutable.unique_params()
方法,源自Immutable
返回一个副本,其中的
bindparam()
元素已被替换。与
ClauseElement.params()
相同的功能,除了向受影响的 bind 参数添加 unique=True,以便可以使用多个语句。
-
方法
- 类 sqlalchemy.schema.MetaData¶
Table
对象及其相关的模式构造的集合。保存
Table
对象的集合以及与Engine
或Connection
的可选绑定。如果已绑定,则集合中的Table
对象及其列可以参与隐式 SQL 执行。Table
对象本身存储在MetaData.tables
字典中。对于读取操作,
MetaData
是线程安全的对象。在单个MetaData
对象中显式或通过反射构造新表可能不是完全线程安全的。另请参阅
使用 MetaData 描述数据库 - 数据库元数据简介
类签名
类
sqlalchemy.schema.MetaData
(sqlalchemy.schema.HasSchemaAttr
)-
方法
sqlalchemy.schema.MetaData.
__init__(schema: str | None = None, quote_schema: bool | None = None, naming_convention: _NamingSchemaParameter | None = None, info: _InfoType | None = None) → None¶ 创建一个新的 MetaData 对象。
- 参数:
schema¶ –
用于与此
MetaData
关联的Table
、Sequence
以及可能的其他对象的默认 schema。默认为None
。quote_schema¶ – 为那些使用本地模式名称的
Table
、Sequence
和其他对象设置quote_schema
标志。info¶ – 可选的数据字典,将填充到此对象的
SchemaItem.info
属性中。naming_convention¶ –
一个字典,引用将为
Constraint
和Index
对象建立默认命名约定的值,用于那些未显式命名的对象。此字典的键可以是
约束或索引类,例如
UniqueConstraint
、ForeignKeyConstraint
类、Index
类已知约束类之一的字符串助记符;
"fk"
、"pk"
、"ix"
、"ck"
、"uq"
分别代表外键、主键、索引、检查和唯一约束。用户定义的“令牌”的字符串名称,可用于定义新的命名令牌。
与每个“约束类”或“约束助记符”键关联的值是字符串命名模板,例如
"uq_%(table_name)s_%(column_0_name)s"
,它描述了应如何组成名称。与用户定义的“令牌”键关联的值应为fn(constraint, table)
形式的可调用对象,它接受约束/索引对象和Table
作为参数,并返回字符串结果。内置名称如下,其中一些可能仅适用于某些类型的约束
%(table_name)s
- 与约束关联的Table
对象的名称。%(referred_table_name)s
- 与ForeignKeyConstraint
的引用目标关联的Table
对象的名称。%(column_0_name)s
- 约束内索引位置“0”处的Column
的名称。%(column_0N_name)s
- 约束内所有Column
对象的名称,按顺序连接,不带分隔符。%(column_0_N_name)s
- 约束内所有Column
对象的名称,按顺序连接,以下划线作为分隔符。%(column_0_label)s
、%(column_0N_label)s
、%(column_0_N_label)s
- 第零个Column
或所有Columns
的标签,用或不用下划线分隔%(column_0_key)s
、%(column_0N_key)s
、%(column_0_N_key)s
- 第零个Column
或所有Columns
的键,用或不用下划线分隔%(referred_column_0_name)s
、%(referred_column_0N_name)s
%(referred_column_0_N_name)s
、%(referred_column_0_key)s
、%(referred_column_0N_key)s
、 … 列令牌,用于呈现ForeignKeyConstraint
引用的列的名称/键/标签。%(constraint_name)s
- 指的是赋予约束的现有名称的特殊键。当此键存在时,Constraint
对象的现有名称将被替换为从使用此令牌的模板字符串组成的名称。当此令牌存在时,需要提前显式命名Constraint
。用户定义:任何其他令牌都可以通过将它与
fn(constraint, table)
可调用对象一起传递给 naming_convention 字典来实现。
1.3.0 版本新增: - 添加了新的
%(column_0N_name)s
、%(column_0_N_name)s
和相关令牌,用于生成给定约束引用的所有列的名称、键或标签的串联。另请参阅
配置约束命名约定 - 有关详细用法示例。
-
method
sqlalchemy.schema.MetaData.
clear() → None¶ 从此 MetaData 中清除所有 Table 对象。
-
method
sqlalchemy.schema.MetaData.
create_all(bind: _CreateDropBind, tables: _typing_Sequence[Table] | None = None, checkfirst: bool = True) → None¶ 创建此元数据中存储的所有表。
默认情况下为条件创建,不会尝试重新创建目标数据库中已存在的表。
- 参数:
bind¶ – 用于访问数据库的
Connection
或Engine
。tables¶ – 可选的
Table
对象列表,它是MetaData
中表总数的子集(其他表将被忽略)。checkfirst¶ – 默认为 True,对于目标数据库中已存在的表,不发出 CREATE 命令。
-
method
sqlalchemy.schema.MetaData.
drop_all(bind: _CreateDropBind, tables: _typing_Sequence[Table] | None = None, checkfirst: bool = True) → None¶ 删除此元数据中存储的所有表。
默认情况下为条件删除,不会尝试删除目标数据库中不存在的表。
- 参数:
bind¶ – 用于访问数据库的
Connection
或Engine
。tables¶ – 可选的
Table
对象列表,它是MetaData
中表总数的子集(其他表将被忽略)。checkfirst¶ – 默认为 True,仅对已确认存在于目标数据库中的表发出 DROP 命令。
-
method
sqlalchemy.schema.MetaData.
reflect(bind: Engine | Connection, schema: str | None = None, views: bool = False, only: _typing_Sequence[str] | Callable[[str, MetaData], bool] | None = None, extend_existing: bool = False, autoload_replace: bool = True, resolve_fks: bool = True, **dialect_kwargs: Any) → None¶ 从数据库加载所有可用的表定义。
自动在此
MetaData
中为数据库中可用但尚未在MetaData
中存在的任何表创建Table
条目。可以多次调用以获取最近添加到数据库的表,但是如果此MetaData
中的表在数据库中不再存在,则不会采取特殊操作。- 参数:
bind¶ – 用于访问数据库的
Connection
或Engine
。schema¶ – 可选,从备用模式查询和反射表。如果为 None,则使用与此
MetaData
关联的模式(如果有)。views¶ – 如果为 True,则也反射视图(物化视图和平铺视图)。
only¶ –
可选。仅加载可用命名表的子集。可以指定为名称序列或可调用对象。
如果提供名称序列,则仅反射这些表。如果请求的表不可用,则会引发错误。此
MetaData
中已存在的命名表将被忽略。如果提供可调用对象,它将用作布尔谓词来过滤潜在表名称的列表。将使用表名称和此
MetaData
实例作为位置参数调用可调用对象,并且对于要反射的任何表,应返回 true 值。extend_existing¶ – 作为
Table.extend_existing
传递给每个Table
。autoload_replace¶ – 作为
Table.autoload_replace
传递给每个Table
。resolve_fks¶ –
如果为 True,则反射链接到每个
Table
中的ForeignKey
对象的Table
对象。 对于MetaData.reflect()
,这具有反射相关表的效果,这些表可能未在要反射的表列表中,例如,如果引用的表位于不同的模式中,或者通过MetaData.reflect.only
参数省略。 如果为 False,则不会将ForeignKey
对象跟随到它们链接到的Table
中,但是如果相关表也是无论如何都将被反射的表列表的一部分,则在MetaData.reflect()
操作完成后,ForeignKey
对象仍将解析为其相关的Table
。 默认为 True。1.3.0 版本新增。
另请参阅
**dialect_kwargs¶ – 上面未提及的其他关键字参数是特定于方言的,并以
<dialectname>_<argname>
的形式传递。 有关记录的参数的详细信息,请参阅 方言 中有关各个方言的文档。
另请参阅
DDLEvents.column_reflect()
- 用于自定义反射列的事件。 通常用于使用TypeEngine.as_generic()
通用化类型使用数据库无关类型进行反射 - 描述了如何使用通用类型反射表。
-
method
sqlalchemy.schema.MetaData.
remove(table: Table) → None¶ 从此 MetaData 中删除给定的 Table 对象。
-
attribute
sqlalchemy.schema.MetaData.
sorted_tables¶ 返回
Table
对象的列表,按外键依赖关系排序。排序会将具有依赖关系的
Table
对象放在前面,在依赖项本身之前,表示可以创建它们的顺序。 要获得表的删除顺序,请使用 Python 内置函数reversed()
。警告
MetaData.sorted_tables
属性本身无法自动解决表之间的依赖循环,这些循环通常是由相互依赖的外键约束引起的。 当检测到这些循环时,这些表的外键将从排序中省略。 当发生这种情况时,会发出警告,这将在未来的版本中引发异常。 不属于循环的表仍将按依赖关系顺序返回。为了解决这些循环,可以将
ForeignKeyConstraint.use_alter
参数应用于那些创建循环的约束。 或者,sort_tables_and_constraints()
函数将在检测到循环时自动返回单独集合中的外键约束,以便可以将它们单独应用于模式。在 1.3.17 版本中变更: - 当
MetaData.sorted_tables
由于循环依赖关系而无法执行正确的排序时,会发出警告。 这将在未来的版本中成为异常。 此外,排序将继续按依赖关系顺序返回未参与循环的其他表,而以前并非如此。
-
attribute
sqlalchemy.schema.MetaData.
tables: util.FacadeDict[str, Table]¶ 一个
Table
对象的字典,键是它们的名称或“表键”。确切的键由
Table.key
属性确定;对于没有Table.schema
属性的表,这与Table.name
相同。对于具有模式的表,它通常采用schemaname.tablename
的形式。
-
方法
- class sqlalchemy.schema.SchemaConst¶
一个枚举。
类签名
class
sqlalchemy.schema.SchemaConst
(enum.Enum
)-
attribute
sqlalchemy.schema.SchemaConst.
BLANK_SCHEMA = 2¶
-
attribute
sqlalchemy.schema.SchemaConst.
NULL_UNSPECIFIED = 3¶ 符号,指示“nullable”关键字未传递给 Column。
这用于区分将
nullable=None
传递给Column
的用例,这在某些后端(如 SQL Server)上具有特殊含义。
-
attribute
sqlalchemy.schema.SchemaConst.
RETAIN_SCHEMA = 1¶ 符号,指示在某些情况下,当对象被复制以进行
Table.to_metadata()
操作时,Table
、Sequence
或ForeignKey
对象应保留其已有的模式名称。
-
attribute
- class sqlalchemy.schema.SchemaItem¶
用于定义数据库模式的项的基类。
成员
类签名
class
sqlalchemy.schema.SchemaItem
(sqlalchemy.sql.expression.SchemaEventTarget
,sqlalchemy.sql.visitors.Visitable
)-
attribute
sqlalchemy.schema.SchemaItem.
info¶ 与对象关联的信息字典,允许用户定义的数据与此
SchemaItem
关联。
-
attribute
- function sqlalchemy.schema.insert_sentinel(name: str | None = None, type_: _TypeEngineArgument[_T] | None = None, *, default: Any | None = None, omit_from_statements: bool = True) → Column[Any]¶
提供一个替代
Column
,它将充当专用的插入哨兵列,从而允许对没有符合条件的主键配置的表进行高效的批量插入和确定性的 RETURNING 排序。将此列添加到
Table
对象需要对应的数据库表实际存在此列。因此,如果将其添加到现有模型,则需要迁移现有数据库表(例如,使用 ALTER TABLE 或类似方法)以包含此列。有关如何使用此对象的背景信息,请参阅 配置哨兵列 部分,该部分是 INSERT 语句的“插入多个值”行为 部分的一部分。
默认情况下,返回的
Column
将是一个可为空的整数列,并使用仅在 “insertmanyvalues” 操作中使用的哨兵特定默认生成器。2.0.10 版本新增。
- class sqlalchemy.schema.Table¶
表示数据库中的表。
例如:
mytable = Table( "mytable", metadata, Column("mytable_id", Integer, primary_key=True), Column("value", String(50)), )
Table
对象基于其名称和给定MetaData
对象中的可选模式名称,构造其自身的唯一实例。第二次使用相同的名称和相同的MetaData
参数调用Table
构造函数将返回 *相同* 的Table
对象 - 通过这种方式,Table
构造函数充当注册函数。另请参阅
使用 MetaData 描述数据库 - 数据库元数据简介
成员
__init__(), add_is_dependent_on(), alias(), append_column(), append_constraint(), argument_for(), autoincrement_column, c, columns, compare(), compile(), constraints, corresponding_column(), create(), delete(), description, dialect_kwargs, dialect_options, drop(), entity_namespace, exported_columns, foreign_key_constraints, foreign_keys, get_children(), implicit_returning, indexes, info, inherit_cache, insert(), is_derived_from(), join(), key, kwargs, lateral(), outerjoin(), params(), primary_key, replace_selectable(), schema, select(), self_group(), table_valued(), tablesample(), to_metadata(), tometadata(), unique_params(), update()
类签名
class
sqlalchemy.schema.Table
(sqlalchemy.sql.base.DialectKWArgs
,sqlalchemy.schema.HasSchemaAttr
,sqlalchemy.sql.expression.TableClause
,sqlalchemy.inspection.Inspectable
)-
method
sqlalchemy.schema.Table.
__init__(name: str, metadata: MetaData, *args: SchemaItem, schema: str | Literal[SchemaConst.BLANK_SCHEMA] | None = None, quote: bool | None = None, quote_schema: bool | None = None, autoload_with: Engine | Connection | None = None, autoload_replace: bool = True, keep_existing: bool = False, extend_existing: bool = False, resolve_fks: bool = True, include_columns: Collection[str] | None = None, implicit_returning: bool = True, comment: str | None = None, info: Dict[Any, Any] | None = None, listeners: _typing_Sequence[Tuple[str, Callable[..., Any]]] | None = None, prefixes: _typing_Sequence[str] | None = None, _extend_on: Set[Table] | None = None, _no_init: bool = True, **kw: Any) → None¶ Table
的构造函数。- 参数:
name¶ –
此表在数据库中表示的名称。
表名以及
schema
参数的值构成一个键,该键在所属的MetaData
集合中唯一标识此Table
。使用相同的名称、元数据和模式名称再次调用Table
将返回相同的Table
对象。不包含大写字符的名称将被视为不区分大小写的名称,除非它们是保留字或包含特殊字符,否则不会被引用。 任何数量的大写字符的名称都被认为是区分大小写的,并将作为带引号的名称发送。
要为表名启用无条件引用,请为构造函数指定标志
quote=True
,或使用quoted_name
构造来指定名称。metadata¶ –
MetaData
对象,将包含此表。 元数据用作将此表与通过外键引用的其他表关联的点。 它也可以用于将此表与特定的Connection
或Engine
关联。*args¶ – 其他位置参数主要用于添加此表内包含的
Column
对象列表。 与 CREATE TABLE 语句的样式类似,此处可以添加其他SchemaItem
构造,包括PrimaryKeyConstraint
和ForeignKeyConstraint
。autoload_replace¶ –
默认为
True
;当结合Table.extend_existing
使用Table.autoload_with
时,指示应将已存在于Table
对象中的Column
对象替换为从自动加载过程中检索到的同名列。 当False
时,已存在于现有名称下的列将从反射过程中省略。请注意,此设置不影响在
Table
的调用中以编程方式指定的Column
对象,该调用也正在自动加载; 当Table.extend_existing
为True
时,这些Column
对象将始终替换同名的现有列。autoload_with¶ –
一个
Engine
或Connection
对象,或由inspect()
针对其中一个返回的Inspector
对象,此Table
对象将通过它进行反射。 当设置为非 None 值时,将针对给定的引擎或连接对此表执行自动加载过程。extend_existing¶ –
当
True
时,指示如果此Table
已经存在于给定的MetaData
中,则将构造函数中的其他参数应用于现有的Table
。如果未设置
Table.extend_existing
或Table.keep_existing
,并且新的Table
的给定名称引用了已存在于目标MetaData
集合中的Table
,并且此Table
指定了其他列或其他构造或标志来修改表的状态,则会引发错误。 这两个互斥标志的目的是指定当指定的Table
与现有的Table
匹配,但指定了其他构造时,应采取的操作。Table.extend_existing
还可以与Table.autoload_with
结合使用,以对数据库运行新的反射操作,即使目标MetaData
中已存在同名的Table
; 新反射的Column
对象和其他选项将添加到Table
的状态中,可能会覆盖同名的现有列和选项。与
Table.autoload_with
的情况一样,可以在同一Table
构造函数中指定Column
对象,这将优先。 在下面,现有表mytable
将使用从数据库反射的Column
对象以及给定的名为 “y” 的Column
对象进行扩充Table( "mytable", metadata, Column("y", Integer), extend_existing=True, autoload_with=engine, )
implicit_returning¶ –
默认为 True - 指示可以使用 RETURNING,通常由 ORM 使用,以便在支持 RETURNING 的后端上获取服务器生成的值,例如主键值和服务器端默认值。
在现代 SQLAlchemy 中,通常没有理由更改此设置,除了一些后端特定的情况(有关此类示例,请参阅 SQL Server 方言文档中的 触发器 )。
include_columns¶ – 字符串列表,指示要通过
autoload
操作加载的列的子集; 此列表中不存在的表列将不会在生成的Table
对象上表示。 默认为None
,表示应反射所有列。resolve_fks¶ –
是否在指定了
Table.autoload_with
时,反映与此表相关的Table
对象,这些对象通过ForeignKey
对象关联。默认为 True。设置为 False 将禁用在遇到ForeignKey
对象时对相关表的反射;这可以用于节省 SQL 调用,或避免访问不了相关表的问题。请注意,如果相关表已存在于MetaData
集合中,或稍后添加到其中,则与此Table
关联的ForeignKey
对象将正常解析为该表。1.3 版本新增。
info¶ – 可选的数据字典,将填充到此对象的
SchemaItem.info
属性中。keep_existing¶ –
当
True
时,表示如果此 Table 已经存在于给定的MetaData
中,则忽略构造函数中对现有Table
的进一步参数,并返回最初创建的Table
对象。这允许一个函数在首次调用时定义一个新的Table
,但在后续调用时将返回相同的Table
,而不会再次应用任何声明(特别是约束)。如果未设置
Table.extend_existing
或Table.keep_existing
,并且新的Table
的给定名称引用了已存在于目标MetaData
集合中的Table
,并且此Table
指定了其他列或其他构造或标志来修改表的状态,则会引发错误。 这两个互斥标志的目的是指定当指定的Table
与现有的Table
匹配,但指定了其他构造时,应采取的操作。listeners¶ –
形式为
(<eventname>, <fn>)
的元组列表,将在构造时传递给listen()
。这个listen()
的替代钩子允许在 “autoload” 过程开始之前,为此Table
建立特定的监听器函数。历史上,这主要用于DDLEvents.column_reflect()
事件,但请注意,此事件钩子现在可以直接与MetaData
对象关联def listen_for_reflect(table, column_info): "handle the column reflection event" # ... t = Table( "sometable", autoload_with=engine, listeners=[("column_reflect", listen_for_reflect)], )
must_exist¶ – 当
True
时,表示此 Table 必须已存在于给定的MetaData
集合中,否则会引发异常。prefixes¶ – 要在 CREATE TABLE 语句中的 CREATE 之后插入的字符串列表。它们将以空格分隔。
quote¶ –
强制对此表的名称启用或禁用引号,分别对应于
True
或False
。当保留其默认值None
时,将根据名称是否区分大小写(至少包含一个大写字符的标识符被视为区分大小写)或是否为保留字来引用列标识符。只有在强制引用 SQLAlchemy 方言未知的保留字时才需要此标志。注意
将此标志设置为
False
不会为表反射提供不区分大小写的行为;表反射将始终以区分大小写的方式搜索混合大小写的名称。不区分大小写的名称在 SQLAlchemy 中仅通过使用全小写字符声明名称来指定。quote_schema¶ – 与 ‘quote’ 相同,但应用于模式标识符。
schema¶ –
此表的模式名称,如果表驻留在引擎数据库连接的默认选定模式之外的模式中,则这是必需的。默认为
None
。如果此
Table
的拥有者MetaData
指定了自己的MetaData.schema
参数,则如果此处的 schema 参数设置为None
,则该模式名称将应用于此Table
。 要在Table
上设置空白模式名称,否则将使用在拥有者MetaData
上设置的模式,请指定特殊符号BLANK_SCHEMA
。模式名称的引用规则与
name
参数的规则相同,即为保留字或区分大小写的名称应用引号; 要为模式名称启用无条件引用,请为构造函数指定标志quote_schema=True
,或使用quoted_name
构造来指定名称。comment¶ –
可选字符串,将在表创建时呈现 SQL 注释。
1.2 版本新增: 添加了
Table.comment
参数到Table
。**kw¶ – 上面未提及的其他关键字参数是方言特定的,并以
<dialectname>_<argname>
的形式传递。 有关已记录参数的详细信息,请参阅有关 方言 中各个方言的文档。
-
method
sqlalchemy.schema.Table.
add_is_dependent_on(table: Table) → None¶ 为此 Table 添加一个“依赖项”。
这是另一个 Table 对象,它必须在此表之前创建,或在此表之后删除。
通常,表之间的依赖关系通过 ForeignKey 对象确定。但是,对于在外键之外创建依赖关系的其他情况(规则、继承),此方法可以手动建立此类链接。
-
method
sqlalchemy.schema.Table.
alias(name: str | None = None, flat: bool = False) → NamedFromClause¶ 继承自
FromClause.alias()
方法,属于FromClause
返回此
FromClause
的别名。例如:
a2 = some_table.alias("a2")
上面的代码创建了一个
Alias
对象,该对象可以在任何 SELECT 语句中用作 FROM 子句。
-
method
sqlalchemy.schema.Table.
append_column(column: ColumnClause[Any], replace_existing: bool = False) → None¶ -
新添加的
Column
的 “key”,即其.key
属性的值,随后将在该Table
的.c
集合中可用,并且列定义将包含在此Table
构造生成的任何 CREATE TABLE、SELECT、UPDATE 等语句中。请注意,这不会更改表中在任何底层数据库中的定义,假设该表已在数据库中创建。关系数据库支持使用 SQL ALTER 命令向现有表添加列,对于已存在的表中不包含新添加的列的情况,需要发出该命令。
- 参数:
replace_existing¶ –
当
True
时,允许替换现有列。当False
时(默认值),如果已存在具有相同.key
的列,则会引发警告。sqlalchemy 的未来版本将改为引发警告。1.4.0 版本新增。
-
method
sqlalchemy.schema.Table.
append_constraint(constraint: Index | Constraint) → None¶ 将
Constraint
追加到此Table
。这会使约束包含在任何未来的 CREATE TABLE 语句中,前提是特定的 DDL 创建事件尚未与给定的
Constraint
对象关联。请注意,对于数据库中已存在的表,这不会自动在关系数据库中生成约束。 要向现有关系数据库表添加约束,必须使用 SQL ALTER 命令。 SQLAlchemy 还提供了
AddConstraint
构造,当作为可执行子句调用时,可以生成此 SQL。
-
classmethod
sqlalchemy.schema.Table.
argument_for(dialect_name, argument_name, default)¶ 继承自
DialectKWArgs.argument_for()
方法,来自DialectKWArgs
为此类添加一种新的特定于方言的关键字参数。
例如:
Index.argument_for("mydialect", "length", None) some_index = Index("a", "b", mydialect_length=5)
DialectKWArgs.argument_for()
方法是一种为DefaultDialect.construct_arguments
字典添加额外参数的按参数方式。此字典提供了各种模式级别构造代表方言接受的参数名称列表。新方言通常应一次性将此字典指定为方言类的数据成员。临时添加参数名称的用例通常用于最终用户代码,这些代码也使用自定义编译方案来使用其他参数。
- 参数:
dialect_name¶ – 方言的名称。 方言必须是可定位的,否则会引发
NoSuchModuleError
。 方言还必须包含现有的DefaultDialect.construct_arguments
集合,表明它参与关键字参数验证和默认系统,否则会引发ArgumentError
。 如果方言不包含此集合,则可以代表此方言指定任何关键字参数。 SQLAlchemy 中打包的所有方言都包含此集合,但是对于第三方方言,支持可能会有所不同。argument_name¶ – 参数的名称。
default¶ – 参数的默认值。
-
attribute
sqlalchemy.schema.Table.
autoincrement_column¶ 返回当前表示 “自动递增” 列的
Column
对象(如果有),否则返回 None。这基于
Column
的规则,如Column.autoincrement
参数所定义,通常指的是单个整数列主键约束中不受外键约束的列。 如果表没有这样的主键约束,则没有 “自动递增” 列。 一个Table
只能有一个列定义为 “自动递增” 列。2.0.4 版本新增。
另请参阅
-
attribute
sqlalchemy.schema.Table.
c¶ 继承自
FromClause.c
属性,属于FromClause
是
FromClause.columns
的同义词- 返回:
-
attribute
sqlalchemy.schema.Table.
columns¶ 继承自
FromClause.columns
属性,属于FromClause
由此
FromClause
维护的ColumnElement
对象的基于名称的集合。columns
或c
集合是使用表绑定或其他 selectable 绑定列构造 SQL 表达式的入口点select(mytable).where(mytable.c.somecolumn == 5)
- 返回:
一个
ColumnCollection
对象。
-
method
sqlalchemy.schema.Table.
compare(other: ClauseElement, **kw: Any) → bool¶ 继承自
ClauseElement.compare()
方法,来自ClauseElement
将此
ClauseElement
与给定的ClauseElement
进行比较。子类应覆盖默认行为,默认行为是直接标识比较。
**kw 是子类
compare()
方法使用的参数,可用于修改比较的标准(请参阅ColumnElement
)。
-
method
sqlalchemy.schema.Table.
compile(bind: _HasDialect | None = None, dialect: Dialect | None = None, **kw: Any) → Compiled¶ 继承自
CompilerElement.compile()
方法,源自CompilerElement
编译此 SQL 表达式。
返回值是一个
Compiled
对象。在返回的值上调用str()
或unicode()
将产生结果的字符串表示形式。Compiled
对象还可以使用params
访问器返回绑定参数名称和值的字典。- 参数:
bind¶ – 一个
Connection
或Engine
,它可以提供一个Dialect
,以便生成一个Compiled
对象。 如果省略bind
和dialect
参数,则使用默认的 SQL 编译器。column_keys¶ – 用于 INSERT 和 UPDATE 语句,应存在于已编译语句的 VALUES 子句中的列名称列表。 如果为
None
,则呈现目标表对象中的所有列。dialect¶ – 一个
Dialect
实例,它可以生成一个Compiled
对象。 此参数优先于bind
参数。compile_kwargs¶ –
将传递给所有 “visit” 方法中编译器的可选附加参数字典。 这允许任何自定义标志传递给自定义编译构造,例如。 它也用于传递
literal_binds
标志的情况from sqlalchemy.sql import table, column, select t = table("t", column("x")) s = select(t).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))
-
attribute
sqlalchemy.schema.Table.
constraints: Set[Constraint]¶ 与此
Table
关联的所有Constraint
对象的集合。包括
PrimaryKeyConstraint
,ForeignKeyConstraint
,UniqueConstraint
,CheckConstraint
。 单独的集合Table.foreign_key_constraints
指的是所有ForeignKeyConstraint
对象的集合,而Table.primary_key
属性指的是与Table
关联的单个PrimaryKeyConstraint
。
-
method
sqlalchemy.schema.Table.
corresponding_column(column: KeyedColumnElement[Any], require_embedded: bool = False) → KeyedColumnElement[Any] | None¶ 继承自
Selectable.corresponding_column()
方法,属于Selectable
给定一个
ColumnElement
,从此Selectable
的Selectable.exported_columns
集合中返回导出的ColumnElement
对象,该对象通过一个共同的祖先列与原始ColumnElement
相对应。- 参数:
column¶ – 要匹配的目标
ColumnElement
。require_embedded¶ – 仅当给定的
ColumnElement
实际存在于此Selectable
的子元素中时,才返回给定ColumnElement
的对应列。通常,如果列仅与此Selectable
的导出列之一共享一个共同的祖先,则该列将匹配。
另请参阅
-
method
sqlalchemy.schema.Table.
create(bind: _CreateDropBind, checkfirst: bool = False) → None¶ 为此
Table
发出一个CREATE
语句,使用给定的Connection
或Engine
进行连接。另请参阅
-
method
sqlalchemy.schema.Table.
delete() → Delete¶ 继承自
TableClause.delete()
方法,源自TableClause
针对此
TableClause
生成一个delete()
构造。例如:
table.delete().where(table.c.id == 7)
有关参数和用法信息,请参阅
delete()
。
-
attribute
sqlalchemy.schema.Table.
description¶ 继承自
TableClause.description
属性,源自TableClause
-
attribute
sqlalchemy.schema.Table.
dialect_kwargs¶ 继承自
DialectKWArgs.dialect_kwargs
属性,源自DialectKWArgs
指定为此构造的特定于方言的选项的关键字参数集合。
参数以其原始的
<dialect>_<kwarg>
格式存在于此处。 仅包含实际传递的参数; 与DialectKWArgs.dialect_options
集合不同,后者包含此方言已知的所有选项,包括默认值。该集合也是可写的; 接受
<dialect>_<kwarg>
形式的键,其中值将组合到选项列表中。另请参阅
DialectKWArgs.dialect_options
- 嵌套字典形式
-
attribute
sqlalchemy.schema.Table.
dialect_options¶ 继承自
DialectKWArgs.dialect_options
属性,源自DialectKWArgs
指定为此构造的特定于方言的选项的关键字参数集合。
这是一个两级嵌套注册表,键入为
<dialect_name>
和<argument_name>
。 例如,postgresql_where
参数可以定位为arg = my_object.dialect_options["postgresql"]["where"]
0.9.2 版本中的新功能。
另请参阅
DialectKWArgs.dialect_kwargs
- 平面字典形式
-
method
sqlalchemy.schema.Table.
drop(bind: _CreateDropBind, checkfirst: bool = False) → None¶ 为此
Table
发出一个DROP
语句,使用给定的Connection
或Engine
进行连接。另请参阅
-
attribute
sqlalchemy.schema.Table.
entity_namespace¶ 继承自
FromClause.entity_namespace
属性,源自FromClause
返回用于 SQL 表达式中基于名称的访问的命名空间。
这是用于解析 “filter_by()” 类型表达式的命名空间,例如
stmt.filter_by(address="some address")
它默认为 `
.c
` 集合,但内部可以使用 “entity_namespace” 注解来覆盖它,以提供替代结果。
-
attribute
sqlalchemy.schema.Table.
exported_columns¶ 继承自
FromClause.exported_columns
属性,源自FromClause
一个
ColumnCollection
,表示此Selectable
的“导出”列。对于
FromClause
对象,“导出”列与FromClause.columns
集合同义。1.4 版本新增。
-
attribute
sqlalchemy.schema.Table.
foreign_key_constraints¶ 此
Table
引用的ForeignKeyConstraint
对象。此列表由当前关联的
ForeignKey
对象集合生成。
-
attribute
sqlalchemy.schema.Table.
foreign_keys¶ 继承自
FromClause.foreign_keys
属性,源自FromClause
返回此 FromClause 引用的
ForeignKey
标记对象集合。每个
ForeignKey
都是Table
范围的ForeignKeyConstraint
的成员。
-
method
sqlalchemy.schema.Table.
get_children(*, omit_attrs: Tuple[str, ...] = (), **kw: Any) → Iterable[HasTraverseInternals]¶ 继承自
HasTraverseInternals.get_children()
方法,源自HasTraverseInternals
返回此
HasTraverseInternals
的直接子HasTraverseInternals
元素。这用于访问遍历。
**kw 可能包含更改返回集合的标志,例如,为了减少较大的遍历,返回项目子集,或者从不同的上下文返回子项(例如,模式级别集合而不是子句级别)。
-
attribute
sqlalchemy.schema.Table.
implicit_returning = False¶ 继承自
TableClause.implicit_returning
属性,源自TableClause
TableClause
不支持拥有主键或列级默认值,因此隐式返回不适用。
-
attribute
sqlalchemy.schema.Table.
indexes: Set[Index]¶
-
attribute
sqlalchemy.schema.Table.
info¶ 继承自
SchemaItem.info
属性,源自SchemaItem
与对象关联的信息字典,允许用户定义的数据与此
SchemaItem
关联。
-
attribute
sqlalchemy.schema.Table.
inherit_cache: bool | None = None¶ 继承自
HasCacheKey.inherit_cache
属性,源自HasCacheKey
指示此
HasCacheKey
实例是否应使用其直接超类使用的缓存键生成方案。此属性默认为
None
,表示构造尚未考虑其是否适合参与缓存;这在功能上等同于将值设置为False
,但也会发出警告。如果与对象对应的 SQL 不会根据此类的局部属性(而不是其超类)而更改,则可以在特定类上将此标志设置为
True
。另请参阅
为自定义构造启用缓存支持 - 关于为第三方或用户定义的 SQL 构造设置
HasCacheKey.inherit_cache
属性的通用指南。
-
method
sqlalchemy.schema.Table.
insert() → Insert¶ 继承自
TableClause.insert()
方法,源自TableClause
针对此
TableClause
生成一个Insert
构造。例如:
table.insert().values(name="foo")
有关参数和用法信息,请参阅
insert()
。
-
method
sqlalchemy.schema.Table.
is_derived_from(fromclause: FromClause | None) → bool¶ 继承自
FromClause.is_derived_from()
方法,源自FromClause
如果此
FromClause
‘派生自’ 给定的FromClause
`,则返回 `True
`。一个例子是 Table 的别名派生自该 Table。
-
method
sqlalchemy.schema.Table.
join(right: _FromClauseArgument, onclause: _ColumnExpressionArgument[bool] | None = None, isouter: bool = False, full: bool = False) → Join¶ 继承自
FromClause.join()
方法,源自FromClause
从此
FromClause
返回一个到另一个FromClause
的Join
。例如:
from sqlalchemy import join j = user_table.join( address_table, user_table.c.id == address_table.c.user_id ) stmt = select(user_table).select_from(j)
将发出类似于以下的 SQL
SELECT user.id, user.name FROM user JOIN address ON user.id = address.user_id
- 参数:
right¶ – 连接的右侧;这是任何
FromClause
对象,例如Table
对象,也可能是可选择兼容的对象,例如 ORM 映射的类。onclause¶ – 表示连接的 ON 子句的 SQL 表达式。如果保留为
None
`,则FromClause.join()
将尝试基于外键关系连接两个表。isouter¶ – 如果为 True,则渲染 LEFT OUTER JOIN,而不是 JOIN。
full¶ – 如果为 True,则渲染 FULL OUTER JOIN,而不是 LEFT OUTER JOIN。暗示了
FromClause.join.isouter
。
-
attribute
sqlalchemy.schema.Table.
key¶ 返回此
Table
的 ‘key’。此值用作
MetaData.tables
集合中的字典键。对于没有设置Table.schema
的表,它通常与Table.name
相同;否则,它通常采用 `schemaname.tablename
` 的形式。
-
attribute
sqlalchemy.schema.Table.
kwargs¶ 继承自
DialectKWArgs.kwargs
属性,源自DialectKWArgs
-
method
sqlalchemy.schema.Table.
lateral(name: str | None = None) → LateralFromClause¶ 继承自
Selectable.lateral()
方法,源自Selectable
返回此
Selectable
的 LATERAL 别名。返回值是由顶层
lateral()
函数提供的Lateral
构造。另请参阅
LATERAL correlation - 用法概述。
-
method
sqlalchemy.schema.Table.
outerjoin(right: _FromClauseArgument, onclause: _ColumnExpressionArgument[bool] | None = None, full: bool = False) → Join¶ 继承自
FromClause.outerjoin()
方法,源自FromClause
返回一个
Join
,从当前的FromClause
到另一个FromClause
,并将 “isouter” 标志设置为 True。例如:
from sqlalchemy import outerjoin j = user_table.outerjoin( address_table, user_table.c.id == address_table.c.user_id )
以上等同于:
j = user_table.join( address_table, user_table.c.id == address_table.c.user_id, isouter=True )
- 参数:
right¶ – join 的右侧;可以是任何
FromClause
对象,例如Table
对象,也可以是兼容 selectable 的对象,例如 ORM 映射的类。onclause¶ – 一个 SQL 表达式,表示 join 的 ON 子句。如果保留为
None
,FromClause.join()
将尝试基于外键关系连接两个表。full¶ – 如果为 True,则渲染 FULL OUTER JOIN,而不是 LEFT OUTER JOIN。
-
method
sqlalchemy.schema.Table.
params(*optionaldict, **kwargs)¶ 继承自
Immutable.params()
方法,源自Immutable
返回一个副本,其中的
bindparam()
元素已被替换。返回此 ClauseElement 的副本,其中的
bindparam()
元素已替换为从给定字典中取出的值>>> clause = column("x") + bindparam("foo") >>> print(clause.compile().params) {'foo':None} >>> print(clause.params({"foo": 7}).compile().params) {'foo':7}
-
attribute
sqlalchemy.schema.Table.
primary_key¶ 继承自
FromClause.primary_key
的 attributeFromClause
返回
Column
对象的迭代集合,这些对象构成了此_selectable.FromClause
的主键。对于
Table
对象,此集合由PrimaryKeyConstraint
表示,后者本身是Column
对象的迭代集合。
-
method
sqlalchemy.schema.Table.
replace_selectable(old: FromClause, alias: Alias) → Self¶ 继承自
Selectable.replace_selectable()
的 methodSelectable
将所有出现的
FromClause
‘old’ 替换为给定的Alias
对象,并返回此FromClause
的副本。Deprecated since version 1.4:
Selectable.replace_selectable()
方法已弃用,并将在未来的版本中移除。类似的功能可通过 sqlalchemy.sql.visitors 模块使用。
-
attribute
sqlalchemy.schema.Table.
schema: str | None = None¶ 继承自
FromClause.schema
的 attributeFromClause
为此
FromClause
定义 ‘schema’ 属性。对于大多数对象,这通常为
None
,但Table
对象除外,在Table.schema
参数中获取其值。
-
method
sqlalchemy.schema.Table.
select() → Select¶ 继承自
FromClause.select()
的 methodFromClause
返回此
FromClause
的 SELECT。例如:
stmt = some_table.select().where(some_table.c.id == 5)
另请参阅
select()
- 通用方法,允许使用任意列列表。
-
method
sqlalchemy.schema.Table.
self_group(against: OperatorType | None = None) → ClauseElement¶ 继承自
ClauseElement.self_group()
的 methodClauseElement
对此
ClauseElement
应用“分组”。子类会重写此方法以返回“分组”结构,即括号。特别是,当“二元”表达式放入更大的表达式中时,以及当
select()
结构放入另一个select()
的 FROM 子句中时,它用于为它们自身提供分组。(请注意,子查询通常应使用Select.alias()
方法创建,因为许多平台要求命名嵌套的 SELECT 语句)。当表达式组合在一起时,
self_group()
的应用是自动的 - 最终用户代码永远不需要直接使用此方法。请注意,SQLAlchemy 的子句构造考虑了运算符优先级 - 因此,例如,在x OR (y AND z)
这样的表达式中,可能不需要括号 - AND 的优先级高于 OR。self_group()
的基本方法ClauseElement
只返回 self。
-
method
sqlalchemy.schema.Table.
table_valued() → TableValuedColumn[Any]¶ 继承自
NamedFromClause.table_valued()
的 methodNamedFromClause
为此
FromClause
返回TableValuedColumn
对象。TableValuedColumn
是一个ColumnElement
,表示表中的完整行。对此构造的支持取决于后端,并且 PostgreSQL、Oracle Database 和 SQL Server 等后端以各种形式支持它。例如:
>>> from sqlalchemy import select, column, func, table >>> a = table("a", column("id"), column("x"), column("y")) >>> stmt = select(func.row_to_json(a.table_valued())) >>> print(stmt)
SELECT row_to_json(a) AS row_to_json_1 FROM aNew in version 1.4.0b2.
-
method
sqlalchemy.schema.Table.
tablesample(sampling: float | Function[Any], name: str | None = None, seed: roles.ExpressionElementRole[Any] | None = None) → TableSample¶ 继承自
FromClause.tablesample()
的 methodFromClause
返回此
FromClause
的 TABLESAMPLE 别名。返回值是由顶层
tablesample()
函数提供的TableSample
构造。另请参阅
tablesample()
- 使用指南和参数
-
method
sqlalchemy.schema.Table.
to_metadata(metadata: MetaData, schema: str | Literal[SchemaConst.RETAIN_SCHEMA] = SchemaConst.RETAIN_SCHEMA, referred_schema_fn: Callable[[Table, str | None, ForeignKeyConstraint, str | None], str | None] | None = None, name: str | None = None) → Table¶ 返回与不同
MetaData
关联的此Table
的副本。例如:
m1 = MetaData() user = Table("user", m1, Column("id", Integer, primary_key=True)) m2 = MetaData() user_copy = user.to_metadata(m2)
Changed in version 1.4:
Table.to_metadata()
函数已从Table.tometadata()
重命名。- 参数:
schema¶ –
可选的字符串名称,指示目标 schema。默认为特殊符号
RETAIN_SCHEMA
,表示新的Table
中不应更改 schema 名称。如果设置为字符串名称,则新的Table
将以此新名称作为.schema
。如果设置为None
,则 schema 将设置为目标MetaData
上设置的 schema,通常也为None
,除非显式设置m2 = MetaData(schema="newschema") # user_copy_one will have "newschema" as the schema name user_copy_one = user.to_metadata(m2, schema=None) m3 = MetaData() # schema defaults to None # user_copy_two will have None as the schema name user_copy_two = user.to_metadata(m3, schema=None)
referred_schema_fn¶ –
可选的可调用对象,可以提供该对象以提供应分配给
ForeignKeyConstraint
的引用表的 schema 名称。可调用对象接受此父Table
、我们要更改的目标 schema、ForeignKeyConstraint
对象以及该约束的现有“目标 schema”。该函数应返回应应用的字符串 schema 名称。要将 schema 重置为“none”,请返回符号BLANK_SCHEMA
。要不进行任何更改,请返回None
或RETAIN_SCHEMA
。Changed in version 1.4.33:
referred_schema_fn
函数可以返回BLANK_SCHEMA
或RETAIN_SCHEMA
符号。例如:
def referred_schema_fn(table, to_schema, constraint, referred_schema): if referred_schema == "base_tables": return referred_schema else: return to_schema new_table = table.to_metadata( m2, schema="alt_schema", referred_schema_fn=referred_schema_fn )
name¶ – 可选的字符串名称,指示目标表名称。如果未指定或为 None,则保留表名称。这允许将
Table
复制到同一个MetaData
目标,并使用新名称。
-
method
sqlalchemy.schema.Table.
tometadata(metadata: MetaData, schema: str | Literal[SchemaConst.RETAIN_SCHEMA] = SchemaConst.RETAIN_SCHEMA, referred_schema_fn: Callable[[Table, str | None, ForeignKeyConstraint, str | None], str | None] | None = None, name: str | None = None) → Table¶ 返回与不同
MetaData
关联的此Table
的副本。Deprecated since version 1.4:
Table.tometadata()
已重命名为Table.to_metadata()
有关完整描述,请参阅
Table.to_metadata()
。
-
method
sqlalchemy.schema.Table.
unique_params(*optionaldict, **kwargs)¶ 继承自
Immutable.unique_params()
方法,源自Immutable
返回一个副本,其中的
bindparam()
元素已被替换。与
ClauseElement.params()
相同的功能,除了向受影响的 bind 参数添加 unique=True,以便可以使用多个语句。
-
method
sqlalchemy.schema.Table.
update() → Update¶ 继承自
TableClause.update()
的 methodTableClause
针对此
TableClause
生成一个update()
构造。例如:
table.update().where(table.c.id == 7).values(name="foo")
有关参数和用法信息,请参阅
update()
。
-
method
flambé! the dragon and The Alchemist image designs created and generously donated by Rotem Yaari.
Created using Sphinx 7.2.6. Documentation last generated: Tue 11 Mar 2025 02:40:17 PM EDT