本节讨论基本的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.tableOnce 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 FromClausecolumns属性的别名。
列 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() 方法继承 FromClauseReturn 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。