Описание баз данных с помощью метаданных¶
В этом разделе рассматриваются фундаментальные объекты 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
содержит все конструкции схемы, которые мы с ним связали. Он поддерживает несколько методов доступа к этим табличным объектам, например, аксессор 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 является использование create_all()
на объекте MetaData
. Этот метод выдает запросы, которые сначала проверяют существование каждой отдельной таблицы и, если она не найдена, выдают утверждения 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)
{execsql}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()
- сначала проверяется наличие каждой таблицы, и таблицы удаляются в обратном порядке зависимости.
Создание и удаление отдельных таблиц может быть выполнено с помощью методов create()
и drop()
из Table
. Эти методы по умолчанию выдают 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)
{execsql}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)
{execsql}DROP TABLE employees
{}
Чтобы включить логику «сначала проверить, существует ли таблица», добавьте аргумент checkfirst=True
к create()
или drop()
:
employees.create(engine, checkfirst=True)
employees.drop(engine, checkfirst=False)
Изменение объектов базы данных с помощью миграции¶
В то время как SQLAlchemy непосредственно поддерживает создание операторов CREATE и DROP для схемных конструкций, возможность изменения этих конструкций, обычно с помощью оператора ALTER, а также других конструкций, специфичных для базы данных, находится вне сферы применения SQLAlchemy. Хотя достаточно легко создавать операторы ALTER и подобные им вручную, например, передавая конструкцию text()
в Connection.execute()
или используя конструкцию DDL
, общепринятой практикой является автоматизация обслуживания схем баз данных по отношению к коду приложений с помощью инструментов миграции схем.
Проект SQLAlchemy предлагает для этой цели инструмент миграции Alembic. Alembic имеет высоконастраиваемую среду и минималистичную схему использования, поддерживает такие возможности, как транзакционный DDL, автоматическое создание «кандидатов» на миграцию, «автономный» режим, в котором создаются SQL-скрипты, и поддержку разрешения ветвлений.
Alembic заменяет проект SQLAlchemy-Migrate, который является оригинальным инструментом миграции для SQLAlchemy и теперь считается наследием.
Указание имени схемы¶
Большинство баз данных поддерживают концепцию нескольких «схем» - пространств имен, которые ссылаются на альтернативные наборы таблиц и других конструкций. Геометрия «схемы» на стороне сервера принимает множество форм, включая имена «схем» под областью действия конкретной базы данных (например, схемы PostgreSQL), именованные базы данных-родственники (например, доступ MySQL / MariaDB к другим базам данных на том же сервере), а также другие концепции, такие как таблицы, принадлежащие другим именам пользователей (Oracle, SQL Server) или даже имена, которые ссылаются на альтернативные файлы базы данных (SQLite ATTACH) или удаленные серверы (Oracle DBLINK с синонимами).
Все вышеперечисленные подходы (в основном) объединяет то, что существует способ обращения к этому альтернативному набору таблиц с помощью строкового имени. SQLAlchemy называет это имя имя схемы. В SQLAlchemy это не что иное, как строковое имя, которое ассоциируется с объектом Table
, а затем преобразуется в SQL-запросы в соответствии с целевой базой данных таким образом, что таблица упоминается в своей удаленной «схеме», каким бы механизмом она ни была в целевой базе данных.
Имя «схемы» может быть связано непосредственно с Table
с помощью аргумента Table.schema
; при использовании ORM с конфигурацией declarative table параметр передается с помощью словаря параметров __table_args__
.
Имя «схемы» также может быть связано с объектом MetaData
, где оно будет автоматически действовать для всех объектов Table
, связанных с этим MetaData
, которые не задают своего имени. Наконец, SQLAlchemy также поддерживает «динамическую» систему имен схем, которая часто используется в многопользовательских приложениях, где один набор метаданных Table
может ссылаться на динамически конфигурируемый набор имен схем на основе каждого соединения или каждого запроса.
См.также
Явное имя схемы с декларативной таблицей - спецификация имени схемы при использовании конфигурации ORM declarative table
Самый простой пример - аргумент Table.schema
использует объект Core Table
следующим образом:
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",
)
SQL, который отображается с использованием этого Table
, например, оператор SELECT ниже, будет явно квалифицировать имя таблицы financial_info
с именем схемы remote_banks
:
>>> print(select(financial_info))
{printsql}SELECT remote_banks.financial_info.id, remote_banks.financial_info.value
FROM remote_banks.financial_info
Когда объект Table
объявляется с явным именем схемы, он хранится во внутреннем пространстве имен 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
, даже если ссылающаяся таблица также находится в той же схеме:
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"
См.также
Имена многосторонних схем - описывает использование точечных имен схем с диалектом SQL Server.
Указание имени схемы по умолчанию с помощью метаданных¶
Объект MetaData
может также установить явный вариант по умолчанию для всех параметров Table.schema
, передав аргумент MetaData.schema
в конструкцию верхнего уровня MetaData
:
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
каталогизируется в MetaData
с использованием имени, определенного схемой, то есть:
metadata_obj.tables["remote_banks.financial_info"]
При использовании объектов ForeignKey
или ForeignKeyConstraint
для ссылки на эту таблицу, для ссылки на таблицу 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
, который задает 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"
)
См.также
Применение соглашений об именовании динамических схем¶
Имена, используемые параметром Table.schema
, могут также применяться к поиску, который является динамическим на основе каждого соединения или каждого выполнения, так что, например, в ситуациях с несколькими арендаторами каждая транзакция или оператор могут быть нацелены на определенный набор имен схем, которые меняются. В разделе Перевод имен схем описано, как используется эта функция.
См.также
Установка схемы по умолчанию для новых подключений¶
Все вышеперечисленные подходы относятся к методам включения явного имени схемы в операторы SQL. В соединениях баз данных фактически существует концепция схемы «по умолчанию», которая представляет собой имя «схемы» (или базы данных, владельца и т.д.), которая имеет место, если имя таблицы не имеет явной квалификации схемы. Эти имена обычно настраиваются на уровне входа в систему, например, при подключении к базе данных PostgreSQL «схема» по умолчанию называется «public».
Часто бывают случаи, когда «схема» по умолчанию не может быть задана при входе в систему, и вместо этого ее целесообразно настраивать каждый раз при создании соединения, используя такие операторы, как «SET SEARCH_PATH» в PostgreSQL или «ALTER SESSION» в Oracle. Эти подходы могут быть реализованы с помощью события PoolEvents.connect()
, которое позволяет получить доступ к соединению DBAPI при его первом создании. Например, чтобы установить переменную Oracle CURRENT_SCHEMA на альтернативное имя:
from sqlalchemy import event
from sqlalchemy import create_engine
engine = create_engine("oracle+cx_oracle://scott:tiger@tsn_name")
@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
; поскольку событие «вставлено» в начало списка обработчиков, оно также произойдет до запуска обработчиков событий диалекта, в частности, включая тот, который определит «схему по умолчанию» для соединения.
Для других баз данных обратитесь к документации базы данных и/или диалекта для получения конкретной информации о том, как настраиваются схемы по умолчанию.
Изменено в версии 1.4.0b2: Теперь приведенный выше рецепт работает без необходимости устанавливать дополнительные обработчики событий.
См.также
Настройка альтернативных путей поиска в Connect - в документации по диалекту PostgreSQL.
Схемы и отражение¶
Функция схемы в SQLAlchemy взаимодействует с функцией отражения таблиц, представленной в Отражение объектов базы данных. Дополнительные подробности о том, как это работает, см. в разделе Отражение таблиц из других схем.
Параметры, специфичные для бэкенда¶
Table
поддерживает опции, специфичные для конкретной базы данных. Например, MySQL имеет различные типы бэкенда таблиц, включая «MyISAM» и «InnoDB». Это можно выразить с помощью Table
, используя mysql_engine
:
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",
)
Другие бэкенды также могут поддерживать опции на уровне таблиц - они будут описаны в отдельных разделах документации для каждого диалекта.
Колонка, таблица, API метаданных¶
Object Name | Description |
---|---|
Представляет собой столбец в таблице базы данных. |
|
insert_sentinel([name, type_], *, [default, omit_from_statements]) |
Предоставляет суррогат |
Коллекция объектов |
|
Перечисление. |
|
Базовый класс для элементов, определяющих схему базы данных. |
|
Представляет собой таблицу в базе данных. |
-
attribute
sqlalchemy.schema.sqlalchemy.schema.
sqlalchemy.schema.BLANK_SCHEMA Относится к
SchemaConst.BLANK_SCHEMA
.
-
attribute
sqlalchemy.schema.sqlalchemy.schema.
sqlalchemy.schema.RETAIN_SCHEMA Относится к
SchemaConst.RETAIN_SCHEMA
- class sqlalchemy.schema.Column¶
Представляет собой столбец в таблице базы данных.
Members
__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
)-
method
sqlalchemy.schema.Column.
__eq__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__eq__
методаColumnOperators
Реализуйте оператор
==
.В контексте столбца выдает предложение
a = b
. Если цельNone
, выдаетa IS NULL
.
-
method
sqlalchemy.schema.Column.
__init__(_Column__name_pos: Optional[Union[str, _TypeEngineArgument[_T], SchemaEventTarget]] = None, _Column__type_pos: Optional[Union[_TypeEngineArgument[_T], SchemaEventTarget]] = None, *args: SchemaEventTarget, name: Optional[str] = None, type_: Optional[_TypeEngineArgument[_T]] = None, autoincrement: _AutoIncrementType = 'auto', default: Optional[Any] = None, doc: Optional[str] = None, key: Optional[str] = None, index: Optional[bool] = None, unique: Optional[bool] = None, info: Optional[_InfoType] = None, nullable: Optional[Union[bool, Literal[SchemaConst.NULL_UNSPECIFIED]]] = SchemaConst.NULL_UNSPECIFIED, onupdate: Optional[Any] = None, primary_key: bool = False, server_default: Optional[_ServerDefaultArgument] = None, server_onupdate: Optional[FetchedValue] = None, quote: Optional[bool] = None, system: bool = False, comment: Optional[str] = None, insert_sentinel: bool = False, _omit_from_statements: bool = False, _proxies: Optional[Any] = None, **dialect_kwargs: Any)¶ Создайте новый объект
Column
.- Параметры:
name – Имя столбца, представленное в базе данных. Этот аргумент может быть первым позиционным аргументом или указываться через ключевое слово. Имена, не содержащие символов верхнего регистра, рассматриваются как имена, нечувствительные к регистру, и не берутся в кавычки, если они не являются зарезервированным словом. Имена с любым количеством символов верхнего регистра будут заключены в кавычки и отправлены точно. Обратите внимание, что такое поведение применимо даже к базам данных, которые стандартизируют имена, написанные в верхнем регистре, как нечувствительные к регистру, например, Oracle. Поле имени может быть опущено во время конструирования и применено позже, в любое время до того, как колонка будет связана с
Table
. Это сделано для поддержки удобного использования в расширенииdeclarative
.type_ – Тип столбца, указываемый с помощью экземпляра, который является подклассом
TypeEngine
. Если для типа не требуются аргументы, можно передать и класс типа, например:: # использовать тип с аргументами Column(„data“, String(50)) # использовать без аргументов 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
(заставляет этот столбец иметь семантику автоинкремента и для composite primary key),False
(этот столбец никогда не должен иметь семантику автоинкремента) и строку"ignore_fk"
(специальный случай для столбцов внешнего ключа, см. ниже). Термин «семантика автоинкремента» относится как к типу DDL, который будет создан для столбца в операторе CREATE TABLE, когда будут вызваны такие методы, какMetaData.create_all()
иTable.create()
, так и к тому, как столбец будет рассматриваться при компиляции и передаче в базу данных оператора INSERT: * DDL рендеринг (т.е.MetaData.create_all()
,Table.create()
): При использовании параметраColumn
, который не имеет другой генерирующей конструкции по умолчанию, связанной с ним (например, конструкцииSequence
илиIdentity
), параметр подразумевает, что ключевые слова, специфичные для базы данных, такие как PostgreSQLSERIAL
, MySQLAUTO_INCREMENT
илиIDENTITY
на SQL Server, также должны быть отрисованы. Не каждый бэкенд базы данных имеет «подразумеваемый» генератор по умолчанию; например, бэкенд Oracle всегда нуждается в явной конструкции, такой какIdentity
, которая должна быть включена сColumn
для того, чтобы DDL, визуализированный для включения автогенерирующих конструкций, также был произведен в базе данных. * Семантика INSERT (т.е. когда конструкцияinsert()
компилируется в строку SQL и затем выполняется в базе данных с помощьюConnection.execute()
или эквивалента): Известно, что однострочный оператор INSERT будет автоматически создавать новое целочисленное значение первичного ключа для этого столбца, которое будет доступно после вызова оператора через атрибутCursorResult.inserted_primary_key
на объектеResult
. Это также относится к использованию ORM, когда ORM-сопоставленные объекты сохраняются в базе данных, указывая, что новый целочисленный первичный ключ будет доступен, чтобы стать частью identity key для этого объекта. Это поведение происходит независимо от того, какие DDL-конструкции связаны сColumn
и не зависит от поведения «DDL Rendering», рассмотренного в предыдущей заметке выше. Параметр может быть установлен вTrue
, чтобы указать, что столбец, который является частью составного (т.е. многостолбцового) первичного ключа, должен иметь семантику автоинкремента, хотя обратите внимание, что только один столбец в первичном ключе может иметь такую настройку. Он также может быть установлен вTrue
, чтобыFalse
указатьForeignKey
семантику'ignore_fk'
автоинкрементаIdentity
дляIdentity
столбца,Column.autoincrement
у которогоAUTOINCREMENT
настроено Поведение автоинкрементов в SQLite значениеIdentity
по умолчаниюSequence
на сторонеinsert()
клиентаInsert.inline()
илиcursor.lastrowid()
на стороне https://www.python.org/dev/peps/pep-0249/#lastrowid сервера,Table
однакоTable.implicit_returning
этоSequence
не такSequence
Table
Table.implicit_returning
SELECT scope_identity()
insert()
.default – Скаляр, Python callable или
ColumnElement
выражение, представляющее значение по умолчанию для этого столбца, которое будет вызвано при вставке, если этот столбец не указан в предложении VALUES вставки. Это сокращение от использованияColumnDefault
в качестве позиционного аргумента; более подробно о структуре аргумента см. в этом классе. В отличие от аргументаColumn.server_default
, который создает генератор по умолчанию на стороне базы данных. … см. также:: Колонки INSERT/UPDATE по умолчаниюdoc – необязательная строка, которая может быть использована ORM или аналогичными средствами для документирования атрибутов на стороне Python. Этот атрибут не отображает комментарии SQL; для этого используйте параметр
Column.comment
.key – Необязательный строковый идентификатор, который будет идентифицировать данный объект
Column
наTable
. Если указан ключ, то это единственный идентификатор, ссылающийся наColumn
в приложении, включая отображение атрибутов ORM; полеname
используется только при визуализации SQL.index – Когда
True
, указывает, что для этогоColumn
будет автоматически сгенерирована конструкцияIndex
, что приведет к появлению оператора «CREATE INDEX» дляTable
при вызове операции создания DDL. Использование этого флага эквивалентно явному использованию конструкцииIndex
на уровне самой конструкцииTable
:: Table( «some_table», metadata, Column(«x», Integer), Index(«ix_some_table_x», «x») ) Чтобы добавить флагIndex.unique
кIndex
, установите одновременно флагиColumn.unique
иColumn.index
в True, что приведет к появлению инструкции DDL «CREATE UNIQUE INDEX» вместо «CREATE INDEX». Имя индекса генерируется с помощью флага default naming convention, который для конструкцииIndex
имеет видix_<tablename>_<columnname>
. Поскольку этот флаг предназначен только для удобства в общем случае добавления одностолбцового индекса с конфигурацией по умолчанию в определение таблицы, явное использование конструкцииIndex
должно быть предпочтительным для большинства случаев использования, включая составные индексы, охватывающие более одного столбца, индексы с SQL-выражениями или упорядочиванием, опции конфигурации индекса, специфичные для бэкенда, и индексы, использующие определенное имя. … Примечание:: атрибутColumn.index
наColumn
не указывает, индексирован этот столбец или нет, только если этот флаг был явно установлен здесь. Чтобы просмотреть индексы столбца, просмотрите коллекциюTable.indexes
или используйтеInspector.get_indexes()
. … см. также:: Индексы Настройка соглашений об именовании ограниченийColumn.unique
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
.onupdate – Скаляр, Python callable или
ClauseElement
, представляющий значение по умолчанию, которое будет применяться к столбцу в операторах UPDATE, и которое будет вызвано при обновлении, если этот столбец не присутствует в предложении SET обновления. Это сокращение от использованияColumnDefault
в качестве позиционного аргумента сfor_update=True
. … см. также:: Колонки INSERT/UPDATE по умолчанию - полное обсуждение onupdateprimary_key – Если
True
, помечает этот столбец как столбец первичного ключа. Этот флаг может быть установлен для нескольких столбцов, чтобы указать составные первичные ключи. В качестве альтернативы первичный ключTable
может быть указан через явный объектPrimaryKeyConstraint
.server_default – Экземпляр
FetchedValue
, строка, 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-Explicit, вызываемые сервером - полное обсуждение параметров по умолчанию на стороне сервераserver_onupdate – Экземпляр
FetchedValue
, представляющий функцию генерации по умолчанию на стороне базы данных, например, триггер. Это указывает SQLAlchemy, что новое сгенерированное значение будет доступно после обновления. Эта конструкция фактически не реализует какую-либо функцию генерации в базе данных, которая должна быть указана отдельно. … предупреждение:: Эта директива не в настоящее время производит предложение MySQL «ON UPDATE CURRENT_TIMESTAMP()». Смотрите Рендеринг ON UPDATE CURRENT TIMESTAMP для MySQL / MariaDB’s explicit_defaults_for_timestamp для получения информации о том, как производить это предложение. … см. также:: Маркировка неявно генерируемых значений, временных меток и триггерных столбцовquote – Включить или выключить принудительное цитирование имени этой колонки, соответствующее
True
илиFalse
. Если оставить значение по умолчаниюNone
, то идентификатор колонки будет заключен в кавычки в соответствии с тем, является ли имя чувствительным к регистру (идентификаторы, содержащие хотя бы один символ верхнего регистра, рассматриваются как чувствительные к регистру), или если это зарезервированное слово. Этот флаг нужен только для принудительного цитирования зарезервированного слова, которое не известно диалекту SQLAlchemy.unique – Когда
True
, а параметрColumn.index
оставлен в значении по умолчаниюFalse
, это означает, что для данногоColumn
будет автоматически сгенерирована конструкцияUniqueConstraint
, которая приведет к включению условия «UNIQUE CONSTRAINT», ссылающегося на этот столбец, в операторCREATE TABLE
, когда будет вызвана операция DDL create для объектаTable
. Когда этот флаг установленTrue
, а параметрColumn.index
одновременно установлен вTrue
, то вместо этого генерируется конструкцияIndex
, которая включает параметрIndex.unique
, установленный вTrue
. Дополнительные подробности см. в документации дляColumn.index
. Использование этого флага эквивалентно явному использованию конструкцииUniqueConstraint
на уровне самой конструкцииTable
:: Table(«some_table», metadata, Column(«x», Integer), UniqueConstraint(«x») ) ПараметрUniqueConstraint.name
объекта уникального ограничения оставлен в значении по умолчаниюNone
; в отсутствие naming convention для вложенногоMetaData
, конструкция UNIQUE CONSTRAINT будет выдана как безымянная, что обычно вызывает соглашение об именовании, специфичное для базы данных. Поскольку этот флаг предназначен только для удобства в распространенном случае добавления уникального ограничения в один столбец, сконфигурированного по умолчанию, в определение таблицы, явное использование конструкцииUniqueConstraint
должно быть предпочтительным для большинства случаев использования, включая составные ограничения, охватывающие более одного столбца, опции конфигурации индекса, специфичные для бэкенда, и ограничения, использующие конкретное имя. … Примечание:: атрибутColumn.unique
наColumn
не указывает, имеет ли этот столбец уникальное ограничение или нет, только если этот флаг был явно установлен здесь. Для просмотра индексов и уникальных ограничений, которые могут включать этот столбец, просмотрите коллекцииTable.indexes
и/илиTable.constraints
или используйтеInspector.get_indexes()
и/илиInspector.get_unique_constraints()
… seealso:: Ограничение UNIQUE Настройка соглашений об именовании ограниченийColumn.index
system – Когда
True
, указывает, что это «системный» столбец, то есть столбец, который автоматически предоставляется базой данных, и не должен включаться в список столбцов для оператораCREATE TABLE
. Для более сложных сценариев, когда столбцы должны условно отображаться по-разному на разных бэкендах, рассмотрим пользовательские правила компиляции дляCreateColumn
.comment – Необязательная строка, которая будет отображать SQL-комментарий при создании таблицы. … versionadded:: 1.2 Добавлен параметр
Column.comment
кColumn
.insert_sentinel – Помечает эту
Column
как insert sentinel, используемую для оптимизации работы функции insertmanyvalues для таблиц, которые иначе не имеют соответствующих конфигураций первичного ключа. … версия добавлена:: 2.0.10 .. seealso::insert_sentinel()
- универсальный помощник для объявления направляющих столбцов Поведение «Вставка многих значений» для операторов INSERT Настройка столбцов часовых.
-
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
.
-
method
sqlalchemy.schema.Column.
__ne__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__ne__
методаColumnOperators
Реализуйте оператор
!=
.В контексте столбца выдает предложение
a != b
. Если цельNone
, выдаетa IS NOT NULL
.
-
method
sqlalchemy.schema.Column.
all_() ColumnOperators ¶ наследуется от
ColumnOperators.all_()
методаColumnOperators
Произведите предложение
all_()
против родительского объекта.Примеры см. в документации для
all_()
.Примечание
не путайте более новый метод
ColumnOperators.all_()
с его более старым аналогомARRAY
, специфическим методомComparator.all()
, который имеет другой синтаксис вызова и схему использования.
-
attribute
sqlalchemy.schema.Column.
anon_key_label¶ наследуется от
ColumnElement.anon_key_label
атрибутаColumnElement
Не рекомендуется, начиная с версии 1.4: Атрибут
ColumnElement.anon_key_label
теперь является приватным, а аксессор public устарел.
-
attribute
sqlalchemy.schema.Column.
anon_label¶ наследуется от
ColumnElement.anon_label
атрибутаColumnElement
Не рекомендуется, начиная с версии 1.4: Атрибут
ColumnElement.anon_label
теперь является приватным, а аксессор public устарел.
-
method
sqlalchemy.schema.Column.
any_() ColumnOperators ¶ наследуется от
ColumnOperators.any_()
методаColumnOperators
Произведите предложение
any_()
против родительского объекта.Примеры см. в документации для
any_()
.Примечание
не путайте более новый метод
ColumnOperators.any_()
с его более старым аналогомARRAY
, специфическим методомComparator.any()
, который имеет другой синтаксис вызова и схему использования.
-
classmethod
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
. Этот словарь содержит список имен аргументов, принимаемых различными конструкциями уровня схемы от имени диалекта.Новые диалекты, как правило, должны определять этот словарь сразу как член данных класса диалекта. Случаи добавления имен аргументов ad-hoc обычно используются для кода конечного пользователя, который также использует пользовательскую схему компиляции, потребляющую дополнительные аргументы.
- Параметры:
dialect_name – имя диалекта. Диалект должен быть локализуемым, в противном случае выдается сообщение
NoSuchModuleError
. Диалект также должен включать существующую коллекциюDefaultDialect.construct_arguments
, указывающую на то, что он участвует в системе проверки ключевых слов-аргументов и умолчаний, иначе будет выданоArgumentError
. Если диалект не включает эту коллекцию, то любой аргумент ключевого слова может быть указан от имени уже этого диалекта. Все диалекты, упакованные в SQLAlchemy, включают эту коллекцию, однако для диалектов сторонних производителей поддержка может отличаться.argument_name – имя параметра.
default – значение параметра по умолчанию.
-
method
sqlalchemy.schema.Column.
asc() ColumnOperators ¶ наследуется от
ColumnOperators.asc()
методаColumnOperators
Произведите предложение
asc()
против родительского объекта.
-
method
sqlalchemy.schema.Column.
between(cleft: Any, cright: Any, symmetric: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.between()
методаColumnOperators
Произведите предложение
between()
против родительского объекта, задав нижний и верхний диапазон.
-
method
sqlalchemy.schema.Column.
bitwise_and(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_and()
методаColumnOperators
Произвести побитовую операцию AND, обычно с помощью оператора
&
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bitwise_lshift(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_lshift()
методаColumnOperators
Произвести побитовую операцию LSHIFT, обычно с помощью оператора
<<
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bitwise_not() ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_not()
методаColumnOperators
Произвести побитовую операцию NOT, обычно с помощью оператора
~
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bitwise_or(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_or()
методаColumnOperators
Произвести операцию побитового ИЛИ, обычно с помощью оператора
|
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bitwise_rshift(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_rshift()
методаColumnOperators
Произвести побитовую операцию RSHIFT, обычно с помощью оператора
>>
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bitwise_xor(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_xor()
методаColumnOperators
Произвести побитовую операцию XOR, обычно с помощью оператора
^
или#
для PostgreSQL.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.schema.Column.
bool_op(opstring: str, precedence: int = 0, python_impl: Optional[Callable[[...], Any]] = None) Callable[[Any], Operators] ¶ наследуется от
Operators.bool_op()
методаOperators
Возвращает пользовательский булев оператор.
Этот метод является сокращением для вызова
Operators.op()
и передачи флагаOperators.op.is_comparison
со значением True. Ключевым преимуществом использованияOperators.bool_op()
является то, что при использовании конструкций столбцов «булева» природа возвращаемого выражения будет присутствовать для целей PEP 484.См.также
-
method
sqlalchemy.schema.Column.
cast(type_: _TypeEngineArgument[_OPT]) Cast[_OPT] ¶ наследуется от
ColumnElement.cast()
методаColumnElement
Произведите приведение типа, т.е.
CAST(<expression> AS <type>)
.Это сокращение для функции
cast()
.
-
method
sqlalchemy.schema.Column.
collate(collation: str) ColumnOperators ¶ наследуется от
ColumnOperators.collate()
методаColumnOperators
Производит предложение
collate()
против родительского объекта, учитывая строку collation.См.также
-
method
sqlalchemy.schema.Column.
compare(other: ClauseElement, **kw: Any) bool ¶ наследуется от
ClauseElement.compare()
методаClauseElement
Сравните это
ClauseElement
с заданнымClauseElement
.Подклассы должны переопределить поведение по умолчанию, которое представляет собой прямое сравнение идентичности.
**kw - это аргументы, потребляемые методами подкласса
compare()
и могут быть использованы для изменения критериев сравнения (см.ColumnElement
).
-
method
sqlalchemy.schema.Column.
compile(bind: Optional[Union[Engine, Connection]] = None, dialect: Optional[Dialect] = 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}))
-
method
sqlalchemy.schema.Column.
concat(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.concat()
методаColumnOperators
Реализуйте оператор „concat“.
В контексте столбца производит предложение
a || b
, или использует операторconcat()
в MySQL.
-
method
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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.contains.autoescape
не установлен в True.autoescape – boolean; при значении 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"
перед передачей в базу данных.
-
method
sqlalchemy.schema.Column.
copy(**kw: Any) Column[Any] ¶ Не рекомендуется, начиная с версии 1.4: Метод
Column.copy()
является устаревшим и будет удален в одном из будущих выпусков.
-
method
sqlalchemy.schema.Column.
desc() ColumnOperators ¶ наследуется от
ColumnOperators.desc()
методаColumnOperators
Произведите предложение
desc()
против родительского объекта.
-
attribute
sqlalchemy.schema.Column.
dialect_kwargs¶ наследуется от
DialectKWArgs.dialect_kwargs
атрибутаDialectKWArgs
Набор аргументов ключевых слов, заданных как специфические для диалекта опции этой конструкции.
Аргументы представлены здесь в их оригинальном формате
<dialect>_<kwarg>
. Включены только те аргументы, которые действительно были переданы; в отличие от коллекцииDialectKWArgs.dialect_options
, которая содержит все опции, известные этому диалекту, включая значения по умолчанию.Коллекция также доступна для записи; ключи принимаются в форме
<dialect>_<kwarg>
, где значение будет собрано в список опций.См.также
DialectKWArgs.dialect_options
- форма вложенного словаря
-
attribute
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
- плоская словарная форма
-
method
sqlalchemy.schema.Column.
distinct() ColumnOperators ¶ наследуется от
ColumnOperators.distinct()
методаColumnOperators
Произведите предложение
distinct()
против родительского объекта.
-
method
sqlalchemy.schema.Column.
endswith(other: Any, escape: Optional[str] = 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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.endswith.autoescape
не установлен в True.autoescape – boolean; когда 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"
перед передачей в базу данных.
-
attribute
sqlalchemy.schema.Column.
expression¶ наследуется от
ColumnElement.expression
атрибутаColumnElement
Возвращает выражение столбца.
Часть интерфейса проверки; возвращает self.
-
attribute
sqlalchemy.schema.Column.
foreign_keys: Set[ForeignKey] = frozenset({})¶ наследуется от
ColumnElement.foreign_keys
атрибутаColumnElement
Коллекция всех объектов маркеров
ForeignKey
, связанных с даннымColumn
.Каждый объект является членом
ForeignKeyConstraint
.См.также
-
method
sqlalchemy.schema.Column.
get_children(*, column_tables=False, **kw)¶ наследуется от
ColumnClause.get_children()
методаColumnClause
Возвращает непосредственные дочерние
HasTraverseInternals
элементы данногоHasTraverseInternals
.Используется для обхода посещений.
**kw может содержать флаги, изменяющие возвращаемую коллекцию, например, для возврата подмножества элементов, чтобы сократить время обхода, или для возврата дочерних элементов из другого контекста (например, коллекции на уровне схемы, а не на уровне пункта).
-
method
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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.icontains.autoescape
не установлен в True.autoescape – boolean; при значении 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: Optional[str] = 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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.iendswith.autoescape
не установлен в True.autoescape – boolean; при значении 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: Optional[str] = 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%"))
- Параметры:
other – сравниваемое выражение
escape – необязательный управляющий символ, отображает ключевое слово
ESCAPE
, например:: somecolumn.ilike(«foo/%bar», escape=»/»)
См.также
-
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: добавлены «расширяющие» связанные параметры
Если передан пустой список, то будет выведено специальное выражение «пустой список», специфичное для используемой базы данных. Для SQLite это будет:
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Добавлено в версии 1.3: «Расширяющиеся» связанные параметры теперь поддерживают пустые списки
конструкция
select()
, которая обычно является коррелированным скаляром 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()
или конструкцияbindparam()
, в которой флагbindparam.expanding
установлен в True.
-
attribute
sqlalchemy.schema.Column.
index: Optional[bool]¶ Значение параметра
Column.index
.Не указывает, действительно ли этот
Column
проиндексирован или нет; используйтеTable.indexes
.См.также
-
attribute
sqlalchemy.schema.Column.
info¶ наследуется от
SchemaItem.info
атрибутаSchemaItem
Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
SchemaItem
.Словарь автоматически создается при первом обращении к нему. Он также может быть указан в конструкторе некоторых объектов, таких как
Table
иColumn
.
-
attribute
sqlalchemy.schema.Column.
inherit_cache: Optional[bool] = True¶ Укажите, должен ли данный экземпляр
HasCacheKey
использовать схему генерации ключей кэша, используемую его непосредственным суперклассом.По умолчанию атрибут имеет значение
None
, что указывает на то, что конструкция еще не приняла во внимание целесообразность ее участия в кэшировании; функционально это эквивалентно установке значенияFalse
, за исключением того, что при этом выдается предупреждение.Этот флаг может быть установлен в
True
на определенном классе, если SQL, соответствующий объекту, не изменяется на основе атрибутов, локальных для этого класса, а не его суперкласса.См.также
Включение поддержки кэширования для пользовательских конструкций - общие направляющие для установки атрибута
HasCacheKey.inherit_cache
для сторонних или определенных пользователем конструкций SQL.
-
method
sqlalchemy.schema.Column.
is_(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_()
методаColumnOperators
Реализуйте оператор
IS
.Обычно
IS
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS
может быть желательным при сравнении с булевыми значениями на некоторых платформах.См.также
-
method
sqlalchemy.schema.Column.
is_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_distinct_from()
метода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
.Обычно
IS NOT
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS NOT
может быть желательным при сравнении с булевыми значениями на некоторых платформах.Изменено в версии 1.4: Оператор
is_not()
переименован изisnot()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.schema.Column.
is_not_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_not_distinct_from()
метода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
.Обычно
IS NOT
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS NOT
может быть желательным при сравнении с булевыми значениями на некоторых платформах.Изменено в версии 1.4: Оператор
is_not()
переименован изisnot()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.schema.Column.
isnot_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.isnot_distinct_from()
метода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: Optional[str] = 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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.istartswith.autoescape
не установлен в True.autoescape – boolean; при значении 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
Ключ», который в некоторых обстоятельствах ссылается на данный объект в пространстве имен Python.
Обычно это относится к «ключу» столбца, присутствующему в коллекции
.c
selectable, например,sometable.c["somekey"]
возвращаетColumn
с.key
«somekey».
-
attribute
sqlalchemy.schema.Column.
kwargs¶ наследуется от
DialectKWArgs.kwargs
атрибутаDialectKWArgs
Синоним для
DialectKWArgs.dialect_kwargs
.
-
method
sqlalchemy.schema.Column.
label(name: Optional[str]) Label[_T] ¶ наследуется от
ColumnElement.label()
методаColumnElement
Произведите метку столбца, т.е.
<columnname> AS <name>
.Это сокращение для функции
label()
.Если „name“ равно
None
, будет сгенерировано анонимное имя метки.
-
method
sqlalchemy.schema.Column.
like(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.like()
методаColumnOperators
Реализуйте оператор
like
.В контексте столбца выдает выражение:
a LIKE other
Например:
stmt = select(sometable).\ where(sometable.c.column.like("%foobar%"))
- Параметры:
other – сравниваемое выражение
escape – необязательный управляющий символ, отображает ключевое слово
ESCAPE
, например:: somecolumn.like(«foo/%bar», escape=»/»)
См.также
-
method
sqlalchemy.schema.Column.
match(other: Any, **kwargs: Any) ColumnOperators ¶ наследуется от
ColumnOperators.match()
методаColumnOperators
Реализует специфический для базы данных оператор „match“.
ColumnOperators.match()
пытается преобразоваться в MATCH-подобную функцию или оператор, предоставляемый бэкендом. Примеры включают:PostgreSQL - выдает
x @@ plainto_tsquery(y)
.Изменено в версии 2.0:
plainto_tsquery()
теперь используется вместоto_tsquery()
для PostgreSQL; для совместимости с другими формами смотрите Полнотекстовый поиск.MySQL - выдает
MATCH (x) AGAINST (y IN BOOLEAN MODE)
.См.также
match
- специфическая для MySQL конструкция с дополнительными возможностями.Oracle - выдает
CONTAINS(x, y)
.другие бэкенды могут предоставлять специальные реализации.
Бэкенды без специальной реализации будут выдавать оператор как «MATCH». Это совместимо, например, с SQLite.
-
method
sqlalchemy.schema.Column.
not_ilike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.not_ilike()
методаColumnOperators
реализовать оператор
NOT ILIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.ilike()
, то есть~x.ilike(y)
.Изменено в версии 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
является пустой последовательностью, компилятор выдает выражение «пусто не в». По умолчанию это выражение «1 = 1», которое во всех случаях выдает true. Для изменения этого поведения можно использоватьcreate_engine.empty_in_strategy
.Изменено в версии 1.4: Оператор
not_in()
переименован изnotin_()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.Изменено в версии 1.2: Операторы
ColumnOperators.in_()
иColumnOperators.not_in()
теперь по умолчанию выдают «статическое» выражение для пустой последовательности IN.См.также
-
method
sqlalchemy.schema.Column.
not_like(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.not_like()
методаColumnOperators
реализовать оператор
NOT LIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.like()
, то есть~x.like(y)
.Изменено в версии 1.4: Оператор
not_like()
переименован изnotlike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.schema.Column.
notilike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.notilike()
методаColumnOperators
реализовать оператор
NOT ILIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.ilike()
, то есть~x.ilike(y)
.Изменено в версии 1.4: Оператор
not_ilike()
переименован изnotilike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.schema.Column.
notin_(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.notin_()
методаColumnOperators
реализовать оператор
NOT IN
.Это эквивалентно использованию отрицания с
ColumnOperators.in_()
, то есть~x.in_(y)
.В случае, если
other
является пустой последовательностью, компилятор выдает выражение «пусто не в». По умолчанию это выражение «1 = 1», которое во всех случаях выдает true. Для изменения этого поведения можно использоватьcreate_engine.empty_in_strategy
.Изменено в версии 1.4: Оператор
not_in()
переименован изnotin_()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.Изменено в версии 1.2: Операторы
ColumnOperators.in_()
иColumnOperators.not_in()
теперь по умолчанию выдают «статическое» выражение для пустой последовательности IN.См.также
-
method
sqlalchemy.schema.Column.
notlike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.notlike()
методаColumnOperators
реализовать оператор
NOT LIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.like()
, то есть~x.like(y)
.Изменено в версии 1.4: Оператор
not_like()
переименован изnotlike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.schema.Column.
nulls_first() ColumnOperators ¶ наследуется от
ColumnOperators.nulls_first()
методаColumnOperators
Произведите предложение
nulls_first()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_first()
переименован изnullsfirst()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.schema.Column.
nulls_last() ColumnOperators ¶ наследуется от
ColumnOperators.nulls_last()
методаColumnOperators
Произведите предложение
nulls_last()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_last()
переименован изnullslast()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.schema.Column.
nullsfirst() ColumnOperators ¶ наследуется от
ColumnOperators.nullsfirst()
методаColumnOperators
Произведите предложение
nulls_first()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_first()
переименован изnullsfirst()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.schema.Column.
nullslast() ColumnOperators ¶ наследуется от
ColumnOperators.nullslast()
методаColumnOperators
Произведите предложение
nulls_last()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_last()
переименован изnullslast()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.schema.Column.
op(opstring: str, precedence: int = 0, is_comparison: bool = False, return_type: Optional[Union[Type[TypeEngine[Any]], TypeEngine[Any]]] = None, python_impl: Optional[Callable[..., Any]] = 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() для генерации пользовательского оператора, и мои скобки выходят неправильно - подробное описание того, как SQL-компилятор SQLAlchemy отображает круглые скобкиis_comparison – legacy; если 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 таким же образом, как этот оператор работает при запуске на сервере базы данных. Используется для функций оценки SQL-выражений in-Python, например, для гибридных атрибутов ORM, а также для «оценщика» ORM, используемого для сопоставления объектов в сессии после многорядного обновления или удаления. например:: >>> expr = column(„x“).op(„+“, python_impl=lambda a, b: a + b)(„y“) Оператор для приведенного выше выражения будет также работать для не-SQL левых и правых объектов:: >>> expr.operator(5, 10) 15 … versionadded:: 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)
- Параметры:
op – Вызов оператора.
*other – «другая» сторона операции. Для большинства операций это будет один скаляр.
**kwargs – модификаторы. Они могут передаваться специальными операторами, такими как
ColumnOperators.contains()
.
-
method
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}
-
attribute
sqlalchemy.schema.Column.
proxy_set: util.generic_fn_descriptor[FrozenSet[Any]]¶ наследуется от
ColumnElement.proxy_set
атрибутаColumnElement
набор всех столбцов, которые мы проксируем
Начиная с версии 2.0 это явно деаннотированные столбцы. ранее это были фактически деаннотированные столбцы, но это не соблюдалось. аннотированные столбцы в основном не должны попадать в наборы, если это вообще возможно, потому что их поведение при хэшировании очень неэффективно.
-
method
sqlalchemy.schema.Column.
references(column: Column[Any]) bool ¶ Возвращает True, если этот Column ссылается на данный столбец через внешний ключ.
-
method
sqlalchemy.schema.Column.
regexp_match(pattern: Any, flags: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.regexp_match()
метода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
и обращается к встроенной программе Pythonre.match()
.другие бэкенды могут предоставлять специальные реализации.
Бэкенды без специальной реализации будут выдавать оператор как «REGEXP» или «NOT REGEXP». Это совместимо, например, с SQLite и MySQL.
В настоящее время поддержка регулярных выражений реализована для Oracle, PostgreSQL, MySQL и MariaDB. Частичная поддержка доступна для SQLite. Поддержка сторонних диалектов может отличаться.
- Параметры:
pattern – Строка шаблона регулярного выражения или предложение столбца.
flags – Любые флаги строк регулярных выражений для применения. Флаги, как правило, зависят от бэкенда. Это может быть строка или предложение столбца. Некоторые бэкенды, например PostgreSQL и MariaDB, могут альтернативно указывать флаги как часть шаблона. При использовании флага игнорирования регистра „i“ в PostgreSQL будет использован оператор соответствия регэкспа
~*
или!~*
.
Добавлено в версии 1.4.
См.также
-
method
sqlalchemy.schema.Column.
regexp_replace(pattern: Any, replacement: Any, flags: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.regexp_replace()
метода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. Поддержка сторонних диалектов может отличаться.
- Параметры:
pattern – Строка шаблона регулярного выражения или предложение столбца.
pattern – Заменяющая строка или предложение столбца.
flags – Любые флаги строк регулярных выражений для применения. Флаги, как правило, зависят от бэкенда. Это может быть строка или предложение столбца. Некоторые бэкенды, например PostgreSQL и MariaDB, могут альтернативно указывать флаги как часть шаблона.
Добавлено в версии 1.4.
См.также
-
method
sqlalchemy.schema.Column.
reverse_operate(op: OperatorType, other: Any, **kwargs: Any) ColumnElement[Any] ¶ наследуется от
ColumnElement.reverse_operate()
методаColumnElement
Обратное действие над аргументом.
Используется так же, как и
operate()
.
-
method
sqlalchemy.schema.Column.
self_group(against: Optional[OperatorType] = None) ColumnElement[Any] ¶ наследуется от
ColumnElement.self_group()
методаColumnElement
Примените «группировку» к этому
ClauseElement
.Этот метод переопределяется подклассами для возврата конструкции «группировки», т.е. круглой скобки. В частности, она используется «бинарными» выражениями для обеспечения группировки вокруг себя при помещении в более крупное выражение, а также конструкциями
select()
при помещении в предложение FROM другогоselect()
. (Обратите внимание, что подзапросы обычно следует создавать с помощью методаSelect.alias()
, поскольку многие платформы требуют, чтобы вложенные операторы SELECT были именованными).Поскольку выражения составляются вместе, применение
self_group()
происходит автоматически - код конечного пользователя никогда не должен использовать этот метод напрямую. Обратите внимание, что в конструкциях клаузул SQLAlchemy учитывается приоритет операторов - поэтому скобки могут не понадобиться, например, в выраженииx OR (y AND z)
- AND имеет приоритет над OR.Базовый метод
self_group()
ClauseElement
просто возвращает self.
наследуется от
ColumnElement.shares_lineage()
методаColumnElement
Возвращает True, если данный
ColumnElement
имеет общего предка с даннымColumnElement
.
-
method
sqlalchemy.schema.Column.
startswith(other: Any, escape: Optional[str] = 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. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.startswith.autoescape
не установлен в True.autoescape – boolean; при 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"
перед передачей в базу данных.
-
attribute
sqlalchemy.schema.Column.
timetuple: Literal[None] = None¶ наследуется от
ColumnOperators.timetuple
атрибутаColumnOperators
Hack, позволяет сравнивать объекты времени даты на LHS.
-
attribute
sqlalchemy.schema.Column.
unique: Optional[bool]¶ Значение параметра
Column.unique
.Не указывает, действительно ли данный
Column
подвержен уникальному ограничению или нет; используйтеTable.indexes
иTable.constraints
.
-
method
sqlalchemy.schema.Column.
unique_params(*optionaldict, **kwargs)¶ наследуется от
Immutable.unique_params()
методаImmutable
Возвращает копию с замененными элементами
bindparam()
.Та же функциональность, что и
ClauseElement.params()
, за исключением добавления unique=True к параметрам привязки, чтобы можно было использовать несколько утверждений.
-
method
- class sqlalchemy.schema.MetaData¶
Коллекция объектов
Table
и связанных с ними схемных конструкций.Хранит коллекцию объектов
Table
, а также необязательную привязку кEngine
илиConnection
. Если привязка установлена, объектыTable
в коллекции и их столбцы могут участвовать в неявном выполнении SQL.Сами объекты
Table
хранятся в словареMetaData.tables
.MetaData
является потокобезопасным объектом для операций чтения. Создание новых таблиц внутри одного объектаMetaData
, явно или через отражение, может быть не полностью потокобезопасным.См.также
Описание баз данных с помощью метаданных - Введение в метаданные базы данных
Members
__init__(), clear(), create_all(), drop_all(), reflect(), remove(), sorted_tables, tables
Классная подпись
класс
sqlalchemy.schema.MetaData
(sqlalchemy.schema.HasSchemaAttr
)-
method
sqlalchemy.schema.MetaData.
__init__(schema: Optional[str] = None, quote_schema: Optional[bool] = None, naming_convention: Optional[Dict[str, str]] = None, info: Optional[_InfoType] = None) None ¶ Создайте новый объект MetaData.
- Параметры:
schema – Схема по умолчанию, которую следует использовать для
Table
,Sequence
и потенциально других объектов, связанных с этимMetaData
. По умолчанию используетсяNone
. … см. также:: Указание имени схемы по умолчанию с помощью метаданных - подробности об использовании параметраMetaData.schema
.Table.schema
Sequence.schema
quote_schema – Устанавливает флаг
quote_schema
для техTable
,Sequence
и других объектов, которые используют локальное имяschema
.info – Необязательный словарь данных, который будет заполнен в атрибут
SchemaItem.info
этого объекта.naming_convention – словарь, ссылающийся на значения, которые будут устанавливать соглашения об именовании по умолчанию для объектов
Constraint
иIndex
, для тех объектов, которым имя не задано явно. Ключами этого словаря могут быть: * класс ограничений или индекс, например, классUniqueConstraint
,ForeignKeyConstraint
, классIndex
* строковая мнемоника для одного из известных классов ограничений;"fk"
,"pk"
,"ix"
,"ck"
,"uq"
для внешнего ключа, первичного ключа, индекса, проверки и уникального ограничения, соответственно. * строковое имя определяемого пользователем «маркера», который может быть использован для определения новых маркеров именования. Значения, связанные с каждым ключом «constraint class» или «constraint mnemonic», представляют собой шаблоны именования строк, такие как"uq_%(table_name)s_%(column_0_name)s"
, которые описывают, как должно быть составлено имя. Значения, связанные с пользовательскими ключами «token», должны быть callables формыfn(constraint, table)
, которая принимает объект constraint/index иTable
в качестве аргументов, возвращая строковый результат. Имена встроенных функций следующие, некоторые из них могут быть доступны только для определенных типов ограничений: *%(table_name)s
- имя объектаTable
, связанного с ограничением. *%(referred_table_name)s
- имя объектаTable
, связанного с целью ссылкиForeignKeyConstraint
. *%(column_0_name)s
- имя объектаColumn
в индексной позиции «0» в ограничении. *%(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
было задано явное имя заранее. * user-defined: любой дополнительный токен может быть реализован путем передачи его вместе сfn(constraint, table)
вызываемым словарем naming_convention. … versionadded:: 1.3.0 - добавлены новые%(column_0N_name)s
,%(column_0_N_name)s
и связанные с ними маркеры, которые создают конкатенации имен, ключей или меток для всех столбцов, на которые ссылается данное ограничение. … seealso:: Настройка соглашений об именовании ограничений - для подробных примеров использования.
-
method
sqlalchemy.schema.MetaData.
clear() None ¶ Очистить все объекты Table из этих метаданных.
-
method
sqlalchemy.schema.MetaData.
create_all(bind: _CreateDropBind, tables: Optional[_typing_Sequence[Table]] = None, checkfirst: bool = True) None ¶ Создайте все таблицы, хранящиеся в этих метаданных.
По умолчанию условный, не будет пытаться воссоздать таблицы, уже присутствующие в целевой базе данных.
- Параметры:
bind – Код
Connection
илиEngine
, используемый для доступа к базе данных.tables – Необязательный список объектов
Table
, который является подмножеством всех таблиц вMetaData
(остальные игнорируются).checkfirst – По умолчанию True, не выдавать CREATE для таблиц, уже присутствующих в целевой базе данных.
-
method
sqlalchemy.schema.MetaData.
drop_all(bind: _CreateDropBind, tables: Optional[_typing_Sequence[Table]] = None, checkfirst: bool = True) None ¶ Отбросьте все таблицы, хранящиеся в этих метаданных.
Условный по умолчанию, не будет пытаться сбросить таблицы, не присутствующие в целевой базе данных.
- Параметры:
bind – Код
Connection
илиEngine
, используемый для доступа к базе данных.tables – Необязательный список объектов
Table
, который является подмножеством всех таблиц вMetaData
(остальные игнорируются).checkfirst – По умолчанию установлено значение True, выдавать DROPs только для таблиц, наличие которых подтверждено в целевой базе данных.
-
method
sqlalchemy.schema.MetaData.
reflect(bind: Union[Engine, Connection], schema: Optional[str] = None, views: bool = False, only: Optional[_typing_Sequence[str]] = None, extend_existing: bool = False, autoload_replace: bool = True, resolve_fks: bool = True, **dialect_kwargs: Any) None ¶ Загрузите все доступные определения таблиц из базы данных.
Автоматически создает
Table
записи в этомMetaData
для любой таблицы, имеющейся в базе данных, но еще не присутствующей вMetaData
. Может вызываться несколько раз, чтобы подобрать таблицы, недавно добавленные в базу данных, однако никаких специальных действий не предпринимается, если таблица в этомMetaData
больше не существует в базе данных.- Параметры:
bind – Код
Connection
илиEngine
, используемый для доступа к базе данных.schema – Необязательно, запрос и отражение таблиц из альтернативной схемы. Если None, то используется схема, связанная с этим
MetaData
, если таковая имеется.views – Если True, то также отражает представления (материализованные и обычные).
only – Необязательно. Загружает только подмножество доступных именованных таблиц. Может быть задана в виде последовательности имен или вызываемой таблицы. Если указана последовательность имен, будут отражены только эти таблицы. Если запрашиваемая таблица недоступна, будет выдана ошибка. Именованные таблицы, уже присутствующие в данном
MetaData
, игнорируются. Если предоставлена вызываемая таблица, она будет использоваться в качестве булева предиката для фильтрации списка потенциальных имен таблиц. Callable вызывается с именем таблицы и экземпляром данногоMetaData
в качестве позиционных аргументов и должна возвращать истинное значение для любой таблицы, которая будет отражена.extend_existing – Передается каждому
Table
какTable.extend_existing
.autoload_replace – Передается каждому
Table
какTable.autoload_replace
.resolve_fks – если True, отражать объекты
Table
, связанные с объектамиForeignKey
, расположенными в каждомTable
. ДляMetaData.reflect()
это имеет эффект отражения связанных таблиц, которые в противном случае могли бы отсутствовать в списке отражаемых таблиц, например, если ссылающаяся таблица находится в другой схеме или опущена через параметрMetaData.reflect.only
. При значении False объектыForeignKey
не следуют кTable
, на которые они ссылаются, однако если связанная таблица также входит в список таблиц, которые будут отражены в любом случае, объектForeignKey
все равно разрешится в связанную с нимTable
после завершения операцииMetaData.reflect()
. По умолчанию имеет значение True. … versionadded:: 1.3.0 .. seealso::Table.resolve_fks
**dialect_kwargs – Дополнительные аргументы ключевых слов, не упомянутые выше, зависят от диалекта и передаются в форме
<dialectname>_<argname>
. Подробную информацию о документированных аргументах смотрите в документации по отдельному диалекту по адресу Диалекты.
См.также
Отражение объектов базы данных
DDLEvents.column_reflect()
- Событие, используемое для настройки отраженных столбцов. Обычно используется для обобщения типов с помощьюTypeEngine.as_generic()
.Отражение с помощью типов, не зависящих от базы данных - описывает, как отражать таблицы, используя общие типы.
-
method
sqlalchemy.schema.MetaData.
remove(table: Table) None ¶ Удалить заданный объект Table из этих метаданных.
-
attribute
sqlalchemy.schema.MetaData.
sorted_tables¶ Возвращает список объектов
Table
, отсортированных в порядке зависимости от внешнего ключа.При сортировке объекты
Table
, имеющие зависимости, будут располагаться сначала перед самими зависимостями, представляя порядок, в котором они могут быть созданы. Чтобы получить порядок, в котором таблицы будут сброшены, используйте встроенную в Python функциюreversed()
.Предупреждение
Атрибут
MetaData.sorted_tables
сам по себе не может обеспечить автоматическое разрешение циклов зависимости между таблицами, которые обычно вызываются взаимозависимыми ограничениями внешнего ключа. При обнаружении таких циклов внешние ключи этих таблиц исключаются из рассмотрения в сортировке. При возникновении такого состояния выдается предупреждение, которое в будущем выпуске будет повышено как исключение. Таблицы, не являющиеся частью цикла, все равно будут возвращены в порядке зависимости.Чтобы разрешить эти циклы, параметр
ForeignKeyConstraint.use_alter
может быть применен к тем ограничениям, которые создают цикл. В качестве альтернативы, функцияsort_tables_and_constraints()
автоматически возвращает ограничения по внешнему ключу в отдельную коллекцию при обнаружении циклов, чтобы их можно было применить к схеме отдельно.Изменено в версии 1.3.17: - a warning is emitted when
MetaData.sorted_tables
cannot perform a proper sort due to cyclical dependencies. This will be an exception in a future release. Additionally, the sort will continue to return other tables not involved in the cycle in dependency order which was not the case previously.
-
attribute
sqlalchemy.schema.MetaData.
tables: util.FacadeDict[str, Table]¶ Словарь объектов
Table
с ключом по их имени или «ключу таблицы».Точный ключ определяется атрибутом
Table.key
; для таблицы без атрибутаTable.schema
это то же самое, чтоTable.name
. Для таблицы со схемой он обычно имеет видschemaname.tablename
.См.также
-
method
- class sqlalchemy.schema.SchemaConst¶
Перечисление.
Members
Классная подпись
класс
sqlalchemy.schema.SchemaConst
(enum.Enum
)-
attribute
sqlalchemy.schema.SchemaConst.
BLANK_SCHEMA = 2¶ Символ, указывающий, что
Table
илиSequence
должен иметь „None“ для своей схемы, даже если родительскийMetaData
указал схему.
-
attribute
sqlalchemy.schema.SchemaConst.
NULL_UNSPECIFIED = 3¶ Символ, указывающий на то, что ключевое слово «nullable» не было передано в колонку.
Это используется для различения случаев передачи
nullable=None
вColumn
, что имеет особое значение для некоторых бэкендов, таких как SQL Server.
-
attribute
sqlalchemy.schema.SchemaConst.
RETAIN_SCHEMA = 1¶ Символ, указывающий, что объект
Table
,Sequence
или в некоторых случаяхForeignKey
, в ситуациях, когда объект копируется для операцииTable.to_metadata()
, должен сохранить имя схемы, которое он уже имеет.
-
attribute
- class sqlalchemy.schema.SchemaItem¶
Базовый класс для элементов, определяющих схему базы данных.
Members
Классная подпись
класс
sqlalchemy.schema.SchemaItem
(sqlalchemy.sql.expression.SchemaEventTarget
,sqlalchemy.sql.visitors.Visitable
)-
attribute
sqlalchemy.schema.SchemaItem.
info¶ Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
SchemaItem
.Словарь автоматически создается при первом обращении к нему. Он также может быть указан в конструкторе некоторых объектов, таких как
Table
иColumn
.
-
attribute
- function sqlalchemy.schema.insert_sentinel(name: Optional[str] = None, type_: Optional[_TypeEngineArgument[_T]] = None, *, default: Optional[Any] = None, omit_from_statements: bool = True) Column[Any] ¶
Предоставляет суррогат
Column
, который будет действовать как выделенный столбец вставки sentinel, позволяя эффективные массовые вставки с детерминированной сортировкой RETURNING для таблиц, которые иначе не имеют подходящих конфигураций первичного ключа.Добавление этого столбца в объект
Table
требует, чтобы соответствующая таблица базы данных действительно имела этот столбец, поэтому при добавлении его в существующую модель, существующие таблицы базы данных должны быть перенесены (например, с помощью ALTER TABLE или аналогичного метода), чтобы включить этот столбец.О том, как используется этот объект, см. раздел Настройка столбцов часовых в составе раздела Поведение «Вставка многих значений» для операторов INSERT.
Возвращаемый
Column
будет по умолчанию целочисленным столбцом с нулевым значением и будет использовать специфический для sentinel генератор по умолчанию, используемый только в операциях «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
. Вызов конструктораTable
с тем же именем и тем же аргументомMetaData
во второй раз вернет тот же объектTable
- таким образом, конструкторTable
действует как функция реестра.См.также
Описание баз данных с помощью метаданных - Введение в метаданные базы данных
Members
__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: Optional[Union[str, Literal[SchemaConst.BLANK_SCHEMA]]] = None, quote: Optional[bool] = None, quote_schema: Optional[bool] = None, autoload_with: Optional[Union[Engine, Connection]] = None, autoload_replace: bool = True, keep_existing: bool = False, extend_existing: bool = False, resolve_fks: bool = True, include_columns: Optional[Collection[str]] = None, implicit_returning: bool = True, comment: Optional[str] = None, info: Optional[Dict[Any, Any]] = None, listeners: Optional[_typing_Sequence[Tuple[str, Callable[..., Any]]]] = None, prefixes: Optional[_typing_Sequence[str]] = None, _extend_on: Optional[Set[Table]] = None, _no_init: bool = True, **kw: Any) None ¶ Конструктор для
Table
.- Параметры:
name – Имя этой таблицы, представленное в базе данных. Имя таблицы, вместе со значением параметра
schema
, образует ключ, который однозначно идентифицирует даннуюTable
в рамках принадлежащей ей коллекцииMetaData
. Дополнительные вызовыTable
с тем же именем, метаданными и именем схемы вернут тот же объектTable
. Имена, не содержащие символов верхнего регистра, рассматриваются как имена, нечувствительные к регистру, и не берутся в кавычки, если они не являются зарезервированными словами или не содержат специальных символов. Имя с любым количеством символов верхнего регистра считается чувствительным к регистру и будет отправлено в кавычках. Чтобы включить безусловное цитирование для имени таблицы, укажите флагquote=True
в конструкторе или используйте конструкциюquoted_name
для задания имени.metadata – объект
MetaData
, который будет содержать эту таблицу. Метаданные используются как точка связи этой таблицы с другими таблицами, на которые ссылаются через внешний ключ. Они также могут быть использованы для связи этой таблицы с конкретнойConnection
илиEngine
.*args – Дополнительные позиционные аргументы используются в основном для добавления списка объектов
Column
, содержащихся в этой таблице. По аналогии со стилем оператора CREATE TABLE здесь могут быть добавлены другие конструкцииSchemaItem
, включаяPrimaryKeyConstraint
иForeignKeyConstraint
.autoload_replace – По умолчанию
True
; при использованииTable.autoload_with
в сочетании сTable.extend_existing
указывает, чтоColumn
объекты, присутствующие в уже существующемTable
объекте, должны быть заменены колонками с тем же именем, полученными из процесса автозагрузки. ПриFalse
столбцы, уже присутствующие под существующими именами, будут пропущены в процессе отражения. Обратите внимание, что эта настройка не влияет на объектыColumn
, указанные программно в вызовеTable
, который также находится в автозагрузке; эти объектыColumn
всегда будут заменять существующие колонки с тем же именем, когдаTable.extend_existing
будетTrue
. … seealso::Table.autoload_with
Table.extend_existing
autoload_with – Объект
Engine
илиConnection
, или объектInspector
, возвращаемыйinspect()
против одного, с которым будет отражаться данный объектTable
. Если установлено значение не None, процесс автозагрузки будет происходить для этой таблицы на данном движке или соединении. … см. также:: Отражение объектов базы данныхDDLEvents.column_reflect()
Отражение с помощью типов, не зависящих от базы данныхextend_existing – Когда
True
, указывает, что если этотTable
уже присутствует в данномMetaData
, примените дальнейшие аргументы внутри конструктора к существующемуTable
. ЕслиTable.extend_existing
илиTable.keep_existing
не установлены, и заданное имя новойTable
ссылается наTable
, которая уже присутствует в целевой коллекцииMetaData
, и этаTable
задает дополнительные столбцы или другие конструкции или флаги, которые изменяют состояние таблицы, то возникает ошибка. Цель этих двух взаимоисключающих флагов - указать, какие действия следует предпринять, если указанTable
, который совпадает с существующимTable
, но указывает дополнительные конструкции.Table.extend_existing
также будет работать в сочетании сTable.autoload_with
для запуска новой операции отражения против базы данных, даже еслиTable
с тем же именем уже присутствует в целевойMetaData
; вновь отраженныеColumn
объекты и другие опции будут добавлены в состояниеTable
, потенциально перезаписывая существующие столбцы и опции с тем же именем. Как и всегда в случае сTable.autoload_with
, объектыColumn
могут быть указаны в том же конструктореTable
, который будет иметь приоритет. Ниже существующая таблицаmytable
будет дополнена объектамиColumn
, как отраженными из базы данных, так и заданнымиColumn
с именем «y»:: Table(«mytable», metadata, Column(„y“, Integer), extend_existing=True, autoload_with=engine ) … seealso::Table.autoload_with
Table.autoload_replace
Table.keep_existing
implicit_returning – True по умолчанию - указывает, что RETURNING может использоваться, обычно ORM, для получения значений, генерируемых сервером, таких как значения первичных ключей и значения по умолчанию на стороне сервера, на тех бэкендах, которые поддерживают RETURNING. В современной SQLAlchemy, как правило, нет причин изменять эту настройку, за исключением некоторых специфических для бэкенда случаев (см. Триггеры в документации по диалекту SQL Server для одного из таких примеров).
include_columns – Список строк, указывающий на подмножество колонок, которые должны быть загружены с помощью операции
autoload
; колонки таблицы, отсутствующие в этом списке, не будут представлены в результирующем объектеTable
. По умолчанию установлено значениеNone
, которое указывает, что все столбцы должны быть отражены.resolve_fks – Отражать или нет объекты
Table
, связанные с этим объектом через объектыForeignKey
, когда указаноTable.autoload_with
. По умолчанию установлено значение True. Установите значение False, чтобы отключить отражение связанных таблиц при появлении объектовForeignKey
; это может использоваться либо для экономии вызовов SQL, либо для того, чтобы избежать проблем со связанными таблицами, к которым невозможно получить доступ. Обратите внимание, что если связанная таблица уже присутствует в коллекцииMetaData
или появится позже, объектForeignKey
, связанный с этойTable
, будет нормально разрешаться в эту таблицу. … версия добавлена:: 1.3 .. seealso::MetaData.reflect.resolve_fks
info – Необязательный словарь данных, который будет заполнен в атрибут
SchemaItem.info
этого объекта.keep_existing – Когда
True
, указывает, что если эта таблица уже присутствует в даннойMetaData
, игнорировать дальнейшие аргументы в конструкторе к существующейTable
, и вернутьTable
объект в первоначально созданном виде. Это делается для того, чтобы функция, которая хочет определить новыйTable
при первом вызове, при последующих вызовах возвращала тот жеTable
, без применения каких-либо объявлений (в частности, ограничений) во второй раз. ЕслиTable.extend_existing
илиTable.keep_existing
не установлены, а заданное имя новойTable
ссылается наTable
, которая уже присутствует в целевой коллекцииMetaData
, и этаTable
определяет дополнительные столбцы или другие конструкции или флаги, которые изменяют состояние таблицы, то будет выдана ошибка. Цель этих двух взаимоисключающих флагов - указать, какие действия следует предпринять, если указанTable
, который совпадает с существующимTable
, но указывает дополнительные конструкции. … seealso::Table.extend_existing
listeners – Список кортежей формы
(<eventname>, <fn>)
, которые будут переданы вlisten()
при построении. Этот альтернативный хук дляlisten()
позволяет установить функцию слушателя, специфичную для данногоTable
, до начала процесса «автозагрузки». Исторически это было предназначено для использования с событиемDDLEvents.column_reflect()
, однако обратите внимание, что теперь этот крючок события может быть связан непосредственно с объектомMetaData
:: def listen_for_reflect(table, column_info): «обрабатывать событие отражения колонок» # … t = Table( „sometable“, autoload_with=engine, listeners=[ („column_reflect“, listen_for_reflect) ]) … seealso::DDLEvents.column_reflect()
must_exist – Когда
True
, указывает, что эта Таблица уже должна присутствовать в данной коллекцииMetaData
, иначе возникает исключение.prefixes – Список строк, которые нужно вставить после CREATE в операторе CREATE TABLE. Они будут разделены пробелами.
quote – Включить или выключить принудительное цитирование имени этой таблицы, соответствующее
True
илиFalse
. Если оставить значение по умолчаниюNone
, то идентификатор столбца будет заключен в кавычки в соответствии с тем, является ли имя чувствительным к регистру (идентификаторы, имеющие хотя бы один символ верхнего регистра, рассматриваются как чувствительные к регистру), или если это зарезервированное слово. Этот флаг нужен только для принудительного цитирования зарезервированного слова, которое не известно диалекту SQLAlchemy. … примечание:: установка этого флага в значениеFalse
не обеспечит нечувствительное к регистру поведение для отражения таблицы; отражение таблицы всегда будет искать имя в смешанном регистре с учетом регистра. Нечувствительные к регистру имена задаются в SQLAlchemy только путем указания имени со всеми символами нижнего регистра.quote_schema – то же, что и „quote“, но применяется к идентификатору схемы.
schema – Имя схемы для этой таблицы, которое требуется, если таблица находится в схеме, отличной от схемы, выбранной по умолчанию для подключения к базе данных движка. По умолчанию имеет значение
None
. Если владелецMetaData
этойTable
задает свой собственный параметрMetaData.schema
, то это имя схемы будет применено к этойTable
, если параметр схемы здесь установлен вNone
. Чтобы задать пустое имя схемы дляTable
, которое в противном случае будет использовать схему, установленную для принадлежащего емуMetaData
, укажите специальный символBLANK_SCHEMA
. Правила цитирования для имени схемы такие же, как и для параметраname
, в том смысле, что цитирование применяется для зарезервированных слов или имен, чувствительных к регистру; чтобы включить безусловное цитирование для имени схемы, укажите флагquote_schema=True
в конструкторе или используйте конструкциюquoted_name
для указания имени.comment – Необязательная строка, которая будет отображать SQL-комментарий при создании таблицы. … versionadded:: 1.2 Добавлен параметр
Table.comment
кTable
.**kw – Дополнительные аргументы ключевых слов, не упомянутые выше, зависят от диалекта и передаются в форме
<dialectname>_<argname>
. Подробную информацию о документированных аргументах смотрите в документации по отдельному диалекту по адресу Диалекты.
-
method
sqlalchemy.schema.Table.
add_is_dependent_on(table: Table) None ¶ Добавьте «зависимость» для этой таблицы.
Это еще один объект Table, который должен быть создан сначала, прежде чем этот объект будет создан, или сброшен после этого объекта.
Обычно зависимости между таблицами определяются через объекты ForeignKey. Однако для других ситуаций, которые создают зависимости вне внешних ключей (правила, наследование), этот метод может вручную установить такую связь.
-
method
sqlalchemy.schema.Table.
alias(name: Optional[str] = None, flat: bool = False) NamedFromClause ¶ наследуется от
FromClause.alias()
методаFromClause
Возвращает псевдоним данного
FromClause
.Например:
a2 = some_table.alias('a2')
Приведенный выше код создает объект
Alias
, который можно использовать как предложение FROM в любом операторе SELECT.
-
method
sqlalchemy.schema.Table.
append_column(column: ColumnClause[Any], replace_existing: bool = False) None ¶ Добавьте
Column
к этомуTable
.Ключ» вновь добавленного
Column
, т.е. значение его атрибута.key
, будет затем доступен в коллекции.c
этогоTable
, а определение столбца будет включено в любые операторы CREATE TABLE, SELECT, UPDATE и т.д., созданные на основе этой конструкцииTable
.Обратите внимание, что это не изменяет определение таблицы, как она существует в любой базовой базе данных, предполагая, что таблица уже была создана в базе данных. Реляционные базы данных поддерживают добавление столбцов в существующие таблицы с помощью команды SQL ALTER, которая должна быть выполнена для уже существующей таблицы, не содержащей вновь добавленного столбца.
- Параметры:
replace_existing – При
True
позволяет заменять существующие колонки. КогдаFalse
, по умолчанию, будет выдано предупреждение, если столбец с таким же.key
уже существует. Будущая версия sqlalchemy вместо этого будет выдавать предупреждение. … versionadded:: 1.4.0
-
method
sqlalchemy.schema.Table.
append_constraint(constraint: Union[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
. Этот словарь содержит список имен аргументов, принимаемых различными конструкциями уровня схемы от имени диалекта.Новые диалекты, как правило, должны определять этот словарь сразу как член данных класса диалекта. Случаи добавления имен аргументов ad-hoc обычно используются для кода конечного пользователя, который также использует пользовательскую схему компиляции, потребляющую дополнительные аргументы.
- Параметры:
dialect_name – имя диалекта. Диалект должен быть локализуемым, в противном случае выдается сообщение
NoSuchModuleError
. Диалект также должен включать существующую коллекциюDefaultDialect.construct_arguments
, указывающую на то, что он участвует в системе проверки ключевых слов-аргументов и умолчаний, иначе будет выданоArgumentError
. Если диалект не включает эту коллекцию, то любой аргумент ключевого слова может быть указан от имени уже этого диалекта. Все диалекты, упакованные в SQLAlchemy, включают эту коллекцию, однако для диалектов сторонних производителей поддержка может отличаться.argument_name – имя параметра.
default – значение параметра по умолчанию.
-
attribute
sqlalchemy.schema.Table.
autoincrement_column¶ Возвращает объект
Column
, который в данный момент представляет колонку «auto increment», если таковая имеется, иначе возвращает 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
Коллекция объектов
ColumnElement
, поддерживаемых даннымFromClause
, основанная на именах.Коллекция
columns
, илиc
, является шлюзом для построения 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: Optional[Union[Engine, Connection]] = None, dialect: Optional[Dialect] = 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]¶ Коллекция всех объектов
Constraint
, связанных с даннымTable
.Включает
PrimaryKeyConstraint
,ForeignKeyConstraint
,UniqueConstraint
,CheckConstraint
. Отдельная коллекцияTable.foreign_key_constraints
относится к коллекции всех объектовForeignKeyConstraint
, а атрибутTable.primary_key
относится к единственномуPrimaryKeyConstraint
, связанному сTable
.
-
method
sqlalchemy.schema.Table.
corresponding_column(column: KeyedColumnElement[Any], require_embedded: bool = False) Optional[KeyedColumnElement[Any]] ¶ наследуется от
Selectable.corresponding_column()
методаSelectable
Учитывая
ColumnElement
, возвращает экспортированный объектColumnElement
из коллекцииSelectable.exported_columns
данногоSelectable
, который соответствует исходномуColumnElement
через общий граф предков.- Параметры:
column – цель
ColumnElement
для сопоставления.require_embedded – возвращает соответствующие столбцы для данного
ColumnElement
только в том случае, если данныйColumnElement
действительно присутствует в подэлементе данногоSelectable
. Обычно столбец будет соответствовать, если он просто имеет общего предка с одним из экспортированных столбцов данногоSelectable
.
См.также
Selectable.exported_columns
-ColumnCollection
, который используется для операции.ColumnCollection.corresponding_column()
- метод реализации.
-
method
sqlalchemy.schema.Table.
create(bind: _CreateDropBind, checkfirst: bool = False) None ¶ Выдать утверждение
CREATE
для данногоTable
, используя для связи данноеConnection
илиEngine
.См.также
-
method
sqlalchemy.schema.Table.
delete() Delete ¶ наследуется от
TableClause.delete()
методаTableClause
Сгенерируйте конструкцию
delete()
против данногоTableClause
.Например:
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 ¶ Выдать утверждение
DROP
для данногоTable
, используя для связи данное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¶ ForeignKeyConstraint
объектов, на которые ссылается данныйTable
.Этот список формируется из коллекции объектов
ForeignKey
, связанных в данный момент.
-
attribute
sqlalchemy.schema.Table.
foreign_keys¶ наследуется от
FromClause.foreign_keys
атрибутаFromClause
Возвращает коллекцию объектов маркеров
ForeignKey
, на которые ссылается данный FromClause.Каждый
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]¶ Коллекция всех объектов
Index
, связанных с даннымTable
.См.также
-
attribute
sqlalchemy.schema.Table.
info¶ наследуется от
SchemaItem.info
атрибутаSchemaItem
Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
SchemaItem
.Словарь автоматически создается при первом обращении к нему. Он также может быть указан в конструкторе некоторых объектов, таких как
Table
иColumn
.
-
attribute
sqlalchemy.schema.Table.
inherit_cache: Optional[bool] = None¶ наследуется от
HasCacheKey.inherit_cache
атрибутаHasCacheKey
Укажите, должен ли данный экземпляр
HasCacheKey
использовать схему генерации ключей кэша, используемую его непосредственным суперклассом.По умолчанию атрибут имеет значение
None
, что указывает на то, что конструкция еще не приняла во внимание целесообразность ее участия в кэшировании; функционально это эквивалентно установке значенияFalse
, за исключением того, что при этом выдается предупреждение.Этот флаг может быть установлен в
True
на определенном классе, если SQL, соответствующий объекту, не изменяется на основе атрибутов, локальных для этого класса, а не его суперкласса.См.также
Включение поддержки кэширования для пользовательских конструкций - общие направляющие для установки атрибута
HasCacheKey.inherit_cache
для сторонних или определенных пользователем конструкций SQL.
-
method
sqlalchemy.schema.Table.
insert() Insert ¶ наследуется от
TableClause.insert()
методаTableClause
Сгенерируйте конструкцию
Insert
против данногоTableClause
.Например:
table.insert().values(name='foo')
Информацию об аргументах и использовании см. в
insert()
.
-
method
sqlalchemy.schema.Table.
is_derived_from(fromclause: Optional[FromClause]) bool ¶ наследуется от
FromClause.is_derived_from()
методаFromClause
Возвращает
True
, если данныйFromClause
является «производным» от данногоFromClause
.Например, псевдоним таблицы является производным от этой таблицы.
-
method
sqlalchemy.schema.Table.
join(right: _FromClauseArgument, onclause: Optional[_ColumnExpressionArgument[bool]] = None, isouter: bool = False, full: bool = False) Join ¶ наследуется от
FromClause.join()
методаFromClause
Возвращает
Join
из данногоFromClause
в другой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
- Параметры:
right – правая сторона соединения; это любой объект
FromClause
, например, объектTable
, а также может быть совместимым с selectable объектом, например, ORM-mapped class.onclause – выражение SQL, представляющее предложение ON для объединения. Если оставить значение
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
.Это значение используется в качестве ключа словаря в коллекции
MetaData.tables
. Обычно оно совпадает со значениемTable.name
для таблицы без набораTable.schema
; в противном случае оно обычно имеет видschemaname.tablename
.
-
attribute
sqlalchemy.schema.Table.
kwargs¶ наследуется от
DialectKWArgs.kwargs
атрибутаDialectKWArgs
Синоним для
DialectKWArgs.dialect_kwargs
.
-
method
sqlalchemy.schema.Table.
lateral(name: Optional[str] = None) LateralFromClause ¶ наследуется от
Selectable.lateral()
методаSelectable
Возвращает ЛАТЕРАЛЬНЫЙ псевдоним данного
Selectable
.Возвращаемым значением является конструкция
Lateral
, также предоставляемая функцией верхнего уровняlateral()
.См.также
ЛАТЕРАЛЬНАЯ корреляция - обзор использования.
-
method
sqlalchemy.schema.Table.
outerjoin(right: _FromClauseArgument, onclause: Optional[_ColumnExpressionArgument[bool]] = 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 – правая сторона соединения; это любой объект
FromClause
, например, объектTable
, а также может быть совместимым с selectable объектом, например, ORM-mapped class.onclause – выражение SQL, представляющее предложение ON для объединения. Если оставить значение
None
,FromClause.join()
попытается объединить две таблицы на основе отношения внешнего ключа.full – если True, отображает ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ вместо ЛЕВОГО ВНЕШНЕГО СОЕДИНЕНИЯ.
-
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
атрибутаFromClause
Возвращает итерируемую коллекцию объектов
Column
, составляющих первичный ключ данного_selectable.FromClause
.Для объекта
Table
эта коллекция представлена объектомPrimaryKeyConstraint
, который сам является итерируемой коллекцией объектовColumn
.
-
method
sqlalchemy.schema.Table.
replace_selectable(old: FromClause, alias: Alias) Self ¶ наследуется от
Selectable.replace_selectable()
методаSelectable
Заменяет все вхождения
FromClause
„old“ на данный объектAlias
, возвращая копию этогоFromClause
.Не рекомендуется, начиная с версии 1.4: Метод
Selectable.replace_selectable()
является устаревшим и будет удален в одном из будущих выпусков. Аналогичная функциональность доступна через модуль sqlalchemy.sql.visitors.
-
attribute
sqlalchemy.schema.Table.
schema: Optional[str] = None¶ наследуется от
FromClause.schema
атрибутаFromClause
Определите атрибут „schema“ для данного
FromClause
.Обычно это
None
для большинства объектов, за исключениемTable
, где оно принимается как значение аргументаTable.schema
.
-
method
sqlalchemy.schema.Table.
select() Select ¶ наследуется от
FromClause.select()
методаFromClause
Возвращает SELECT данного
FromClause
.например:
stmt = some_table.select().where(some_table.c.id == 5)
См.также
select()
- метод общего назначения, позволяющий создавать произвольные списки столбцов.
-
method
sqlalchemy.schema.Table.
self_group(against: Optional[OperatorType] = None) ClauseElement ¶ наследуется от
ClauseElement.self_group()
методаClauseElement
Примените «группировку» к этому
ClauseElement
.Этот метод переопределяется подклассами для возврата конструкции «группировки», т.е. круглой скобки. В частности, она используется «бинарными» выражениями для обеспечения группировки вокруг себя при помещении в более крупное выражение, а также конструкциями
select()
при помещении в предложение FROM другогоselect()
. (Обратите внимание, что подзапросы обычно следует создавать с помощью метода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()
методаNamedFromClause
Возвращает объект
TableValuedColumn
для данногоFromClause
.TableValuedColumn
- этоColumnElement
, который представляет собой полную строку в таблице. Поддержка этой конструкции зависит от бэкенда и в различных формах поддерживается такими бэкендами, как PostgreSQL, Oracle и 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) {printsql}SELECT row_to_json(a) AS row_to_json_1 FROM a
Добавлено в версии 1.4.0b2.
-
method
sqlalchemy.schema.Table.
tablesample(sampling: Union[float, Function[Any]], name: Optional[str] = None, seed: Optional[roles.ExpressionElementRole[Any]] = None) TableSample ¶ наследуется от
FromClause.tablesample()
методаFromClause
Возвращает псевдоним TABLESAMPLE данного
FromClause
.Возвращаемым значением является конструкция
TableSample
, также предоставляемая функцией верхнего уровняtablesample()
.См.также
tablesample()
- руководство по использованию и параметры
-
method
sqlalchemy.schema.Table.
to_metadata(metadata: ~sqlalchemy.sql.schema.MetaData, schema: ~typing.Union[str, ~typing.Literal[<SchemaConst.RETAIN_SCHEMA: 1>]] = SchemaConst.RETAIN_SCHEMA, referred_schema_fn: ~typing.Optional[~typing.Callable[[~sqlalchemy.sql.schema.Table, ~typing.Optional[str], ~sqlalchemy.sql.schema.ForeignKeyConstraint, ~typing.Optional[str]], ~typing.Optional[str]]] = None, name: ~typing.Optional[str] = None) Table ¶ Возвращает копию данного
Table
, связанную с другимMetaData
.Например:
m1 = MetaData() user = Table('user', m1, Column('id', Integer, primary_key=True)) m2 = MetaData() user_copy = user.to_metadata(m2)
Изменено в версии 1.4: Функция
Table.to_metadata()
была переименована изTable.tometadata()
.- Параметры:
metadata – Целевой объект
MetaData
, в котором будет создан новый объектTable
.schema – необязательное строковое имя, указывающее на целевую схему. По умолчанию используется специальный символ
RETAIN_SCHEMA
, который указывает, что в новойTable
имя схемы не должно быть изменено. Если задано строковое имя, то новоеTable
будет иметь это новое имя в качестве.schema
. Если задано значениеNone
, схема будет установлена в соответствии со схемой, установленной на целевомMetaData
, которая обычно тожеNone
, если не задана явно:: m2 = MetaData(schema=“newschema“) # user_copy_one будет иметь «newschema» в качестве имени схемы user_copy_one = user. to_metadata(m2, schema=None) m3 = MetaData() # schema по умолчанию None # user_copy_two будет иметь None в качестве имени схемы user_copy_two = user.to_metadata(m3, schema=None)referred_schema_fn – необязательный вызываемый объект, который может быть предоставлен для того, чтобы указать имя схемы, которое должно быть присвоено таблице, на которую ссылается
ForeignKeyConstraint
. Вызываемая функция принимает родительскийTable
, целевую схему, на которую мы меняем, объектForeignKeyConstraint
и существующую «целевую схему» этого ограничения. Функция должна вернуть строковое имя схемы, которая должна быть применена. Чтобы сбросить схему на «нет», верните символBLANK_SCHEMA
. Для отсутствия изменений вернитеNone
илиRETAIN_SCHEMA
. … versionchanged:: 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: ~sqlalchemy.sql.schema.MetaData, schema: ~typing.Union[str, ~typing.Literal[<SchemaConst.RETAIN_SCHEMA: 1>]] = SchemaConst.RETAIN_SCHEMA, referred_schema_fn: ~typing.Optional[~typing.Callable[[~sqlalchemy.sql.schema.Table, ~typing.Optional[str], ~sqlalchemy.sql.schema.ForeignKeyConstraint, ~typing.Optional[str]], ~typing.Optional[str]]] = None, name: ~typing.Optional[str] = None) Table ¶ Возвращает копию данного
Table
, связанную с другимMetaData
.Не рекомендуется, начиная с версии 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()
, за исключением добавления unique=True к параметрам привязки, чтобы можно было использовать несколько утверждений.
-
method
sqlalchemy.schema.Table.
update() Update ¶ наследуется от
TableClause.update()
методаTableClause
Сгенерируйте конструкцию
update()
против данногоTableClause
.Например:
table.update().where(table.c.id==7).values(name='foo')
Информацию об аргументах и использовании см. в
update()
.
-
method