本节讨论基本的Table
,Column
和MetaData
对象。
元数据实体的集合存储在一个名为MetaData
的对象中:
from sqlalchemy import *
metadata = MetaData()
MetaData
is a container object that keeps together many different features of a database (or multiple databases) being described.
要表示表,请使用Table
类。它的两个主要参数是表名,然后是它将与之关联的MetaData
对象。其余的位置参数大多是描述每列的Column
对象:
user = Table('user', metadata,
Column('user_id', Integer, primary_key=True),
Column('user_name', String(16), nullable=False),
Column('email_address', String(60)),
Column('password', String(20), nullable=False)
)
以上描述了一个名为user
的表格,其中包含四列。该表的主键由user_id
列组成。多列可以分配primary_key=True
标志,表示多列主键,称为复合主键。
还要注意,每列使用对应于泛型类型的对象来描述它的数据类型,比如Integer
和String
。SQLAlchemy具有数十种不同级别的特异性以及创建自定义类型的能力。关于类型系统的文档可以在Column and Data Types中找到。
The MetaData
object contains all of the schema constructs we’ve associated with it. 它支持访问这些表对象的几种方法,例如按照外键依赖的顺序返回每个Table
对象列表的sorted_tables
访问器(也就是说,每个表在它引用的所有表之前):
>>> for t in metadata.sorted_tables:
... print(t.name)
user
user_preference
invoice
invoice_item
在大多数情况下,单个Table
对象已被显式声明,并且这些对象通常作为应用程序中的模块级变量直接访问。一旦定义了Table
,它就有一整套访问器,允许检查其属性。给定以下Table
定义:
employees = Table('employees', metadata,
Column('employee_id', Integer, primary_key=True),
Column('employee_name', String(60), nullable=False),
Column('employee_dept', Integer, ForeignKey("departments.department_id"))
)
请注意此表中使用的ForeignKey
对象 - 此构造定义了对远程表的引用,并在Defining Foreign Keys中进行了完整描述。访问关于此表的信息的方法包括:
# access the column "EMPLOYEE_ID":
employees.columns.employee_id
# or just
employees.c.employee_id
# via string
employees.c['employee_id']
# 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 the table's bound Engine or Connection, if its MetaData is bound:
employees.bind
# 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
Once you’ve defined some Table
objects, assuming you’re working with a brand new database one thing you might want to do is issue CREATE statements for those tables and their related constructs (as an aside, it’s also quite possible that you don’t want to do this, if you already have some preferred methodology such as tools included with your database or an existing scripting system - if that’s the case, feel free to skip this section - SQLAlchemy has no requirement that it be used to create your tables).
发布CREATE的常用方法是在MetaData
对象上使用create_all()
。这种方法将发出查询,首先检查每个单独表的存在,如果未找到,将发出CREATE语句:
engine = create_engine('sqlite:///:memory:') metadata = MetaData() user = Table('user', metadata, Column('user_id', Integer, primary_key=True), Column('user_name', String(16), nullable=False), Column('email_address', String(60), key='email'), Column('password', String(20), nullable=False) ) user_prefs = Table('user_prefs', metadata, 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)) ) sqlmetadata.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), password VARCHAR(20) 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()
creates foreign key constraints between tables usually inline with the table definition itself, and for this reason it also generates the tables in order of their dependency. 有些选项可以改变这种行为,例如使用ALTER TABLE
。
使用drop_all()
方法类似地实现删除所有表。这个方法与create_all()
完全相反 - 首先检查每个表的存在,并且按照与依赖性相反的顺序删除表。
可以通过Table
的create()
和drop()
方法创建和删除单个表。这些方法默认发出CREATE或DROP,而不管表是否存在:
engine = create_engine('sqlite:///:memory:')
meta = MetaData()
employees = Table('employees', meta,
Column('employee_id', Integer, primary_key=True),
Column('employee_name', String(60), nullable=False, key='name'),
Column('employee_dept', Integer, ForeignKey("departments.department_id"))
)
sqlemployees.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()
方法:
sqlemployees.drop(engine)
DROP TABLE employees
{}
要启用“首先检查表存在”逻辑,请将checkfirst=True
参数添加到create()
或drop()
:
employees.create(engine, checkfirst=True)
employees.drop(engine, checkfirst=False)
尽管SQLAlchemy直接支持为模式构造发出CREATE和DROP语句,但通常通过ALTER语句以及其他特定于数据库的构造来更改这些构造的能力超出了SQLAlchemy本身的范围。虽然很容易通过传递字符串到Connection.execute()
或通过使用DDL
构造来手动发出ALTER语句和类似事件,但这是常见的做法使用模式迁移工具自动维护与应用程序代码相关的数据库模式。
有两种可用于SQLAlchemy的主要迁移工具:
一些数据库支持多个模式的概念。一个Table
可以通过指定schema
关键字参数来引用:
financial_info = Table('financial_info', meta,
Column('id', Integer, primary_key=True),
Column('value', String(100), nullable=False),
schema='remote_banks'
)
在MetaData
集合中,此表将由financial_info
和remote_banks
的组合标识。如果另一个名为financial_info
的表在没有remote_banks
模式的情况下被引用,它将引用另一个Table
。ForeignKey
objects can specify references to columns in this table using the form remote_banks.financial_info.id
.
schema
参数应该用于任何所需的名称限定符,包括Oracle的“所有者”属性和类似名称。它也可以容纳更长方案的虚线名称:
schema="dbo.scott"
Table
支持特定于数据库的选项。例如,MySQL有不同的表后端类型,包括“MyISAM”和“InnoDB”。这可以用Table
用mysql_engine
来表示:
addresses = Table('engine_email_addresses', meta,
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'
)
其他后端也可以支持表级别的选项 - 这些将在每个方言的单个文档部分进行描述。
sqlalchemy.schema。 T0> BLANK_SCHEMA T1> ¶ T2>
Symbol indicating that a Table
or Sequence
should have ‘None’ for its schema, even if the parent MetaData
has specified a schema.
版本1.0.14中的新功能
sqlalchemy.schema。
列
( * args,** kwargs T5> ) T6> ¶ T7>基础:sqlalchemy.schema.SchemaItem
,sqlalchemy.sql.expression.ColumnClause
表示数据库表中的列。
__当量__ T0> ( T1> 其他 T2> ) T3> ¶ T4>
实施==
运算符。
在列上下文中,生成子句a = b
。If the target is None
, produces a IS NULL
.
__ init __
( * args,** kwargs ) T5>构建一个新的Column
对象。
参数: |
|
---|
__文件__ T0> ( T1> 其他 T2> ) T3> ¶ T4>
__le__()
method of ColumnOperators
实现<=
运算符。
在列上下文中,生成子句a <= b
。
__ LT __ T0> ( T1> 其他 T2> ) T3> ¶ T4>
__lt__()
method of ColumnOperators
实现<
运算符。
在列上下文中,生成子句a b
。
__ NE __ T0> ( T1> 其他 T2> ) T3> ¶ T4>
__ne__()
method of ColumnOperators
实现!=
运算符。
在列上下文中,生成子句a != b
。If the target is None
, produces a IS NOT NULL
.
anon_label T0> ¶ T1>
anon_label
属性 tt>> ColumnElement
为此ColumnElement提供了一个常量“匿名标签”。
这是一个label()表达式,它将在编译时被命名。每次调用anon_label时都会返回相同的label(),以便表达式可以多次引用anon_label,并在编译时生成相同的标签名称。
编译器在编译时自动使用这个函数来表达已知为“未命名”的表达式,如二进制表达式和函数调用。
任何_ T0> ( T1> ) T2> ¶ T3>
any_()
method of ColumnOperators
针对父对象生成any_()
子句。
版本1.1中的新功能
ASC T0> ( T1> ) T2> ¶ T3>
asc()
ColumnOperators
针对父对象生成一个asc()
子句。
( cleft,cright,symmetric = False T5> ¶ T6>
between()
method of ColumnOperators
在()子句之间针对父对象生成between()
铸造 T0> ( T1> 类型_ T2> ) T3> ¶ T4>
cast()
method of ColumnElement
制作一个类型演员,即CAST(&lt; expression&gt; AS &lt; type&gt;)
。
这是cast()
函数的快捷方式。
版本1.0.7中的新功能
整理 T0> ( T1> 整理 T2> ) T3> ¶ T4>
collate()
method of ColumnOperators
根据给定的排序字符串,针对父对象生成一个collate()
子句。
compare
(other, use_proxies=False, equivalents=None, **kw)¶compare()
method of ColumnElement
将此ColumnElement与另一个进行比较。
特别理由:
参数: |
---|
编译
( bind = None,dialect = None,** kw ) T5> ¶ T6>compile()
method of ClauseElement
编译这个SQL表达式。
返回值是一个Compiled
对象。对返回值调用str()
或unicode()
将产生结果的字符串表示形式。Compiled
对象还可以使用params
访问器返回一个绑定参数名称和值的字典。
参数: |
|
---|
的concat T0> ( T1> 其他 T2> ) T3> ¶ T4>
实现'concat'操作符。
在列上下文中,生成子句a || b
,或者使用concat()
运算符在MySQL上。
包含
( 其他,** kwargs ) >contains()
method of ColumnOperators
实现'包含'运算符。
在列上下文中,生成子句LIKE '%&lt; other&gt;%'
复制 T0> ( T1> **千瓦 T2> ) T3> ¶ T4>
创建此Column
的单一副本。
这用于Table.tometadata
中。
不同 T0> ( T1> ) T2> ¶ T3>
distinct()
method of ColumnOperators
针对父对象生成一个distinct()
子句。
endswith
( 其他,** kwargs ) t5 >endswith()
method of ColumnOperators
实现'endswith'操作符。
在列上下文中,生成子句LIKE '%&lt; other&gt;
表达 T0> ¶ T1>
expression
attribute of ColumnElement
返回一个列表达式。
检查界面的一部分;回报自我。
ilike
( 其他,escape =无 ) t5 >ilike()
method of ColumnOperators
实现ilike
运算符。
在列上下文中,生成子句a ILIKE 其他
。
例如。:
select([sometable]).where(sometable.c.column.ilike("%foobar%"))
参数: |
---|
在_ T0> ( T1> 其他 T2> ) T3> ¶ T4>
in_()
method of ColumnOperators
在运算符中实现in
在列上下文中,生成子句a IN 其他
。“other”可以是列表达式的元组/列表,或者是select()
结构。
信息 T0> ¶ T1>
info
attribute of SchemaItem
与对象关联的信息字典,允许用户定义的数据与这个SchemaItem
关联。
是_ T0> ( T1> 其他 T2> ) T3> ¶ T4>
is_()
method of ColumnOperators
实现IS
运算符。
通常,当与None
的值进行比较时,会自动生成IS
,这会解析为NULL
。但是,如果与某些平台上的布尔值进行比较,则可能需要明确使用IS
。
New in version 0.7.9.
is_distinct_from T0> ( T1> 其他 T2> ) T3> ¶ T4>
is_distinct_from()
方法 tt> ColumnOperators
实现IS DISTINCT FROM
运算符。
在大多数平台上呈现“一个IS DISTINCT FROM b”;在一些如SQLite可能会呈现“一个不是b”。
版本1.1中的新功能
IsNot运算 T0> ( T1> 其他 T2> ) T3> ¶ T4>
isnot()
method of ColumnOperators
实现IS NOT
运算符。
Normally, IS NOT
is generated automatically when comparing to a value of None
, which resolves to NULL
. 但是,如果与某些平台上的布尔值进行比较,则可能需要明确使用IS NOT
。
New in version 0.7.9.
isnot_distinct_from T0> ( T1> 其他 T2> ) T3> ¶ T4>
实现IS NOT DISTINCT FROM
运算符。
在大多数平台上呈现“不是从BIND DISTINCT FROM b”;在某些例如SQLite上可能会呈现“a IS b”。
版本1.1中的新功能
标签 T0> ( T1> 名称 T2> ) T3> ¶ T4>
label()
method of ColumnElement
生成列标签,即&lt; columnname&gt; AS &lt; name&gt;
。
这是label()
函数的快捷方式。
如果'名称'是None,则会生成一个匿名标签名称。
像
( 其他,escape =无 ) t5 >like()
method of ColumnOperators
像运算符一样实现like
在列上下文中,生成子句a LIKE 其他
。
例如。:
select([sometable]).where(sometable.c.column.like("%foobar%"))
参数: |
---|
匹配
( 其他,** kwargs ) t5 >match()
方法 tt> ColumnOperators
实现数据库特定的“匹配”运算符。
match()
attempts to resolve to a MATCH-like function or operator provided by the backend. 例子包括:
x @@ to_tsquery(y)
MATCH (x) AGAINST (y IN BOOLEAN MODE)
CONTAINS(x, y)
notilike
(other, escape=None)¶notilike()
method of ColumnOperators
执行NOT ILIKE
运算符。
这相当于对ColumnOperators.ilike()
使用否定,即~x.ilike(y)
。
0.8版本中的新功能
notin _ T0> ( T1> 其他 T2> ) T3> ¶ T4>
notin_()
方法 ColumnOperators
执行NOT IN
运算符。
这相当于对ColumnOperators.in_()
,即~x.in_(y)
使用否定。
0.8版本中的新功能
notlike
( 其他,转义=无 ) t5 >notlike()
method of ColumnOperators
执行NOT LIKE
运算符。
这相当于对ColumnOperators.like()
,即~x.like(y)
使用否定。
0.8版本中的新功能
nullsfirst T0> ( T1> ) T2> ¶ T3>
nullsfirst()
method of ColumnOperators
针对父对象生成nullsfirst()
子句。
nullslast T0> ( T1> ) T2> ¶ T3>
针对父对象生成一个nullslast()
子句。
op
( opstring,precedence = 0,is_comparison = False ) T5> ¶ T6>产生通用的操作员功能。
例如。:
somecolumn.op("*")(5)
生产:
somecolumn * 5
该函数也可用于使按位运算符明确。例如:
somecolumn.op('&')(0xff)
是somecolumn
中的值的按位与。
参数: |
|
---|
引用 T0> ¶ T1>
quote
attribute of SchemaItem
对于具有name
字段的模式项,返回传递给此模式对象的quote
标志的值。
从版本0.9开始弃用:使用<obj>.name.quote
引用 T0> ( T1> 列 T2> ) T3> ¶ T4>
如果此列通过外键引用给定列,则返回True。
shares_lineage()
method of ColumnElement
如果给定的ColumnElement
与此ColumnElement
具有共同的祖先,则返回True。
startswith
( 其他,** kwargs ) ¶ t5 >startswith()
method of ColumnOperators
实现startwith
运算符。
在列上下文中,生成子句LIKE '&lt; other&gt;%'
sqlalchemy.schema.
MetaData
(bind=None, reflect=False, schema=None, quote_schema=None, naming_convention=immutabledict({'ix': 'ix_%(column_0_label)s'}), info=None)¶基础:sqlalchemy.schema.SchemaItem
Table
对象及其关联的模式结构的集合。
保存Table
对象的集合以及对Engine
或Connection
的可选绑定。如果绑定,集合中的Table
对象及其列可以参与隐式SQL执行。
Table
对象本身存储在MetaData.tables
字典中。
MetaData
is a thread-safe object for read operations. 在单个MetaData
对象中构建新表格,无论是显式还是反射,都可能不是完全线程安全的。
也可以看看
Describing Databases with MetaData - 数据库元数据简介
__init__
(bind=None, reflect=False, schema=None, quote_schema=None, naming_convention=immutabledict({'ix': 'ix_%(column_0_label)s'}), info=None)¶创建一个新的MetaData对象。
参数: |
|
---|
append_ddl_listener
( event_name,听众 ) 将一个DDL事件监听器追加到MetaData
中。
从版本0.7开始弃用:请参阅DDLEvents
。
结合 T0> ¶ T1>
An Engine
or Connection
to which this MetaData
is bound.
Typically, a Engine
is assigned to this attribute so that “implicit execution” may be used, or alternatively as a means of providing engine binding information to an ORM Session
object:
engine = create_engine("someurl://")
metadata.bind = engine
也可以看看
明确 T0> ( T1> ) T2> ¶ T3>
清除此元数据中的所有表格对象。
create_all
( bind = None,tables = None,checkfirst = True ) T5> ¶ T6>创建存储在这个元数据中的所有表。
有条件的默认情况下,不会尝试重新创建目标数据库中已存在的表。
参数: |
|
---|
drop_all
( bind = None,tables = None,checkfirst = True ) T5> ¶ T6>删除存储在此元数据中的所有表。
有条件的默认情况下,不会尝试删除目标数据库中不存在的表。
参数: |
|
---|
is_bound T0> ( T1> ) T2> ¶ T3>
如果此MetaData绑定到引擎或连接,则为true。
reflect
(bind=None, schema=None, views=False, only=None, extend_existing=False, autoload_replace=True, **dialect_kwargs)¶从数据库加载所有可用的表定义。
在MetaData
中自动创建Table
条目,以查找数据库中可用但尚未出现在MetaData
中的任何表。可能会多次调用以拾取最近添加到数据库中的表,但是如果数据库中不再存在此MetaData
中的表,则不会执行特殊操作。
参数: |
|
---|
除去 T0> ( T1> 表 T2> ) T3> ¶ T4>
从这个MetaData中移除给定的Table对象。
sorted_tables T0> ¶ T1>
返回按照外键依赖关系排序的Table
对象列表。
The sorting will place Table
objects that have dependencies first, before the dependencies themselves, representing the order in which they can be created. 要获取表格的放置顺序,请使用内置的reversed()
Python。
警告
sorted_tables
访问器本身不能自动解决表间依赖关系循环的自动解析问题,这通常是由相互依赖的外键约束引起的。要解决这些循环,可以将ForeignKeyConstraint.use_alter
参数应用于这些约束,或者使用schema.sort_tables_and_constraints()
函数来打破涉及分开循环。
sqlalchemy.schema。
SchemaItem
¶基础:sqlalchemy.sql.expression.SchemaEventTarget
,sqlalchemy.sql.visitors.Visitable
定义数据库模式的项目的基类。
get_children T0> ( T1> ** kwargs T2> ) T3> ¶ T4>
用于允许SchemaVisitor访问
信息 T0> ¶ T1>
与对象关联的信息字典,允许用户定义的数据与这个SchemaItem
关联。
引用 T0> ¶ T1>
对于具有name
字段的模式项,返回传递给此模式对象的quote
标志的值。
从版本0.9开始弃用:使用<obj>.name.quote
sqlalchemy.schema。
表
( * args,**千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.sql.base.DialectKWArgs
,sqlalchemy.schema.SchemaItem
,sqlalchemy.sql.expression.TableClause
在数据库中表示一个表。
例如。:
mytable = Table("mytable", metadata,
Column('mytable_id', Integer, primary_key=True),
Column('value', String(50))
)
Table
对象根据给定的MetaData
对象内的名称和可选的模式名称构造自己的唯一实例。第二次调用具有相同名称和相同MetaData
参数的Table
构造函数将返回相同 Table
对象 - 通过这种方式,Table
构造函数充当注册表函数。
也可以看看
Describing Databases with MetaData - 数据库元数据简介
构造函数参数如下:
参数: |
|
---|
add_is_dependent_on T0> ( T1> 表 T2> ) T3> ¶ T4>
为此表添加一个“依赖关系”。
这是另一个Table对象,必须在此对象之前先创建,否则将在此对象之后被删除。
通常,表之间的依赖关系通过ForeignKey对象来确定。但是,对于在外键(规则,继承)之外创建依赖关系的其他情况,此方法可以手动建立这样的链接。
alias
(name=None, flat=False)¶alias()
方法继承 FromClause
返回FromClause
的别名。
这是调用的简写:
from sqlalchemy import alias
a = alias(self, name=name)
有关详细信息,请参阅alias()
。
append_column T0> ( T1> 列 T2> ) T3> ¶ T4>
The “key” of the newly added Column
, i.e. the value of its .key
attribute, will then be available in the .c
collection of this Table
, and the column definition will be included in any CREATE TABLE, SELECT, UPDATE, etc. 从Table
结构生成的语句。
请注意,假设表已经在数据库中创建,那么不会更改任何基础数据库中存在的表的定义。关系数据库支持使用SQL ALTER命令向现有表添加列,该命令需要针对不包含新添加列的现有表发布。
append_constraint T0> ( T1> 约束 T2> ) T3> ¶ T4>
追加一个Constraint
到这个Table
。
如果特定的DDL创建事件尚未与给定的Constraint
对象相关联,则会在将来的CREATE TABLE语句中包含约束。
请注意,对于数据库中已存在的表,不会自动在关系数据库中生成约束。要将约束添加到现有的关系数据库表中,必须使用SQL ALTER命令。SQLAlchemy还提供了AddConstraint
构造,当它作为可执行子句调用时可以产生此SQL。
append_ddl_listener
( event_name,听众 ) 将一个DDL事件监听器追加到Table
中。
从版本0.7开始弃用:请参阅DDLEvents
。
argument_for
( dialect_name,argument_name,默认 ) ¶ T6>argument_for()
method of DialectKWArgs
为此课程添加一种新的特定于方言的关键字参数。
例如。:
Index.argument_for("mydialect", "length", None)
some_index = Index('a', 'b', mydialect_length=5)
The DialectKWArgs.argument_for()
method is a per-argument way adding extra arguments to the DefaultDialect.construct_arguments
dictionary. 这本词典提供了代表方言的各种模式层次结构所接受的参数名称列表。
新方言通常应该一次性将该字典指定为方言类的数据成员。用于临时添加参数名称的用例通常用于最终用户代码,该代码也使用了使用额外参数的自定义编译方案。
参数: |
|
---|
版本0.9.4中的新功能
结合 T0> ¶ T1>
返回与此表关联的可连接。
C T0> ¶ T1>
c
attribute of FromClause
columns
属性的别名。
列 T0> ¶ T1>
columns
attribute of FromClause
由FromClause
维护的ColumnElement
对象的基于命名的集合。
columns
或c
集合是使用表绑定或其他可选绑定列构建SQL表达式的入口:
select([mytable]).where(mytable.c.somecolumn == 5)
比较
( 其他,** kw ) t5 >compare()
method of ClauseElement
将此ClauseElement与给定的ClauseElement进行比较。
子类应该覆盖默认行为,这是一种直接的身份比较。
** kw是由subclass compare()方法消耗的参数,可用于修改比较条件。(请参阅ColumnElement
)
编译
( bind = None,dialect = None,** kw ) T5> ¶ T6>compile()
method of ClauseElement
编译这个SQL表达式。
返回值是一个Compiled
对象。对返回值调用str()
或unicode()
将产生结果的字符串表示形式。Compiled
对象还可以使用params
访问器返回一个绑定参数名称和值的字典。
参数: |
|
---|
对等元等于
( 列,等值 ) correspond_on_equivalents()
method of FromClause
返回给定列的相应列,或者如果None搜索给定字典中的匹配项。
对应列
( 列,require_embedded = False ) t5 >corresponding_column()
方法 FromClause
给定一个ColumnElement
,从这个Selectable
对象的原始Column
通过共同的祖先返回导出的ColumnElement
柱。
参数: |
|
---|
count
( whereclause = None,** params ) / T5>count()
方法 FromClause
返回一个根据FromClause
生成的SELECT COUNT。
从版本1.1开始弃用: FromClause.count()
已弃用。对行进行计数需要正确的列表达式和联接,DISTINCT等。必须提出,否则结果可能不是预期的结果。请直接使用适当的func.count()
表达式。
该函数针对表的主键中的第一列或整个表中的第一列生成COUNT。显式使用func.count()
应该是首选的:
row_count = conn.scalar(
select([func.count('*')]).select_from(table)
)
也可以看看
create
(bind=None, checkfirst=False)¶使用给定的Connectable
进行连接,为此Table
发出CREATE
语句。
删除
( whereclause = None,** kwargs ) / T5>delete()
method of TableClause
根据这个TableClause
生成一个delete()
结构。
例如。:
table.delete().where(table.c.id==7)
有关参数和使用信息,请参阅delete()
。
dialect_kwargs T0> ¶ T1>
dialect_kwargs
属性 DialectKWArgs
指定为此构造的方言特定选项的关键字参数的集合。
这些参数在它们的原始<dialect>_<kwarg>
格式中呈现。只包括实际通过的论点;不同于DialectKWArgs.dialect_options
集合,其中包含此方言已知的所有选项,包括默认值。
该集合也是可写的;键被接受为形式<dialect>_<kwarg>
,其中值将被组合到选项列表中。
版本0.9.2中的新功能
在版本0.9.4中更改: DialectKWArgs.dialect_kwargs
集合现在可写入。
也可以看看
DialectKWArgs.dialect_options
- nested dictionary form
dialect_options T0> ¶ T1>
dialect_options
属性 DialectKWArgs
指定为此构造的方言特定选项的关键字参数的集合。
这是一个两级嵌套注册表,键入<dialect_name>
和<argument_name>
。例如,postgresql_where
参数可以定位为:
arg = my_object.dialect_options['postgresql']['where']
版本0.9.2中的新功能
也可以看看
DialectKWArgs.dialect_kwargs
- flat dictionary form
drop
(bind=None, checkfirst=False)¶使用给定的Connectable
进行连接,为此Table
发出DROP
语句。
也可以看看
存在 T0> ( T1> 绑定=无 T2> ) T3> ¶ T4>
如果此表存在,则返回True。
foreign_key_constraints T0> ¶ T1>
由Table
引用的ForeignKeyConstraint
对象。
该列表由当前关联的ForeignKey
对象的集合生成。
版本1.0.0中的新功能
foreign_keys T0> ¶ T1>
foreign_keys
属性 FromClause
返回FromClause引用的ForeignKey对象的集合。
信息 T0> ¶ T1>
info
attribute of SchemaItem
与对象关联的信息字典,允许用户定义的数据与这个SchemaItem
关联。
insert
( values = None,inline = False,** kwargs ) T5> ¶ T6>insert()
method of TableClause
针对这个TableClause
生成一个insert()
结构。
例如。:
table.insert().values(name='foo')
有关参数和使用信息,请参见insert()
。
is_derived_from T0> ( T1> fromclause T2> ) T3> ¶ T4>
is_derived_from()
方法 FromClause
如果FromClause从给定的FromClause中“派生”,则返回True。
一个例子是从表中派生的表的别名。
join
(right, onclause=None, isouter=False, full=False)¶join()
method of FromClause
从FromClause
返回Join
到另一个FromClause
。
例如。:
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
参数: |
|
---|
键 T0> ¶ T1>
返回这个Table
的'键'。
该值用作MetaData.tables
集合中的字典键。对于没有Table.schema
集合的表,它通常与Table.name
相同;否则它通常是schemaname.tablename
形式。
kwargs T0> ¶ T1>
kwargs
属性 DialectKWArgs
横向 T0> ( T1> 名=无 T2> ) T3> ¶ T4>
lateral()
方法继承 FromClause
返回这个FromClause
的LATERAL别名。
返回值是由顶层lateral()
函数提供的Lateral
结构。
版本1.1中的新功能
也可以看看
LATERAL correlation - overview of usage.
外连接
( 右,onclause =无,full = False ) T5> ¶ T6>outerjoin()
方法继承 FromClause
Return a Join
from this FromClause
to another FromClause
, with the “isouter” flag set to 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)
参数: |
|
---|
primary_key T0> ¶ T1>
primary_key
属性 FromClause
返回构成此FromClause主键的Column对象的集合。
引用 T0> ¶ T1>
quote
attribute of SchemaItem
对于具有name
字段的模式项,返回传递给此模式对象的quote
标志的值。
从版本0.9开始弃用:使用<obj>.name.quote
replace_selectable
(old, alias)¶replace_selectable()
方法 FromClause
用给定的Alias对象替换所有出现的FromClause'old',并返回这个FromClause
的副本。
选择
( whereclause = None,** params ) / T5>select()
method of FromClause
返回这个FromClause
的SELECT。
也可以看看
select()
- general purpose method which allows for arbitrary column lists.
self_group T0> ( T1> 针对=无 T2> ) T3> ¶ T4>
self_group()
method of ClauseElement
对这个ClauseElement
应用“分组”。
子类重写此方法以返回“分组”结构,即括号。In particular it’s used by “binary” expressions to provide a grouping around themselves when placed into a larger expression, as well as by select()
constructs when placed into the FROM clause of another select()
. (请注意,通常应使用Select.alias()
方法创建子查询,因为许多平台需要命名嵌套的SELECT语句)。
由于表达式组合在一起,所以self_group()
的应用程序是自动的 - 最终用户代码不需要直接使用此方法。Note that SQLAlchemy’s clause constructs take operator precedence into account - so parenthesis might not be needed, for example, in an expression like x OR (y AND z)
- AND takes precedence over OR.
ClauseElement
的base self_group()
方法仅返回self。
tablesample
(sampling, name=None, seed=None)¶tablesample()
method of FromClause
返回此FromClause
的TABLESAMPLE别名。
返回值是顶级tablesample()
函数也提供的TableSample
结构。
版本1.1中的新功能
也可以看看
tablesample()
- 使用指南和参数
tometadata
( 元数据,schema =符号('retain_schema'),referenced_schema_fn =无 t4 >,name = None ) ¶例如。:
m1 = MetaData()
user = Table('user', m1, Column('id', Integer, priamry_key=True))
m2 = MetaData()
user_copy = user.tometadata(m2)
参数: |
|
---|
update
(whereclause=None, values=None, inline=False, **kwargs)¶update()
方法 TableClause
根据这个TableClause
生成一个update()
结构。
例如。:
table.update().where(table.c.id==7).values(name='foo')
有关参数和使用信息,请参阅update()
。
sqlalchemy.schema。
ThreadLocalMetaData
¶一个MetaData变体,它在每个线程中呈现不同的bind
。
使MetaData的bind
属性成为线程本地值,允许将这些表集合绑定到每个线程中的不同Engine
实现或连接。
ThreadLocalMetaData开始在每个线程中绑定到None。绑定必须通过分配给bind
属性或使用connect()
来显式地进行。您也可以每个线程多次重新绑定,就像普通的MetaData
一样。
__初始化__ T0> ( T1> ) T2> ¶ T3>
构造一个ThreadLocalMetaData。
结合 T0> ¶ T1>
此线程绑定的引擎或连接。
这个属性可以被分配一个引擎或连接,或者分配一个字符串或URL来自动创建一个用create_engine()
绑定的基本引擎。
处置 T0> ( T1> ) T2> ¶ T3>
在所有线程上下文中处理所有绑定的引擎。
is_bound T0> ( T1> ) T2> ¶ T3>
如果此线程存在绑定,则为true。