SQLAlchemy 2.0 Dokumentation
SQLAlchemy Core
- API für SQL-Anweisungen und Ausdrücke
- Schema Definition Language
- SQL Datentyp-Objekte
- Die Typenhierarchie¶
- Die „CamelCase“-Datentypen
- Die „UPPERCASE“-Datentypen
- Backend-spezifische „UPPERCASE“-Datentypen
- Verwendung von „UPPERCASE“- und Backend-spezifischen Typen für mehrere Backends
- Generische „CamelCase“-Typen
- SQL-Standard und mehrere Anbieter „UPPERCASE“-Typen
ARRAYBIGINTBINARYBLOBBOOLEANCHARCLOBDATEDATETIMEDECIMALDOUBLEDOUBLE_PRECISIONFLOATINTJSONINTEGERNCHARNVARCHARNUMERICREALSMALLINTTEXTTIMETIMESTAMPUUIDVARBINARYVARCHAR
- Benutzerdefinierte Typen
- Basis-Typ-API
- Die Typenhierarchie¶
- Engine und Connection verwenden
- Grundlagen der Core API
Projektversionen
- Vorher: SQL Datentyp-Objekte
- Weiter: Benutzerdefinierte Typen
- Nach oben: Startseite
- Auf dieser Seite
- Die Typenhierarchie
- Die „CamelCase“-Datentypen
- Die „UPPERCASE“-Datentypen
- Backend-spezifische „UPPERCASE“-Datentypen
- Verwendung von „UPPERCASE“- und Backend-spezifischen Typen für mehrere Backends
- Generische „CamelCase“-Typen
- SQL-Standard und mehrere Anbieter „UPPERCASE“-Typen
ARRAYBIGINTBINARYBLOBBOOLEANCHARCLOBDATEDATETIMEDECIMALDOUBLEDOUBLE_PRECISIONFLOATINTJSONINTEGERNCHARNVARCHARNUMERICREALSMALLINTTEXTTIMETIMESTAMPUUIDVARBINARYVARCHAR
Die Typenhierarchie¶
SQLAlchemy bietet Abstraktionen für die meisten gängigen Datenbankdatentypen sowie mehrere Techniken zur Anpassung von Datentypen.
Datenbanktypen werden durch Python-Klassen dargestellt, die alle letztendlich von der Basis-Typklasse, bekannt als TypeEngine, erben. Es gibt zwei allgemeine Kategorien von Datentypen, die sich beide auf unterschiedliche Weise innerhalb der Typenhierarchie ausdrücken. Die von einer einzelnen Datentypklasse verwendete Kategorie kann anhand der Verwendung von zwei verschiedenen Namenskonventionen identifiziert werden, nämlich „CamelCase“ und „UPPERCASE“.
Siehe auch
Einrichten von MetaData mit Table-Objekten - im SQLAlchemy Unified Tutorial. Veranschaulicht die rudimentärste Verwendung von TypeEngine-Typobjekten zur Definition von Table-Metadaten und führt das Konzept von Typobjekten im Tutorial-Format ein.
Die „CamelCase“-Datentypen¶
Die rudimentären Typen haben „CamelCase“-Namen wie String, Numeric, Integer und DateTime. Alle direkten Unterklassen von TypeEngine sind „CamelCase“-Typen. Die „CamelCase“-Typen sind in größtmöglichem Umfang **datenbankagnostisch**, was bedeutet, dass sie alle auf jedem Datenbank-Backend verwendet werden können, wo sie sich so verhalten, wie es für dieses Backend angemessen ist, um das gewünschte Verhalten zu erzielen.
Ein Beispiel für einen einfachen „CamelCase“-Datentyp ist String. Auf den meisten Backends entspricht die Verwendung dieses Datentyps in einer Tabellenspezifikation dem VARCHAR-Datenbanktyp, der auf dem Ziel-Backend verwendet wird, und liefert Zeichenkettenwerte von und zur Datenbank, wie im folgenden Beispiel gezeigt.
from sqlalchemy import MetaData
from sqlalchemy import Table, Column, Integer, String
metadata_obj = MetaData()
user = Table(
"user",
metadata_obj,
Column("user_name", String, primary_key=True),
Column("email_address", String(60)),
)Wenn eine bestimmte TypeEngine-Klasse in einer Table-Definition oder in irgendeinem SQL-Ausdruck insgesamt verwendet wird und keine Argumente benötigt werden, kann sie als Klasse selbst übergeben werden, d. h. ohne sie mit () zu instanziieren. Wenn Argumente benötigt werden, wie z. B. das Längenargument von 60 in der Spalte `"email_address"` oben, kann der Typ instanziiert werden.
Ein weiterer „CamelCase“-Datentyp, der spezifischeres Backend-Verhalten ausdrückt, ist der Boolean-Datentyp. Im Gegensatz zu String, das einen Zeichenketten-Datentyp darstellt, den alle Datenbanken haben, hat nicht jedes Backend einen echten „boolean“-Datentyp; einige verwenden Ganzzahlen oder BIT-Werte 0 und 1, einige haben boolesche Literal-Konstanten true und false, während andere das nicht tun. Für diesen Datentyp kann Boolean BOOLEAN auf einem Backend wie PostgreSQL, BIT auf dem MySQL-Backend und SMALLINT auf Oracle Database rendern. Wenn Daten mit diesem Typ von und zur Datenbank gesendet und empfangen werden, kann er, basierend auf dem verwendeten Dialekt, Python-numerische oder boolesche Werte interpretieren.
Die typische SQLAlchemy-Anwendung wird im Allgemeinen hauptsächlich „CamelCase“-Typen verwenden wollen, da diese im Allgemeinen das beste grundlegende Verhalten bieten und automatisch auf alle Backends portierbar sind.
Die Referenz für die allgemeine Menge der „CamelCase“-Datentypen finden Sie unten unter Generische „CamelCase“-Typen.
Die „UPPERCASE“-Datentypen¶
Im Gegensatz zu den „CamelCase“-Typen stehen die „UPPERCASE“-Datentypen. Diese Datentypen werden immer von einem bestimmten „CamelCase“-Datentyp abgeleitet und stellen immer einen **exakten** Datentyp dar. Bei Verwendung eines „UPPERCASE“-Datentyps wird der Name des Typs immer genau so gerendert, wie er angegeben ist, unabhängig davon, ob das aktuelle Backend ihn unterstützt oder nicht. Daher impliziert die Verwendung von „UPPERCASE“-Typen in einer SQLAlchemy-Anwendung, dass spezifische Datentypen erforderlich sind, was wiederum impliziert, dass die Anwendung normalerweise, ohne zusätzliche Schritte, auf die Backends beschränkt wäre, die den Typ genau so verwenden, wie er angegeben ist. Beispiele für UPPERCASE-Typen sind VARCHAR, NUMERIC, INTEGER und TIMESTAMP, die direkt von den zuvor erwähnten „CamelCase“-Typen String, Numeric, Integer bzw. DateTime abgeleitet werden.
Die „UPPERCASE“-Datentypen, die Teil von sqlalchemy.types sind, sind gängige SQL-Typen, die typischerweise auf mindestens zwei, wenn nicht mehr Backends verfügbar sein sollen.
Die Referenz für die allgemeine Menge der „UPPERCASE“-Datentypen finden Sie unten unter SQL-Standard und mehrere Anbieter „UPPERCASE“-Typen.
Backend-spezifische „UPPERCASE“-Datentypen¶
Die meisten Datenbanken haben auch ihre eigenen Datentypen, die entweder vollständig datenbankspezifisch sind oder zusätzliche Argumente enthalten, die für diese Datenbanken spezifisch sind. Für diese Datentypen stellen spezifische SQLAlchemy-Dialekte **backend-spezifische** „UPPERCASE“-Datentypen bereit, für einen SQL-Typ, der keine Entsprechung auf anderen Backends hat. Beispiele für backend-spezifische Uppercase-Datentypen sind PostgreSQLs JSONB, SQL Servers IMAGE und MySQLs TINYTEXT.
Spezifische Backends können auch „UPPERCASE“-Datentypen enthalten, die die von demselben „UPPERCASE“-Datentyp im sqlalchemy.types-Modul verfügbaren Argumente erweitern. Ein Beispiel ist die Erstellung eines MySQL-Zeichenketten-Datentyps, bei dem man MySQL-spezifische Argumente wie charset oder national angeben möchte, die von der MySQL-Version von VARCHAR als nur für MySQL verfügbare Parameter VARCHAR.charset und VARCHAR.national verfügbar sind.
Die API-Dokumentation für backend-spezifische Typen finden Sie in der dialektspezifischen Dokumentation unter Dialekte.
Verwendung von „UPPERCASE“- und Backend-spezifischen Typen für mehrere Backends¶
Die Betrachtung der Präsenz von „UPPERCASE“- und „CamelCase“-Typen führt zu dem natürlichen Anwendungsfall, wie „UPPERCASE“-Datentypen für backend-spezifische Optionen genutzt werden können, aber nur dann, wenn dieses Backend verwendet wird. Um die datenbankagnostischen „CamelCase“- und backend-spezifischen „UPPERCASE“-Systeme miteinander zu verbinden, verwendet man die Methode TypeEngine.with_variant(), um Typen zu **komponieren**, die mit spezifischen Verhaltensweisen auf spezifischen Backends zusammenarbeiten.
Zum Beispiel, um den String-Datentyp zu verwenden, aber unter MySQL den Parameter VARCHAR.charset von VARCHAR zu nutzen, wenn die Tabelle auf MySQL oder MariaDB erstellt wird, kann TypeEngine.with_variant() wie unten gezeigt verwendet werden.
from sqlalchemy import MetaData
from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.dialects.mysql import VARCHAR
metadata_obj = MetaData()
user = Table(
"user",
metadata_obj,
Column("user_name", String(100), primary_key=True),
Column(
"bio",
String(255).with_variant(VARCHAR(255, charset="utf8"), "mysql", "mariadb"),
),
)In der obigen Tabellendefinition hat die Spalte `"bio"` auf allen Backends Zeichenketten-Verhalten. Auf den meisten Backends wird sie in DDL als VARCHAR gerendert. Auf MySQL und MariaDB (angezeigt durch Datenbank-URLs, die mit mysql oder mariadb beginnen) wird sie jedoch als VARCHAR(255) CHARACTER SET utf8 gerendert.
Siehe auch
TypeEngine.with_variant() - zusätzliche Anwendungsbeispiele und Hinweise
Generische „CamelCase“-Typen¶
Generische Typen spezifizieren eine Spalte, die einen bestimmten Typ von Python-Daten lesen, schreiben und speichern kann. SQLAlchemy wählt den besten verfügbaren Datenbankspaltentyp auf der Ziel-Datenbank aus, wenn eine Anweisung CREATE TABLE ausgegeben wird. Für die vollständige Kontrolle darüber, welcher Spaltentyp in CREATE TABLE ausgegeben wird, wie z. B. VARCHAR, siehe SQL-Standard und mehrere Anbieter „UPPERCASE“-Typen und die anderen Abschnitte dieses Kapitels.
| Objektname | Beschreibung |
|---|---|
Ein Typ für größere |
|
Ein Bool-Datentyp. |
|
Ein Typ für |
|
Ein Typ für |
|
Ein Typ für doppelte |
|
Generischer Enum-Typ. |
|
Typ, der Gleitkommatypen wie |
|
Ein Typ für |
|
Ein Typ für |
|
Ein Typ für große binäre Bytes. |
|
Bezieht sich auf den Rückgabetyp des MATCH-Operators. |
|
Basis für nicht-ganzzahlige numerische Typen, wie |
|
Speichert Python-Objekte, die mittels Pickle serialisiert werden. |
|
Fügt einem Typ Fähigkeiten hinzu, die DDL auf Schema-Ebene mit einem Typ assoziieren können. |
|
Ein Typ für kleinere |
|
Die Basis für alle Zeichenketten- und Zeichentypen. |
|
Ein variabel großer Zeichenkettentyp. |
|
Ein Typ für |
|
Ein variable Länge Unicode-Zeichenkettentyp. |
|
Ein Unicode-Zeichenkettentyp mit unbegrenzter Länge. |
|
Stellt einen datenbankagnostischen UUID-Datentyp dar. |
- class sqlalchemy.types.BigInteger¶
Ein Typ für größere
int-Ganzzahlen.Generiert typischerweise eine
BIGINTin DDL und verhält sich ansonsten wie ein normalerIntegerauf der Python-Seite.Klassensignatur
class
sqlalchemy.types.BigInteger(sqlalchemy.types.Integer)
- class sqlalchemy.types.Boolean¶
Ein Bool-Datentyp.
Booleanverwendet typischerweise BOOLEAN oder SMALLINT auf der DDL-Seite und auf der Python-Seite behandelt esTrueoderFalse.Der
Boolean-Datentyp hat derzeit zwei Stufen der Zusicherung, dass die persistent gespeicherten Werte einfache Wahr/Falsch-Werte sind. Für alle Backends werden nur die Python-WerteNone,True,False,1oder0als Parameterwerte akzeptiert. Für Backends, die keinen „nativen booleschen“ Datentyp unterstützen, gibt es die Option, auf der Zielspalte eine CHECK-Beschränkung zu erstellen.Geändert in Version 1.2: Der
Boolean-Datentyp stellt nun sicher, dass eingehende Python-Werte bereits in rein boolescher Form vorliegen.Mitglieder
__init__(), bind_processor(), literal_processor(), python_type, result_processor()
Klassensignatur
class
sqlalchemy.types.Boolean(sqlalchemy.types.SchemaType,sqlalchemy.types.Emulated,sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.Boolean.__init__(create_constraint: bool = False, name: str | None = None, _create_events: bool = True, _adapted_from: SchemaType | None = None)¶ Konstruiert ein Boolean.
- Parameter:
create_constraint¶ –
standardmäßig False. Wenn das Boolean als int/smallint generiert wird, wird auch eine CHECK-Beschränkung für die Tabelle erstellt, die 1 oder 0 als Wert sicherstellt.
Hinweis
Es wird dringend empfohlen, der CHECK-Beschränkung einen expliziten Namen zu geben, um Schema-Management-Anliegen zu unterstützen. Dies kann entweder durch Setzen des Parameters
Boolean.nameoder durch Einrichten einer geeigneten Namenskonvention erfolgen; siehe Konfiguration von Beschränkungsnamenskonventionen für Hintergrundinformationen.Geändert in Version 1.4: - dieses Flag ist jetzt standardmäßig False, d.h. es wird keine CHECK-Beschränkung für einen nicht-nativen Aufzählungstyp generiert.
name¶ – Wenn eine CHECK-Beschränkung generiert wird, geben Sie den Namen der Beschränkung an.
-
method
sqlalchemy.types.Boolean.bind_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Der verwendete Dialekt.
-
method
sqlalchemy.types.Boolean.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribute
sqlalchemy.types.Boolean.python_type¶
-
method
sqlalchemy.types.Boolean.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
method
- class sqlalchemy.types.Date¶
Ein Typ für
datetime.date()-Objekte.Mitglieder
Klassensignatur
class
sqlalchemy.types.Date(sqlalchemy.types._RenderISO8601NoT,sqlalchemy.types.HasExpressionLookup,sqlalchemy.types.TypeEngine)-
Methode
sqlalchemy.types.Date.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
Methode
sqlalchemy.types.Date.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
Attribut
sqlalchemy.types.Date.python_type¶
-
Methode
- Klasse sqlalchemy.types.DateTime¶
Ein Typ für
datetime.datetime()-Objekte.Datums- und Uhrzeittypen geben Objekte aus dem Python-Modul
datetimezurück. Die meisten DBAPIs haben eine integrierte Unterstützung für das datetime-Modul, mit der bemerkenswerten Ausnahme von SQLite. Im Fall von SQLite werden Datums- und Uhrzeittypen als Strings gespeichert, die dann beim Zurückgeben von Zeilen wieder in datetime-Objekte konvertiert werden.Für die Zeitdarstellung innerhalb des Datetime-Typs bieten einige Backends zusätzliche Optionen, wie z. B. Zeitzonenunterstützung und Unterstützung für Bruchteile von Sekunden. Für Bruchteile von Sekunden verwenden Sie den Dialekt-spezifischen Datentyp, wie z. B.
TIME. Für die Zeitzonenunterstützung verwenden Sie mindestens den DatentypTIMESTAMP, wenn nicht das Dialekt-spezifische Datentypobjekt.Mitglieder
__init__(), get_dbapi_type(), literal_processor(), python_type
Klassensignatur
class
sqlalchemy.types.DateTime(sqlalchemy.types._RenderISO8601NoT,sqlalchemy.types.HasExpressionLookup,sqlalchemy.types.TypeEngine)-
Methode
sqlalchemy.types.DateTime.__init__(timezone: bool = False)¶ Konstruiert ein neues
DateTime.- Parameter:
timezone¶ – Boolean. Gibt an, dass der Datetime-Typ die Zeitzonenunterstützung aktivieren soll, falls auf dem **nur dem zugrunde liegenden Datums-/Uhrzeit-Halte-Typ** verfügbar. Es wird empfohlen, direkt den Datentyp
TIMESTAMPzu verwenden, wenn dieses Flag verwendet wird, da einige Datenbanken separate generische Datums-/Uhrzeit-Halte-Typen enthalten, die sich vom zeitzonenfähigen TIMESTAMP-Datentyp unterscheiden, wie z. B. die Oracle Database.
-
Methode
sqlalchemy.types.DateTime.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
Methode
sqlalchemy.types.DateTime.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
Attribut
sqlalchemy.types.DateTime.python_type¶
-
Methode
- Klasse sqlalchemy.types.Enum¶
Generischer Enum-Typ.
Der Typ
Enumbietet eine Menge möglicher String-Werte, auf die die Spalte beschränkt ist.Der Typ
Enumverwendet den nativen "ENUM"-Typ des Backends, falls einer verfügbar ist; andernfalls verwendet er einen VARCHAR-Datentyp. Es besteht auch die Option, automatisch eine CHECK-Beschränkung zu erstellen, wenn die VARCHAR-Variante (sogenannte "nicht-native") erzeugt wird. Siehe das FlagEnum.create_constraint.Der Typ
Enumbietet auch eine In-Python-Validierung von String-Werten sowohl während der Lese- als auch während der Schreibvorgänge. Beim Lesen eines Wertes aus der Datenbank in einem Ergebnis-Set wird der String-Wert immer gegen die Liste der möglichen Werte geprüft und einLookupErrorausgelöst, wenn keine Übereinstimmung gefunden wird. Beim Übergeben eines Wertes an die Datenbank als einfacher String innerhalb einer SQL-Anweisung, wenn der ParameterEnum.validate_stringsauf True gesetzt ist, wird einLookupErrorfür jeden String-Wert ausgelöst, der nicht in der angegebenen Liste möglicher Werte gefunden wird; beachten Sie, dass dies die Verwendung von LIKE-Ausdrücken mit aufgezählten Werten beeinträchtigt (ein ungewöhnlicher Anwendungsfall).Die Quelle der aufgezählten Werte kann eine Liste von String-Werten sein oder alternativ eine PEP-435-konforme Aufzählungsklasse. Für die Zwecke des Datentyps
Enummuss diese Klasse nur eine__members__Methode bereitstellen.Bei Verwendung einer Aufzählungsklasse werden die Aufzählungsobjekte sowohl für die Eingabe als auch für die Ausgabe verwendet, anstelle von Strings, wie es bei einem einfachen String-Aufzählungstyp der Fall ist.
import enum from sqlalchemy import Enum class MyEnum(enum.Enum): one = 1 two = 2 three = 3 t = Table("data", MetaData(), Column("value", Enum(MyEnum))) connection.execute(t.insert(), {"value": MyEnum.two}) assert connection.scalar(t.select()) is MyEnum.two
Oben werden die String-Namen jedes Elements, z. B. "one", "two", "three", in der Datenbank gespeichert; die Werte des Python Enum, hier als Ganzzahlen angegeben, werden **nicht** verwendet; der Wert jedes Enums kann daher jedes beliebige Python-Objekt sein, unabhängig davon, ob es speicherbar ist.
Um die Werte und nicht die Namen zu speichern, kann der Parameter
Enum.values_callableverwendet werden. Der Wert dieses Parameters ist ein vom Benutzer bereitgestellter Callable, der dazu bestimmt ist, mit einer PEP-435-konformen Aufzählungsklasse verwendet zu werden und eine Liste von String-Werten zurückgibt, die gespeichert werden sollen. Für eine einfache Aufzählung, die String-Werte verwendet, ist ein Callable wielambda x: [e.value for e in x]ausreichend.Siehe auch
Verwendung von Python Enum oder pep-586 Literal-Typen in der Typzuordnung - Hintergrundinformationen zur Verwendung des Datentyps
Enummit der ORM-Funktion ORM Annotated Declarative.ENUM- PostgreSQL-spezifischer Typ mit zusätzlicher Funktionalität.ENUM- MySQL-spezifischer TypMitglieder
Klassensignatur
class
sqlalchemy.types.Enum(sqlalchemy.types.String,sqlalchemy.types.SchemaType,sqlalchemy.types.Emulated,sqlalchemy.types.TypeEngine)-
Methode
sqlalchemy.types.Enum.__init__(*enums: object, **kw: Any)¶ Konstruiert ein Enum.
Schlüsselwortargumente, die für ein bestimmtes Backend nicht gelten, werden von diesem Backend ignoriert.
- Parameter:
*enums¶ – entweder genau ein PEP-435-konformer Aufzählungstyp oder ein oder mehrere String-Labels.
create_constraint¶ –
Standardmäßig False. Beim Erstellen eines nicht-nativen Aufzählungstyps wird zusätzlich eine CHECK-Beschränkung in der Datenbank gegen die gültigen Werte erstellt.
Hinweis
Es wird dringend empfohlen, dass die CHECK-Beschränkung einen expliziten Namen hat, um Schemaverwaltungsanliegen zu unterstützen. Dies kann entweder durch Setzen des Parameters
Enum.nameoder durch Einrichten einer entsprechenden Benennungskonvention erfolgen. Siehe Konfiguration von Benennungskonventionen für Beschränkungen für Hintergrundinformationen.Geändert in Version 1.4: - dieses Flag ist jetzt standardmäßig False, d.h. es wird keine CHECK-Beschränkung für einen nicht-nativen Aufzählungstyp generiert.
metadata¶ –
Verknüpft diesen Typ direkt mit einem
MetaData-Objekt. Für Typen, die auf der Ziel-Datenbank als unabhängige Schemakonstrukte existieren (PostgreSQL), wird dieser Typ innerhalb der Operationencreate_all()unddrop_all()erstellt und gelöscht. Wenn der Typ nicht mit einemMetaData-Objekt verknüpft ist, verknüpft er sich mit jederTable, in der er verwendet wird, und wird erstellt, wenn eine dieser einzelnen Tabellen erstellt wird, nach einer Prüfung seiner Existenz. Der Typ wird jedoch nur gelöscht, wenndrop_all()für das Metadatenobjekt dieserTableaufgerufen wird.Der Wert des Parameters
MetaData.schemadesMetaData-Objekts wird, falls gesetzt, als Standardwert für dasEnum.schemaauf diesem Objekt verwendet, wenn kein expliziter Wert anders angegeben wird.Geändert in Version 1.4.12:
Enumerbt den ParameterMetaData.schemadesMetaData-Objekts, falls vorhanden, wenn er über den ParameterEnum.metadataübergeben wird.name¶ – Der Name dieses Typs. Dies ist erforderlich für PostgreSQL und zukünftige unterstützte Datenbanken, die einen explizit benannten Typ oder eine explizit benannte Beschränkung benötigen, um den Typ und/oder eine Tabelle, die ihn verwendet, zu generieren. Wenn eine PEP-435 Aufzählungsklasse verwendet wurde, wird standardmäßig deren Name (in Kleinbuchstaben umgewandelt) verwendet.
native_enum¶ – Verwendet den nativen ENUM-Typ der Datenbank, wenn verfügbar. Standardmäßig True. Wenn False, wird VARCHAR + CHECK-Beschränkung für alle Backends verwendet. Wenn False, kann die VARCHAR-Länge mit
Enum.lengthgesteuert werden; derzeit wird "length" ignoriert, wenn native_enum=True.length¶ –
Ermöglicht die Angabe einer benutzerdefinierten Länge für VARCHAR, wenn ein nicht-nativer Aufzählungstyp verwendet wird. Standardmäßig wird die Länge des längsten Werts verwendet.
Geändert in Version 2.0.0: Der Parameter
Enum.lengthwird bedingungslos für dieVARCHAR-Darstellung verwendet, unabhängig vom ParameterEnum.native_enum, für diejenigen Backends, bei denenVARCHARfür Aufzählungstypen verwendet wird.schema¶ –
Schema-Name dieses Typs. Für Typen, die auf der Ziel-Datenbank als unabhängiges Schemakonstrukt (PostgreSQL) existieren, gibt dieser Parameter das benannte Schema an, in dem sich der Typ befindet.
Wenn nicht vorhanden, wird der Schema-Name aus der
MetaData-Sammlung übernommen, wenn diese alsEnum.metadataübergeben wird, für einMetaData, das den ParameterMetaData.schemaenthält.Geändert in Version 1.4.12:
Enumerbt den ParameterMetaData.schemadesMetaData-Objekts, falls vorhanden, wenn er über den ParameterEnum.metadataübergeben wird.Andernfalls, wenn das Flag
Enum.inherit_schemaaufTruegesetzt ist, wird das Schema vom zugehörigenTable-Objekt übernommen, falls vorhanden; wennEnum.inherit_schemaauf seinem StandardwertFalsesteht, wird das Schema der besitzenden Tabelle **nicht** verwendet.quote¶ – Legt explizite Anführungszeichenpräferenzen für den Namen des Typs fest.
inherit_schema¶ – Wenn
True, wird das "Schema" der besitzendenTablein das "Schema"-Attribut diesesEnumkopiert, wodurch jeder Wert für das `schema`-Attribut ersetzt wird. Dies gilt auch für die OperationTable.to_metadata().validate_strings¶ – Wenn True, werden String-Werte, die in einer SQL-Anweisung an die Datenbank übergeben werden, auf Gültigkeit gegen die Liste der aufgezählten Werte geprüft. Nicht erkannte Werte führen zur Auslösung eines
LookupError.values_callable¶ –
Ein Callable, dem der PEP-435-konforme Aufzählungstyp übergeben wird, der dann eine Liste von String-Werten zurückgeben sollte, die gespeichert werden sollen. Dies ermöglicht alternative Verwendungen, wie z. B. die Speicherung des String-Werts eines Enums in der Datenbank anstelle seines Namens. Das Callable muss die zu speichernden Werte in der gleichen Reihenfolge zurückgeben, wie sie beim Iterieren durch das
__member__Attribut des Enums erscheinen. Beispiel:lambda x: [i.value for i in x].Neu in Version 1.2.3.
sort_key_function¶ –
ein Python Callable, das als "key"-Argument für die Python-eingebaute Funktion
sorted()verwendet werden kann. Die SQLAlchemy ORM verlangt, dass Primärschlüsselspalten, die zugeordnet sind, auf irgendeine Weise sortierbar sind. Bei Verwendung eines unsortierbaren Aufzählungsobjekts, wie z. B. eines Python 3Enum-Objekts, kann dieser Parameter verwendet werden, um eine Standard-Sortierschlüsselfunktion für die Objekte festzulegen. Standardmäßig wird der Datenbankwert der Aufzählung als Sortierfunktion verwendet.Neu seit Version 1.3.8.
omit_aliases¶ –
Ein Boolean, der bei True Aliase aus pep 435 Enums entfernt. Standardmäßig
True.Geändert in Version 2.0: Dieser Parameter ist jetzt standardmäßig True.
-
Methode
sqlalchemy.types.Enum.create(bind, checkfirst=False)¶ geerbt von der
SchemaType.create()*Methode von*SchemaTypeErzeugt CREATE DDL für diesen Typ, falls zutreffend.
-
Methode
sqlalchemy.types.Enum.drop(bind, checkfirst=False)¶ geerbt von der
SchemaType.drop()*Methode von*SchemaTypeErzeugt DROP DDL für diesen Typ, falls zutreffend.
-
Methode
- Klasse sqlalchemy.types.Double¶
Ein Typ für doppelte
FLOAT-Gleitkommatypen.Generiert typischerweise
DOUBLEoderDOUBLE_PRECISIONin DDL und verhält sich ansonsten wie ein normalerFloatauf der Python-Seite.Neu in Version 2.0.
Klassensignatur
- Klasse sqlalchemy.types.Float¶
Typ, der Gleitkommatypen wie
FLOAToderREALdarstellt.Dieser Typ gibt standardmäßig Python-Objekte vom Typ
floatzurück, es sei denn, das FlagFloat.asdecimalist aufTruegesetzt, in welchem Fall sie indecimal.Decimal-Objekte umgewandelt werden.Wenn keine
Float.precisionin einemFloat-Typ angegeben ist, können einige Backends diesen Typ als 8-Byte / 64-Bit-Gleitkommazahl-Datentyp kompilieren. Um einen 4-Byte / 32-Bit-Gleitkommazahl-Datentyp zu verwenden, kann normalerweise eine Präzision von <= 24 angegeben werden oder der TypREALverwendet werden. Dies ist bekannt für die PostgreSQL- und MSSQL-Dialekte, die den Typ alsFLOATrendern, was in beiden Fällen ein Alias fürDOUBLE PRECISIONist. Andere Dialekte von Drittanbietern können ein ähnliches Verhalten aufweisen.Mitglieder
Klassensignatur
-
Methode
sqlalchemy.types.Float.__init__(precision: int | None = None, asdecimal: bool = False, decimal_return_scale: int | None = None)¶ Konstruiert einen Float.
- Parameter:
precision¶ –
die numerische Präzision für die Verwendung in DDL
CREATE TABLE. Backends **sollten** versuchen, diese Präzision anzugeben, um die Anzahl der Ziffern für den generischen DatentypFloatanzugeben.Hinweis
Für das Oracle Database-Backend wird der Parameter
Float.precisionbei der Rendern von DDL nicht akzeptiert, da die Oracle Database keine Gleitkommapräzision unterstützt, die als Anzahl von Dezimalstellen angegeben wird. Verwenden Sie stattdessen den Oracle Database-spezifischen DatentypFLOATund geben Sie den ParameterFLOAT.binary_precisionan. Dies ist neu in Version 2.0 von SQLAlchemy.Um ein datenbankagnostisches
Floatzu erstellen, das die binäre Präzision für Oracle Database separat angibt, verwenden SieTypeEngine.with_variant()wie folgtfrom sqlalchemy import Column from sqlalchemy import Float from sqlalchemy.dialects import oracle Column( "float_data", Float(5).with_variant(oracle.FLOAT(binary_precision=16), "oracle"), )
asdecimal¶ – das gleiche Flag wie bei
Numeric, aber standardmäßig aufFalsegesetzt. Beachten Sie, dass das Setzen dieses Flags aufTruezu einer Gleitkommakonvertierung führt.decimal_return_scale¶ – Standard-Skalierung, die bei der Konvertierung von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommawerte werden aufgrund der Dezimalungenauigkeit typischerweise viel länger sein, und die meisten Gleitkommadatenbanktypen haben keine Vorstellung von „Skalierung“, sodass der Gleitkommatyp standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung berücksichtigt. Die Angabe dieses Werts überschreibt diese Länge. Beachten Sie, dass die MySQL-Gleitkommatypen, die „Skalierung“ beinhalten, „Skalierung“ als Standard für decimal_return_scale verwenden, wenn nicht anders angegeben.
-
method
sqlalchemy.types.Float.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
Methode
- class sqlalchemy.types.Integer¶
Ein Typ für
int-Ganzzahlen.Mitglieder
Klassensignatur
class
sqlalchemy.types.Integer(sqlalchemy.types.HasExpressionLookup,sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.Integer.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
method
sqlalchemy.types.Integer.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribute
sqlalchemy.types.Integer.python_type¶
-
method
- class sqlalchemy.types.Interval¶
Ein Typ für
datetime.timedelta()-Objekte.Der `Interval`-Typ befasst sich mit `datetime.timedelta`-Objekten. In PostgreSQL und Oracle Database wird der native `INTERVAL`-Typ verwendet; für andere wird der Wert als Datum gespeichert, das relativ zum „Epoche“ (1. Januar 1970) ist.
Beachten Sie, dass der `Interval`-Typ derzeit keine Datumsarithmetik auf Plattformen anbietet, die keine Intervalltypen nativ unterstützen. Solche Operationen erfordern normalerweise eine Transformation beider Seiten des Ausdrucks (z. B. die Konvertierung beider Seiten in ganzzahlige Epochenwerte zuerst), was derzeit ein manuelles Verfahren ist (z. B. über
expression.func).Mitglieder
__init__(), adapt_to_emulated(), bind_processor(), cache_ok, coerce_compared_value(), comparator_factory, impl, python_type, result_processor()
Klassensignatur
class
sqlalchemy.types.Interval(sqlalchemy.types.Emulated,sqlalchemy.types._AbstractInterval,sqlalchemy.types.TypeDecorator)- class Comparator¶
Klassensignatur
class
sqlalchemy.types.Interval.Comparator(sqlalchemy.types.Comparator,sqlalchemy.types.Comparator)
-
method
sqlalchemy.types.Interval.__init__(native: bool = True, second_precision: int | None = None, day_precision: int | None = None)¶ Konstruiert ein `Interval`-Objekt.
- Parameter:
native¶ – Wenn True, wird der vom Datenbank unterstützte native INTERVAL-Typ verwendet, falls vorhanden (derzeit PostgreSQL, Oracle Database). Andernfalls wird der Intervallwert unabhängig davon als Epochenwert dargestellt.
second_precision¶ – Für native Intervalltypen, die einen Parameter für die „Bruchteilsekundenpräzision“ unterstützen, d. h. Oracle Database und PostgreSQL.
day_precision¶ – Für native Intervalltypen, die einen Parameter für die „Tagpräzision“ unterstützen, d. h. Oracle Database.
-
method
sqlalchemy.types.Interval.adapt_to_emulated(impltype, **kw)¶ Angesichts einer impl-Klasse wird dieser Typ an die impl angepasst, unter der Annahme von „emulated“.
Die impl sollte ebenfalls eine „emulated“ Version dieses Typs sein, höchstwahrscheinlich dieselbe Klasse wie dieser Typ selbst.
z. B.: sqltypes.Enum wird an die Enum-Klasse angepasst.
-
method
sqlalchemy.types.Interval.bind_processor(dialect: Dialect) → _BindProcessorType[dt.timedelta]¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Instanz des verwendeten Dialekts.
-
attribute
sqlalchemy.types.Interval.cache_ok: bool | None = True¶ Zeigt an, ob Anweisungen, die diesen
ExternalTypeverwenden, „cachebar“ sind.Der Standardwert
Nonegibt eine Warnung aus und erlaubt dann nicht das Caching einer Anweisung, die diesen Typ enthält. Setzen Sie ihn aufFalse, um das Caching von Anweisungen, die diesen Typ verwenden, ohne Warnung vollständig zu deaktivieren. Wenn aufTruegesetzt, werden die Klasse des Objekts und ausgewählte Elemente aus seinem Zustand als Teil des Cache-Schlüssels verwendet. Zum Beispiel die Verwendung einesTypeDecoratorclass MyType(TypeDecorator): impl = String cache_ok = True def __init__(self, choices): self.choices = tuple(choices) self.internal_only = True
Der Cache-Schlüssel für den obigen Typ wäre äquivalent zu
>>> MyType(["a", "b", "c"])._static_cache_key (<class '__main__.MyType'>, ('choices', ('a', 'b', 'c')))
Das Caching-Schema extrahiert Attribute aus dem Typ, die den Namen der Parameter in der Methode
__init__()entsprechen. Oben wird das Attribut "choices" Teil des Cache-Schlüssels, "internal_only" jedoch nicht, da es keinen Parameter namens "internal_only" gibt.Die Anforderungen an cachebare Elemente sind, dass sie hashbar sind und auch, dass sie für gegebene Cache-Werte bei jeder Ausführung dieselbe SQL-Darstellung für Ausdrücke anzeigen, die diesen Typ verwenden.
Um Datentypen zu unterstützen, die sich auf nicht hashbare Strukturen wie Wörterbücher, Mengen und Listen beziehen, können diese Objekte "cachebar" gemacht werden, indem hashbare Strukturen den Attributen zugewiesen werden, deren Namen mit den Namen der Argumente übereinstimmen. Zum Beispiel kann ein Datentyp, der ein Wörterbuch mit Nachschlage-Werten akzeptiert, dieses als sortierte Reihe von Tupeln veröffentlichen. Angenommen, ein zuvor nicht cachebarer Typ als
class LookupType(UserDefinedType): """a custom type that accepts a dictionary as a parameter. this is the non-cacheable version, as "self.lookup" is not hashable. """ def __init__(self, lookup): self.lookup = lookup def get_col_spec(self, **kw): return "VARCHAR(255)" def bind_processor(self, dialect): ... # works with "self.lookup" ...
wobei "lookup" ein Wörterbuch ist. Der Typ kann keinen Cache-Schlüssel generieren
>>> type_ = LookupType({"a": 10, "b": 20}) >>> type_._static_cache_key <stdin>:1: SAWarning: UserDefinedType LookupType({'a': 10, 'b': 20}) will not produce a cache key because the ``cache_ok`` flag is not set to True. Set this flag to True if this type object's state is safe to use in a cache key, or False to disable this warning. symbol('no_cache')
Wenn wir einen solchen Cache-Schlüssel **einrichten** würden, wäre er nicht verwendbar. Wir würden eine Tupelstruktur erhalten, die ein Wörterbuch enthält, das selbst nicht als Schlüssel in einem "Cache-Wörterbuch" wie dem Statement-Cache von SQLAlchemy verwendet werden kann, da Python-Wörterbücher nicht hashbar sind.
>>> # set cache_ok = True >>> type_.cache_ok = True >>> # this is the cache key it would generate >>> key = type_._static_cache_key >>> key (<class '__main__.LookupType'>, ('lookup', {'a': 10, 'b': 20})) >>> # however this key is not hashable, will fail when used with >>> # SQLAlchemy statement cache >>> some_cache = {key: "some sql value"} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict'
Der Typ kann cachebar gemacht werden, indem ein sortiertes Tupel von Tupeln dem Attribut ".lookup" zugewiesen wird
class LookupType(UserDefinedType): """a custom type that accepts a dictionary as a parameter. The dictionary is stored both as itself in a private variable, and published in a public variable as a sorted tuple of tuples, which is hashable and will also return the same value for any two equivalent dictionaries. Note it assumes the keys and values of the dictionary are themselves hashable. """ cache_ok = True def __init__(self, lookup): self._lookup = lookup # assume keys/values of "lookup" are hashable; otherwise # they would also need to be converted in some way here self.lookup = tuple((key, lookup[key]) for key in sorted(lookup)) def get_col_spec(self, **kw): return "VARCHAR(255)" def bind_processor(self, dialect): ... # works with "self._lookup" ...
wobei der Cache-Schlüssel für
LookupType({"a": 10, "b": 20})ist>>> LookupType({"a": 10, "b": 20})._static_cache_key (<class '__main__.LookupType'>, ('lookup', (('a', 10), ('b', 20))))
Neu in Version 1.4.14: - das Flag
cache_okhinzugefügt, um eine gewisse Konfigurierbarkeit des Cachings fürTypeDecorator-Klassen zu ermöglichen.Neu in Version 1.4.28: - die Mixin
ExternalTypehinzugefügt, die das Flagcache_oksowohl auf dieTypeDecorator- als auch auf dieUserDefinedType-Klassen verallgemeinert.Siehe auch
-
method
sqlalchemy.types.Interval.coerce_compared_value(op, value)¶ Schlagen Sie einen Typ für einen „koerzierten“ Python-Wert in einem Ausdruck vor.
Gibt dem Typ die Möglichkeit, einen Typ zurückzugeben, in den der Wert koerziert werden soll, gegeben einen Operator und einen Wert.
Das Standardverhalten ist konservativ; wenn die rechte Seite bereits basierend auf ihrem Python-Typ in einen SQL-Typ koerziert wurde, wird sie normalerweise unverändert gelassen.
Erweiterungen für Endbenutzerfunktionalitäten sollten hier generell über
TypeDecoratorerfolgen, welches ein freizügigeres Verhalten bietet, da es standardmäßig die andere Seite des Ausdrucks in diesen Typ koerziert und damit spezielle Python-Konvertierungen über die für den DBAPI benötigten hinaus auf beide Seiten anwendet. Es bietet auch die öffentliche MethodeTypeDecorator.coerce_compared_value(), die für die Anpassung dieses Verhaltens durch Endbenutzer gedacht ist.
-
attribute
sqlalchemy.types.Interval.comparator_factory¶ Alias für
Comparator
-
attribute
sqlalchemy.types.Interval.impl¶ Alias für
DateTime
-
attribute
sqlalchemy.types.Interval.python_type¶
-
method
sqlalchemy.types.Interval.result_processor(dialect: Dialect, coltype: Any) → _ResultProcessorType[dt.timedelta]¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
- class sqlalchemy.types.LargeBinary¶
Ein Typ für große binäre Bytes.
Der Typ
LargeBinaryentspricht einem großen und/oder nicht befristeten Binärtyp für die Zielplattform, wie BLOB unter MySQL und BYTEA für PostgreSQL. Er kümmert sich auch um die notwendigen Konvertierungen für den DBAPI.Mitglieder
Klassensignatur
class
sqlalchemy.types.LargeBinary(sqlalchemy.types._Binary)-
method
sqlalchemy.types.LargeBinary.__init__(length: int | None = None)¶ Konstruiert einen LargeBinary-Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL-Anweisungen, für die Binärtypen, die eine Länge akzeptieren, wie z. B. der MySQL BLOB-Typ.
-
method
- class sqlalchemy.types.MatchType¶
Bezieht sich auf den Rückgabetyp des MATCH-Operators.
Da der Operator
ColumnOperators.match()wahrscheinlich der offenste Operator in generischem SQLAlchemy Core ist, können wir den Rückgabetyp zur Auswertungszeit der SQL-Abfrage nicht annehmen, da MySQL einen Gleitkommawert und keinen booleschen Wert zurückgibt und andere Backends möglicherweise etwas anderes tun. Daher dient dieser Typ als Platzhalter, der derzeit vonBooleanabgeleitet wird. Der Typ erlaubt es Dialekten, bei Bedarf Funktionalität zur Verarbeitung von Ergebnissen einzufügen, und gibt unter MySQL Gleitkommawerte zurück.Klassensignatur
- class sqlalchemy.types.Numeric¶
Basis für nicht-ganzzahlige numerische Typen, wie
NUMERIC,FLOAT,DECIMALund andere Varianten.Der Datentyp
Numericwird bei direkter Verwendung DDL rendern, die Präzisionsnumeriken entspricht, falls verfügbar, wie z. B.NUMERIC(precision, scale). Die UnterklasseFloatversucht, einen Gleitkommadatentyp wieFLOAT(precision)zu rendern.Numericgibt standardmäßig Python-decimal.Decimal-Objekte zurück, basierend auf dem StandardwertTruefür den ParameterNumeric.asdecimal. Wenn dieser Parameter auf False gesetzt ist, werden zurückgegebene Werte in Python-float-Objekte koerziert.Die Unterklasse
Float, die spezifischer für Gleitkommazahlen ist, setzt das FlagFloat.asdecimalstandardmäßig auf False, sodass der Standard-Python-Datentypfloatist.Hinweis
Bei Verwendung eines
Numeric-Datentyps gegen einen Datenbanktyp, der Python-Gleitkommazahlen an den Treiber zurückgibt, kann die Genauigkeit der durchNumeric.asdecimalangegebenen Dezimalkonvertierung begrenzt sein. Das Verhalten spezifischer numerischer/Gleitkomma-Datentypen ist ein Produkt des verwendeten SQL-Datentyps, des verwendeten Python DBAPI sowie von Strategien, die im verwendeten SQLAlchemy-Dialekt vorhanden sein können. Benutzer, die eine spezifische Präzision/Skalierung benötigen, werden ermutigt, mit den verfügbaren Datentypen zu experimentieren, um die besten Ergebnisse zu erzielen.Mitglieder
__init__(), bind_processor(), get_dbapi_type(), literal_processor(), python_type, result_processor()
Klassensignatur
class
sqlalchemy.types.Numeric(sqlalchemy.types.HasExpressionLookup,sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.Numeric.__init__(precision: int | None = None, scale: int | None = None, decimal_return_scale: int | None = None, asdecimal: bool = True)¶ Konstruiert einen `Numeric`.
- Parameter:
precision¶ – die numerische Präzision zur Verwendung in DDL
CREATE TABLE.scale¶ – die numerische Skalierung zur Verwendung in DDL
CREATE TABLE.asdecimal¶ – standardmäßig True. Gibt an, ob Werte als Python Decimal-Objekte oder als Floats gesendet werden sollen. Unterschiedliche DBAPIs senden das eine oder das andere basierend auf den Datentypen – der Numeric-Typ stellt sicher, dass die Rückgabewerte über DBAPIs hinweg konsistent das eine oder das andere sind.
decimal_return_scale¶ – Standard-Skalierung, die bei der Konvertierung von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommawerte werden aufgrund der Dezimalungenauigkeit typischerweise viel länger sein, und die meisten Gleitkommadatenbanktypen haben keine Vorstellung von „Skalierung“, sodass der Gleitkommatyp standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung berücksichtigt. Die Angabe dieses Werts überschreibt diese Länge. Typen, die einen expliziten `.scale`-Wert enthalten, wie der Basis-
Numericsowie die MySQL-Gleitkommatypen, verwenden den Wert von `.scale` als Standard für decimal_return_scale, wenn nicht anders angegeben.
Bei Verwendung des
Numeric-Datentyps ist Vorsicht geboten, um sicherzustellen, dass die `asdecimal`-Einstellung für den verwendeten DBAPI geeignet ist. Wenn Numeric eine Konvertierung von Decimal->float oder float->Decimal anwendet, verursacht diese Konvertierung zusätzliche Leistungskosten für alle empfangenen Ergebnisspalten.DBAPIs, die Decimal nativ zurückgeben (z. B. psycopg2), haben eine bessere Genauigkeit und höhere Leistung bei
True, da die native Übersetzung zu Decimal die Anzahl der Gleitkommaprobleme reduziert und der Numeric-Typ selbst keine weiteren Konvertierungen anwenden muss. Ein anderer DBAPI, der Floats nativ zurückgibt, *verursacht* jedoch zusätzliche Konvertierungskosten und unterliegt weiterhin Gleitkommadatenverlust – in diesem Fall entferntasdecimal=Falsezumindest die zusätzlichen Konvertierungskosten.
-
method
sqlalchemy.types.Numeric.bind_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Instanz des verwendeten Dialekts.
-
method
sqlalchemy.types.Numeric.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
method
sqlalchemy.types.Numeric.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribute
sqlalchemy.types.Numeric.python_type¶
-
method
sqlalchemy.types.Numeric.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
method
- class sqlalchemy.types.PickleType¶
Speichert Python-Objekte, die mittels Pickle serialisiert werden.
PickleType baut auf dem Binary-Typ auf, um Python's
pickle.dumps()auf eingehende Objekte anzuwenden undpickle.loads()auf dem Weg nach draußen, wodurch jedes pickle-fähige Python-Objekt als serialisiertes Binärfeld gespeichert werden kann.Um ORM-Änderungsereignisse für Elemente, die mit
PickleTypeverknüpft sind, weiterzugeben, siehe Mutationsverfolgung.Mitglieder
__init__(), bind_processor(), cache_ok, compare_values(), impl, result_processor()
Klassensignatur
class
sqlalchemy.types.PickleType(sqlalchemy.types.TypeDecorator)-
methode
sqlalchemy.types.PickleType.__init__(protocol: int = 5, pickler: Any = None, comparator: Callable[[Any, Any], bool] | None = None, impl: _TypeEngineArgument[Any] | None = None)¶ Konstruiert einen PickleType.
- Parameter:
protocol¶ – Standardwert ist
pickle.HIGHEST_PROTOCOL.pickler¶ – Standardwert ist pickle. Kann jedes Objekt mit Pickle-kompatiblen
dumpsundloadsMethoden sein.comparator¶ – Ein 2-Argument-Callable-Prädikat zum Vergleichen von Werten dieses Typs. Wenn es auf
Nonegesetzt ist, wird der Python-Operator „equals“ zum Vergleichen von Werten verwendet.impl¶ –
Eine binärspeichernde
TypeEngine-Klasse oder -Instanz, die anstelle des StandardwertsLargeBinaryverwendet wird. Zum Beispiel kann die Klasse :class: _mysql.LONGBLOB bei der Verwendung von MySQL effektiver sein.Neu in Version 1.4.20.
-
methode
sqlalchemy.types.PickleType.bind_processor(dialect)¶ Stellt eine Funktion zur Verarbeitung von gebundenen Werten für die gegebene
Dialectbereit.Dies ist die Methode, die den
TypeEngine-Vertrag für die Konvertierung von gebundenen Werten erfüllt, die normalerweise über die MethodeTypeEngine.bind_processor()erfolgt.Hinweis
Benutzerdefinierte Unterklassen von
TypeDecoratorsollten diese Methode **nicht** implementieren, sondern stattdessenTypeDecorator.process_bind_param()implementieren, damit die interne Verarbeitung, die vom implementierenden Typ bereitgestellt wird, erhalten bleibt.- Parameter:
dialect¶ – Die verwendete Dialektinstanz.
-
attribut
sqlalchemy.types.PickleType.cache_ok: bool | None = True¶ Zeigt an, ob Anweisungen, die diesen
ExternalTypeverwenden, „cachebar“ sind.Der Standardwert
Nonegibt eine Warnung aus und erlaubt dann nicht das Caching einer Anweisung, die diesen Typ enthält. Setzen Sie ihn aufFalse, um das Caching von Anweisungen, die diesen Typ verwenden, ohne Warnung vollständig zu deaktivieren. Wenn aufTruegesetzt, werden die Klasse des Objekts und ausgewählte Elemente aus seinem Zustand als Teil des Cache-Schlüssels verwendet. Zum Beispiel die Verwendung einesTypeDecoratorclass MyType(TypeDecorator): impl = String cache_ok = True def __init__(self, choices): self.choices = tuple(choices) self.internal_only = True
Der Cache-Schlüssel für den obigen Typ wäre äquivalent zu
>>> MyType(["a", "b", "c"])._static_cache_key (<class '__main__.MyType'>, ('choices', ('a', 'b', 'c')))
Das Caching-Schema extrahiert Attribute aus dem Typ, die den Namen der Parameter in der Methode
__init__()entsprechen. Oben wird das Attribut "choices" Teil des Cache-Schlüssels, "internal_only" jedoch nicht, da es keinen Parameter namens "internal_only" gibt.Die Anforderungen an cachebare Elemente sind, dass sie hashbar sind und auch, dass sie für gegebene Cache-Werte bei jeder Ausführung dieselbe SQL-Darstellung für Ausdrücke anzeigen, die diesen Typ verwenden.
Um Datentypen zu unterstützen, die sich auf nicht hashbare Strukturen wie Wörterbücher, Mengen und Listen beziehen, können diese Objekte "cachebar" gemacht werden, indem hashbare Strukturen den Attributen zugewiesen werden, deren Namen mit den Namen der Argumente übereinstimmen. Zum Beispiel kann ein Datentyp, der ein Wörterbuch mit Nachschlage-Werten akzeptiert, dieses als sortierte Reihe von Tupeln veröffentlichen. Angenommen, ein zuvor nicht cachebarer Typ als
class LookupType(UserDefinedType): """a custom type that accepts a dictionary as a parameter. this is the non-cacheable version, as "self.lookup" is not hashable. """ def __init__(self, lookup): self.lookup = lookup def get_col_spec(self, **kw): return "VARCHAR(255)" def bind_processor(self, dialect): ... # works with "self.lookup" ...
wobei "lookup" ein Wörterbuch ist. Der Typ kann keinen Cache-Schlüssel generieren
>>> type_ = LookupType({"a": 10, "b": 20}) >>> type_._static_cache_key <stdin>:1: SAWarning: UserDefinedType LookupType({'a': 10, 'b': 20}) will not produce a cache key because the ``cache_ok`` flag is not set to True. Set this flag to True if this type object's state is safe to use in a cache key, or False to disable this warning. symbol('no_cache')
Wenn wir einen solchen Cache-Schlüssel **einrichten** würden, wäre er nicht verwendbar. Wir würden eine Tupelstruktur erhalten, die ein Wörterbuch enthält, das selbst nicht als Schlüssel in einem "Cache-Wörterbuch" wie dem Statement-Cache von SQLAlchemy verwendet werden kann, da Python-Wörterbücher nicht hashbar sind.
>>> # set cache_ok = True >>> type_.cache_ok = True >>> # this is the cache key it would generate >>> key = type_._static_cache_key >>> key (<class '__main__.LookupType'>, ('lookup', {'a': 10, 'b': 20})) >>> # however this key is not hashable, will fail when used with >>> # SQLAlchemy statement cache >>> some_cache = {key: "some sql value"} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict'
Der Typ kann cachebar gemacht werden, indem ein sortiertes Tupel von Tupeln dem Attribut ".lookup" zugewiesen wird
class LookupType(UserDefinedType): """a custom type that accepts a dictionary as a parameter. The dictionary is stored both as itself in a private variable, and published in a public variable as a sorted tuple of tuples, which is hashable and will also return the same value for any two equivalent dictionaries. Note it assumes the keys and values of the dictionary are themselves hashable. """ cache_ok = True def __init__(self, lookup): self._lookup = lookup # assume keys/values of "lookup" are hashable; otherwise # they would also need to be converted in some way here self.lookup = tuple((key, lookup[key]) for key in sorted(lookup)) def get_col_spec(self, **kw): return "VARCHAR(255)" def bind_processor(self, dialect): ... # works with "self._lookup" ...
wobei der Cache-Schlüssel für
LookupType({"a": 10, "b": 20})ist>>> LookupType({"a": 10, "b": 20})._static_cache_key (<class '__main__.LookupType'>, ('lookup', (('a', 10), ('b', 20))))
Neu in Version 1.4.14: - das Flag
cache_okhinzugefügt, um eine gewisse Konfigurierbarkeit des Cachings fürTypeDecorator-Klassen zu ermöglichen.Neu in Version 1.4.28: - die Mixin
ExternalTypehinzugefügt, die das Flagcache_oksowohl auf dieTypeDecorator- als auch auf dieUserDefinedType-Klassen verallgemeinert.Siehe auch
-
methode
sqlalchemy.types.PickleType.compare_values(x, y)¶ Vergleicht zwei Werte auf Gleichheit.
Standardmäßig ruft dies die Methode
TypeEngine.compare_values()des zugrunde liegenden „impl“ auf, welche wiederum normalerweise den Python-Gleichheitsoperator==verwendet.Diese Funktion wird vom ORM verwendet, um einen ursprünglich geladenen Wert mit einem abgefangenen „geänderten“ Wert zu vergleichen, um festzustellen, ob eine Nettänderung eingetreten ist.
-
attribut
sqlalchemy.types.PickleType.impl¶ Alias für
LargeBinary
-
methode
sqlalchemy.types.PickleType.result_processor(dialect, coltype)¶ Stellt eine Funktion zur Verarbeitung von Ergebniswerten für die gegebene
Dialectbereit.Dies ist die Methode, die den
TypeEngine-Vertrag für die Konvertierung von gebundenen Werten erfüllt, die normalerweise über die MethodeTypeEngine.result_processor()erfolgt.Hinweis
Benutzerdefinierte Unterklassen von
TypeDecoratorsollten diese Methode **nicht** implementieren, sondern stattdessenTypeDecorator.process_result_value()implementieren, damit die interne Verarbeitung, die vom implementierenden Typ bereitgestellt wird, erhalten bleibt.
-
methode
- klasse sqlalchemy.types.SchemaType¶
Fügt einem Typ Fähigkeiten hinzu, die DDL auf Schema-Ebene mit einem Typ assoziieren können.
Unterstützt Typen, die explizit erstellt/gelöscht werden müssen (z.B. PG ENUM Typ) sowie Typen, die durch Tabellen- oder Schemabeschränkungen, Trigger und andere Regeln ergänzt werden.
SchemaType-Klassen können auch Ziele für die EventsDDLEvents.before_parent_attach()undDDLEvents.after_parent_attach()sein, wobei die Events rund um die Zuordnung des Typs zu einer übergeordnetenColumnausgelöst werden.Klassensignatur
class
sqlalchemy.types.SchemaType(sqlalchemy.sql.expression.SchemaEventTarget,sqlalchemy.types.TypeEngineMixin)-
methode
sqlalchemy.types.SchemaType.adapt(cls: Type[TypeEngine | TypeEngineMixin], **kw: Any) → TypeEngine¶
-
methode
sqlalchemy.types.SchemaType.copy(**kw)¶
-
methode
sqlalchemy.types.SchemaType.create(bind, checkfirst=False)¶ Erzeugt CREATE DDL für diesen Typ, falls zutreffend.
-
methode
sqlalchemy.types.SchemaType.drop(bind, checkfirst=False)¶ Erzeugt DROP DDL für diesen Typ, falls zutreffend.
-
attribut
sqlalchemy.types.SchemaType.name: str | None¶
-
methode
- klasse sqlalchemy.types.SmallInteger¶
Ein Typ für kleinere
int-Ganzzahlen.Erzeugt normalerweise ein
SMALLINTin DDL und verhält sich ansonsten wie ein normalerIntegerauf Python-Seite.Klassensignatur
class
sqlalchemy.types.SmallInteger(sqlalchemy.types.Integer)
- klasse sqlalchemy.types.String¶
Die Basis für alle Zeichenketten- und Zeichentypen.
In SQL entspricht dies VARCHAR.
Das Feld length ist normalerweise erforderlich, wenn der String-Typ in einer CREATE TABLE-Anweisung verwendet wird, da VARCHAR bei den meisten Datenbanken eine Länge benötigt.
Mitglieder
__init__(), bind_processor(), get_dbapi_type(), literal_processor(), python_type, result_processor()
Klassensignatur
class
sqlalchemy.types.String(sqlalchemy.types.Concatenable,sqlalchemy.types.TypeEngine)-
methode
sqlalchemy.types.String.__init__(length: int | None = None, collation: str | None = None)¶ Erstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEausgegeben wird. Bestimmte Datenbanken benötigen möglicherweise einelengthfür die Verwendung in DDL und lösen eine Ausnahme aus, wenn die DDL-AnweisungCREATE TABLEausgegeben wird, wenn einVARCHARohne Länge enthalten ist. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
methode
sqlalchemy.types.String.bind_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Die verwendete Dialektinstanz.
-
methode
sqlalchemy.types.String.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
methode
sqlalchemy.types.String.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribut
sqlalchemy.types.String.python_type¶
-
methode
sqlalchemy.types.String.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
methode
- klasse sqlalchemy.types.Text¶
Ein variabel großer Zeichenkettentyp.
In SQL entspricht dies normalerweise CLOB oder TEXT. Im Allgemeinen haben TEXT-Objekte keine Länge; obwohl einige Datenbanken ein Längenargument hier akzeptieren, wird es von anderen abgelehnt.
Klassensignatur
- klasse sqlalchemy.types.Time¶
Ein Typ für
datetime.time()-Objekte.Mitglieder
Klassensignatur
class
sqlalchemy.types.Time(sqlalchemy.types._RenderISO8601NoT,sqlalchemy.types.HasExpressionLookup,sqlalchemy.types.TypeEngine)-
methode
sqlalchemy.types.Time.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
methode
sqlalchemy.types.Time.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribut
sqlalchemy.types.Time.python_type¶
-
methode
- klasse sqlalchemy.types.Unicode¶
Ein variable Länge Unicode-Zeichenkettentyp.
Der Typ
Unicodeist eine Unterklasse vonString, die davon ausgeht, dass Ein- und Ausgabestrings Nicht-ASCII-Zeichen enthalten können. Für einige Backends impliziert dies einen zugrunde liegenden Spaltentyp, der explizit Nicht-ASCII-Daten unterstützt, wie z.B.NVARCHARin Oracle Database und SQL Server. Dies beeinflusst die Ausgabe vonCREATE TABLE-Anweisungen undCAST-Funktionen auf Dialektebene.Die vom
Unicode-Typ verwendete Zeichenkodierung für die Übertragung und den Empfang von Daten zur Datenbank wird normalerweise vom DBAPI selbst bestimmt. Alle modernen DBAPIs unterstützen Nicht-ASCII-Strings, können aber unterschiedliche Methoden zur Verwaltung von Datenbankkodierungen haben. Falls erforderlich, sollte diese Kodierung wie in den Hinweisen für den Ziel-DBAPI im Abschnitt Dialekte beschrieben konfiguriert werden.In modernem SQLAlchemy impliziert die Verwendung des
Unicode-Datentyps keine Kodierungs-/Dekodierungsverhalten innerhalb von SQLAlchemy selbst. In Python 3 sind alle String-Objekte von Natur aus Unicode-fähig, und SQLAlchemy erzeugt keine Bytestring-Objekte und unterstützt auch keine DBAPIs, die für String-Werte keine Python-Unicode-Objekte in Ergebnislisten zurückgeben.Warnung
Einige Datenbank-Backends, insbesondere SQL Server mit pyodbc, sind bekannt dafür, unerwünschte Verhaltensweisen in Bezug auf Daten zu zeigen, die als
NVARCHAR-Typ und nicht alsVARCHARgekennzeichnet sind, einschließlich Datentyp-Mismatch-Fehlern und Nichtverwendung von Indizes. Siehe den Abschnitt überDialectEvents.do_setinputsizes()für Hintergrundinformationen zur Umgehung von Unicode-Zeichenproblemen für Backends wie SQL Server mit pyodbc sowie cx_Oracle.Siehe auch
UnicodeText- das textuelle Gegenstück ohne Längenbeschränkung zuUnicode.Klassensignatur
- klasse sqlalchemy.types.UnicodeText¶
Ein Unicode-Zeichenkettentyp mit unbegrenzter Länge.
Siehe
Unicodefür Details zum Unicode-Verhalten dieses Objekts.Wie
Unicodeimpliziert die Verwendung des TypsUnicodeTexteinen Unicode-fähigen Typ auf dem Backend, wie z.B.NCLOB,NTEXT.Klassensignatur
- class sqlalchemy.types.Uuid¶
Stellt einen datenbankagnostischen UUID-Datentyp dar.
Für Backends, die keinen "nativen" UUID-Datentyp haben, wird der Wert
CHAR(32)verwenden und die UUID als 32-stelligen alphanumerischen Hex-String speichern.Für Backends, von denen bekannt ist, dass sie
UUIDdirekt oder einen ähnlichen UUID-speichernden Datentyp wie SQL Server'sUNIQUEIDENTIFIERunterstützen, ermöglicht ein standardmäßig aktivierter "nativer" Modus, dass diese Typen auf diesen Backends verwendet werden.Im Standardmodus erwartet der
UuidDatentyp **Python uuid-Objekte** aus dem Python uuid Modul.import uuid from sqlalchemy import Uuid from sqlalchemy import Table, Column, MetaData, String metadata_obj = MetaData() t = Table( "t", metadata_obj, Column("uuid_data", Uuid, primary_key=True), Column("other_data", String), ) with engine.begin() as conn: conn.execute( t.insert(), {"uuid_data": uuid.uuid4(), "other_data": "some data"} )
Damit der
UuidDatentyp mit String-basierten UUIDs (z.B. 32-stellige Hexadezimalstrings) funktioniert, übergeben Sie den ParameterUuid.as_uuidmit dem WertFalse.Neu in Version 2.0.
Siehe auch
UUID- repräsentiert exakt denUUIDDatentyp ohne Backend-agnostische Verhaltensweisen.Mitglieder
__init__(), bind_processor(), coerce_compared_value(), literal_processor(), python_type, result_processor()
Klassensignatur
class
sqlalchemy.types.Uuid(sqlalchemy.types.Emulated,sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.Uuid.__init__(as_uuid: bool = True, native_uuid: bool = True)¶ Erstellt einen
UuidTyp.- Parameter:
as_uuid=True¶ –
wenn True, werden Werte als Python-UUID-Objekte interpretiert und über DBAPI in Zeichenketten konvertiert.
native_uuid=True¶ – wenn True, werden von den Backends, die entweder den
UUIDDatentyp direkt oder einen UUID-speichernden Wert (wie z.B. SQL Server'sUNIQUEIDENTIFIER) unterstützen, diese verwendet. Wenn False, wird für alle Backends, unabhängig von nativer Unterstützung, einCHAR(32)Datentyp verwendet.
-
method
sqlalchemy.types.Uuid.bind_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Instanz des verwendeten Dialekts.
-
method
sqlalchemy.types.Uuid.coerce_compared_value(op, value)¶ Siehe
TypeEngine.coerce_compared_value()für eine Beschreibung.
-
method
sqlalchemy.types.Uuid.literal_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
attribute
sqlalchemy.types.Uuid.python_type¶
-
method
sqlalchemy.types.Uuid.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
method
SQL-Standard und "UPPERCASE"-Typen für mehrere Anbieter¶
Diese Kategorie von Typen bezieht sich auf Typen, die entweder Teil des SQL-Standards sind oder potenziell innerhalb einer Teilmenge von Datenbank-Backends vorkommen. Im Gegensatz zu den "generischen" Typen gibt es für die SQL-Standard-/Multi-Vendor-Typen **keine** Garantie, dass sie auf allen Backends funktionieren, und sie funktionieren nur auf den Backends, die sie explizit namentlich unterstützen. Das heißt, der Typ gibt seinen genauen Namen in DDL aus, wenn CREATE TABLE ausgegeben wird.
| Objektname | Beschreibung |
|---|---|
Repräsentiert einen SQL-Array-Typ. |
|
Der SQL-Datentyp BIGINT. |
|
Der SQL-Datentyp BINARY. |
|
Der SQL-Datentyp BLOB. |
|
Der SQL-Datentyp BOOLEAN. |
|
Der SQL-Datentyp CHAR. |
|
Der CLOB-Datentyp. |
|
Der SQL-Datentyp DATE. |
|
Der SQL-Datentyp DATETIME. |
|
Der SQL-Datentyp DECIMAL. |
|
Der SQL-Datentyp DOUBLE. |
|
Der SQL-Datentyp DOUBLE PRECISION. |
|
Der SQL-Datentyp FLOAT. |
|
Alias für |
|
Der SQL-Datentyp INT oder INTEGER. |
|
Repräsentiert einen SQL-JSON-Typ. |
|
Der SQL-Datentyp NCHAR. |
|
Der SQL-Datentyp NUMERIC. |
|
Der SQL-Datentyp NVARCHAR. |
|
Der SQL-Datentyp REAL. |
|
Der SQL-Datentyp SMALLINT. |
|
Der SQL-Datentyp TEXT. |
|
Der SQL-Datentyp TIME. |
|
Der SQL-Datentyp TIMESTAMP. |
|
Repräsentiert den SQL-Datentyp UUID. |
|
Der SQL-Datentyp VARBINARY. |
|
Der SQL-Datentyp VARCHAR. |
- class sqlalchemy.types.ARRAY¶
Repräsentiert einen SQL-Array-Typ.
Hinweis
Dieser Typ dient als Grundlage für alle ARRAY-Operationen. Derzeit **unterstützt nur der PostgreSQL-Backend SQL-Arrays in SQLAlchemy**. Es wird empfohlen, direkt den PostgreSQL-spezifischen
sqlalchemy.dialects.postgresql.ARRAYTyp zu verwenden, wenn ARRAY-Typen mit PostgreSQL verwendet werden, da dieser zusätzliche, backend-spezifische Operatoren bietet.ARRAYist Teil von Core zur Unterstützung verschiedener SQL-Standardfunktionen wiearray_agg, die explizit Arrays beinhalten; jedoch haben mit Ausnahme des PostgreSQL-Backends und möglicherweise einiger Drittanbieter-Dialekte keine anderen SQLAlchemy-eingebauten Dialekte Unterstützung für diesen Typ.Ein
ARRAYTyp wird anhand des "Typs" des Elements konstruiert.mytable = Table("mytable", metadata, Column("data", ARRAY(Integer)))
Der obige Typ repräsentiert ein N-dimensionales Array, was bedeutet, dass ein unterstützendes Backend wie PostgreSQL Werte mit beliebiger Anzahl von Dimensionen automatisch interpretiert. Um eine INSERT-Anweisung zu erstellen, die ein 1-dimensionales Array von Ganzzahlen übergibt.
connection.execute(mytable.insert(), {"data": [1, 2, 3]})
Der
ARRAYTyp kann mit einer festen Anzahl von Dimensionen konstruiert werden.mytable = Table( "mytable", metadata, Column("data", ARRAY(Integer, dimensions=2)) )
Die Angabe der Anzahl der Dimensionen ist optional, aber empfohlen, wenn der Datentyp Arrays mit mehr als einer Dimension repräsentieren soll. Diese Zahl wird verwendet.
Beim Ausgeben der Typdeklaration selbst an die Datenbank, z.B.
INTEGER[][].Beim Übersetzen von Python-Werten in Datenbankwerte und umgekehrt, z.B. verwendet ein ARRAY von
Unicode-Objekten diese Zahl, um effizient auf die String-Werte innerhalb von Array-Strukturen zuzugreifen, ohne auf die Typinspektion pro Zeile zurückgreifen zu müssen.Bei Verwendung mit dem Python
getitemAkzessor dient die Anzahl der Dimensionen dazu, die Art des Typs zu definieren, den der[]Operator zurückgeben soll, z.B. für ein ARRAY von INTEGER mit zwei Dimensionen.>>> expr = table.c.column[5] # returns ARRAY(Integer, dimensions=1) >>> expr = expr[6] # returns Integer
Für 1-dimensionale Arrays geht eine
ARRAYInstanz ohne Dimensionsparameter generell von eindimensionalen Verhaltensweisen aus.SQL-Ausdrücke vom Typ
ARRAYunterstützen "Index"- und "Slice"-Verhalten. Der[]Operator erzeugt Ausdruckskonstrukte, die die entsprechende SQL-Anweisung generieren, sowohl für SELECT-Anweisungen.select(mytable.c.data[5], mytable.c.data[2:7])
als auch für UPDATE-Anweisungen, wenn die Methode
Update.values()verwendet wird.mytable.update().values( {mytable.c.data[5]: 7, mytable.c.data[2:7]: [1, 2, 3]} )
Der indizierte Zugriff ist standardmäßig einsbasiert; für die nullbasierte Indexkonvertierung setzen Sie
ARRAY.zero_indexes.Der
ARRAYTyp bietet auch die OperatorenComparator.any()undComparator.all(). Die PostgreSQL-spezifische Version vonARRAYbietet zusätzliche Operatoren.Erkennung von Änderungen in ARRAY-Spalten bei Verwendung des ORM
Der
ARRAYTyp erkennt bei Verwendung mit dem SQLAlchemy ORM keine In-Place-Mutationen des Arrays. Um diese zu erkennen, muss die Erweiterungsqlalchemy.ext.mutablemit der KlasseMutableListverwendet werden.from sqlalchemy import ARRAY from sqlalchemy.ext.mutable import MutableList class SomeOrmClass(Base): # ... data = Column(MutableList.as_mutable(ARRAY(Integer)))
Diese Erweiterung ermöglicht es, "In-Place"-Änderungen am Array, wie z.B.
.append(), auszulösen, die vom Unit of Work erkannt werden. Beachten Sie, dass Änderungen an Elementen **innerhalb** des Arrays, einschließlich von Unter-Arrays, die in-Place mutiert werden, **nicht** erkannt werden.Alternativ wird durch die Zuweisung eines neuen Array-Werts zu einem ORM-Element, das den alten ersetzt, immer ein Änderungsereignis ausgelöst.
Siehe auch
Mitglieder
Klassensignatur
class
sqlalchemy.types.ARRAY(sqlalchemy.sql.expression.SchemaEventTarget,sqlalchemy.types.Indexable,sqlalchemy.types.Concatenable,sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.ARRAY.__init__(item_type: _TypeEngineArgument[Any], as_tuple: bool = False, dimensions: int | None = None, zero_indexes: bool = False)¶ Konstruiert ein
ARRAY.Z. B.
Column("myarray", ARRAY(Integer))
Argumente sind
- Parameter:
item_type¶ – Der Datentyp der Elemente dieses Arrays. Beachten Sie, dass die Dimensionalität hier irrelevant ist, so dass mehrdimensionale Arrays wie
INTEGER[][]alsARRAY(Integer)und nicht alsARRAY(ARRAY(Integer))oder ähnliches konstruiert werden.as_tuple=False¶ – Gibt an, ob Ergebniswerte von Listen in Tupel konvertiert werden sollen. Dieser Parameter ist im Allgemeinen nicht notwendig, da eine Python-Liste gut mit einem SQL-Array korrespondiert.
dimensions¶ – wenn ungleich None, nimmt das ARRAY eine feste Anzahl von Dimensionen an. Dies beeinflusst, wie das Array in der Datenbank deklariert wird, wie es Python- und Ergebniswerte interpretiert und wie das Ausdrucksverhalten in Verbindung mit dem "getitem"-Operator funktioniert. Siehe die Beschreibung bei
ARRAYfür weitere Details.zero_indexes=False¶ – wenn True, werden Indexwerte zwischen Python-Nullbasierung und SQL-Einsbasierung konvertiert, z.B. wird ein Wert von eins zu allen Indexwerten addiert, bevor sie an die Datenbank übergeben werden.
- class Comparator¶
Definiert Vergleichsoperationen für
ARRAY.Weitere Operatoren sind in der dialektspezifischen Form dieses Typs verfügbar. Siehe
Comparator.Klassensignatur
class
sqlalchemy.types.ARRAY.Comparator(sqlalchemy.types.Comparator,sqlalchemy.types.Comparator)-
method
sqlalchemy.types.ARRAY.Comparator.contains(*arg, **kw)¶ ARRAY.contains()ist für den Basis-ARRAY-Typ nicht implementiert. Verwenden Sie den dialektspezifischen ARRAY-Typ.Siehe auch
ARRAY- PostgreSQL-spezifische Version.
-
method
sqlalchemy.types.ARRAY.Comparator.any(other, operator=None)¶ Gibt eine
other operator ANY (array)Klausel zurück.Legacy-Funktion
Diese Methode ist eine
ARRAY-spezifische Konstruktion, die nun von der Funktionany_()abgelöst wurde, welche einen anderen Aufrufstil aufweist. Die Funktionany_()wird auch auf Methodenebene über die MethodeColumnOperators.any_()gespiegelt.Verwendung des array-spezifischen
Comparator.any()erfolgt wie folgt:from sqlalchemy.sql import operators conn.execute( select(table.c.data).where(table.c.data.any(7, operator=operators.lt)) )
-
method
sqlalchemy.types.ARRAY.Comparator.all(other, operator=None)¶ Gibt eine
other operator ALL (array)Klausel zurück.Legacy-Funktion
Diese Methode ist eine
ARRAY-spezifische Konstruktion, die nun von der Funktionall_()abgelöst wurde, welche einen anderen Aufrufstil aufweist. Die Funktionall_()wird auch auf Methodenebene über die MethodeColumnOperators.all_()gespiegelt.Verwendung des array-spezifischen
Comparator.all()erfolgt wie folgt:from sqlalchemy.sql import operators conn.execute( select(table.c.data).where(table.c.data.all(7, operator=operators.lt)) )
-
method
- class sqlalchemy.types.BIGINT¶
Der SQL-Datentyp BIGINT.
Siehe auch
BigInteger- Dokumentation für den Basistyp.Klassensignatur
- class sqlalchemy.types.BINARY¶
Der SQL-Datentyp BINARY.
Klassensignatur
class
sqlalchemy.types.BINARY(sqlalchemy.types._Binary)
- class sqlalchemy.types.BLOB¶
Der SQL-Datentyp BLOB.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.BLOB.__init__(length: int | None = None)¶ geerbt von der
sqlalchemy.types.LargeBinary.__init__Methode vonLargeBinaryKonstruiert einen LargeBinary-Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL-Anweisungen, für Binärtypen, die eine Länge akzeptieren, wie z. B. der MySQL BLOB-Typ.
-
method
- class sqlalchemy.types.BOOLEAN¶
Der SQL-Datentyp BOOLEAN.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.BOOLEAN.__init__(create_constraint: bool = False, name: str | None = None, _create_events: bool = True, _adapted_from: SchemaType | None = None)¶ geerbt von der
sqlalchemy.types.Boolean.__init__Methode vonBooleanKonstruiert ein Boolean.
- Parameter:
create_constraint¶ –
standardmäßig False. Wenn das Boolean als int/smallint generiert wird, wird auch eine CHECK-Beschränkung für die Tabelle erstellt, die 1 oder 0 als Wert sicherstellt.
Hinweis
Es wird dringend empfohlen, der CHECK-Beschränkung einen expliziten Namen zu geben, um Schema-Management-Anliegen zu unterstützen. Dies kann entweder durch Setzen des Parameters
Boolean.nameoder durch Einrichten einer geeigneten Namenskonvention erfolgen; siehe Konfiguration von Beschränkungsnamenskonventionen für Hintergrundinformationen.Geändert in Version 1.4: - dieses Flag ist jetzt standardmäßig False, d.h. es wird keine CHECK-Beschränkung für einen nicht-nativen Aufzählungstyp generiert.
name¶ – wenn eine CHECK-Einschränkung generiert wird, geben Sie den Namen der Einschränkung an.
-
method
- class sqlalchemy.types.CHAR¶
Der SQL-Datentyp CHAR.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.CHAR.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEausgegeben wird. Bestimmte Datenbanken benötigen möglicherweise einelengthfür die Verwendung in DDL und lösen eine Ausnahme aus, wenn dieCREATE TABLEDDL für einVARCHARohne Länge ausgegeben wird. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
- class sqlalchemy.types.CLOB¶
Der CLOB-Datentyp.
Dieser Typ ist in Oracle Database und Informix zu finden.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.CLOB.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEausgegeben wird. Bestimmte Datenbanken benötigen möglicherweise einelengthfür die Verwendung in DDL und lösen eine Ausnahme aus, wenn dieCREATE TABLEDDL für einVARCHARohne Länge ausgegeben wird. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
- class sqlalchemy.types.DATE¶
Der SQL-Datentyp DATE.
Klassensignatur
- class sqlalchemy.types.DATETIME¶
Der SQL-Datentyp DATETIME.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.DATETIME.__init__(timezone: bool = False)¶ geerbt von der
sqlalchemy.types.DateTime.__init__Methode vonDateTimeKonstruiert ein neues
DateTime.- Parameter:
timezone¶ – boolesch. Gibt an, dass der Datetime-Typ die Zeitzonenunterstützung aktivieren soll, falls auf dem **grundlegenden datums-/zeitspeichernden Typ** verfügbar. Es wird empfohlen, den
TIMESTAMP-Datentyp direkt zu verwenden, wenn dieses Flag verwendet wird, da einige Datenbanken separate generische datums-/zeitspeichernde Typen aufweisen, die sich vom zeitzonenfähigen TIMESTAMP-Datentyp unterscheiden, wie z. B. Oracle Database.
-
method
- class sqlalchemy.types.DECIMAL¶
Der SQL-Datentyp DECIMAL.
Siehe auch
Numeric- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
-
method
sqlalchemy.types.DECIMAL.__init__(precision: int | None = None, scale: int | None = None, decimal_return_scale: int | None = None, asdecimal: bool = True)¶ geerbt von der
sqlalchemy.types.Numeric.__init__Methode vonNumericKonstruiert einen `Numeric`.
- Parameter:
precision¶ – die numerische Präzision für die Verwendung in DDL
CREATE TABLE.scale¶ – die numerische Skalierung für die Verwendung in DDL
CREATE TABLE.asdecimal¶ – Standardmäßig True. Gibt an, ob Werte als Python Decimal-Objekte oder als Gleitkommazahlen zurückgegeben werden sollen. Verschiedene DBAPIs geben eines von beiden zurück, je nach Datentyp – der Numeric-Typ stellt sicher, dass die Rückgabewerte über DBAPIs hinweg konsistent sind.
decimal_return_scale¶ – Standard-Skalierung, die beim Konvertieren von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommazahlen sind aufgrund von Dezimalungenauigkeiten typischerweise viel länger, und die meisten Gleitkomma-Datenbanktypen haben keine Vorstellung von "Skalierung", so dass der Float-Typ standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung sucht. Die Angabe dieses Wertes überschreibt diese Länge. Typen, die einen expliziten ".scale"-Wert enthalten, wie der Basistyp
Numericsowie die MySQL-Float-Typen, verwenden den Wert von ".scale" als Standard für decimal_return_scale, falls nicht anders angegeben.
Bei Verwendung des
Numeric-Datentyps ist Vorsicht geboten, um sicherzustellen, dass die `asdecimal`-Einstellung für den verwendeten DBAPI geeignet ist. Wenn Numeric eine Konvertierung von Decimal->float oder float->Decimal anwendet, verursacht diese Konvertierung zusätzliche Leistungskosten für alle empfangenen Ergebnisspalten.DBAPIs, die Decimal nativ zurückgeben (z. B. psycopg2), haben eine bessere Genauigkeit und höhere Leistung bei
True, da die native Übersetzung zu Decimal die Anzahl der Gleitkommaprobleme reduziert und der Numeric-Typ selbst keine weiteren Konvertierungen anwenden muss. Ein anderer DBAPI, der Floats nativ zurückgibt, *verursacht* jedoch zusätzliche Konvertierungskosten und unterliegt weiterhin Gleitkommadatenverlust – in diesem Fall entferntasdecimal=Falsezumindest die zusätzlichen Konvertierungskosten.
-
method
- class sqlalchemy.types.DOUBLE¶
Der SQL-Datentyp DOUBLE.
Neu in Version 2.0.
Siehe auch
Double- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
-
method
sqlalchemy.types.DOUBLE.__init__(precision: int | None = None, asdecimal: bool = False, decimal_return_scale: int | None = None)¶ geerbt von der
sqlalchemy.types.Float.__init__Methode vonFloatKonstruiert einen Float.
- Parameter:
precision¶ –
die numerische Präzision für die Verwendung in DDL
CREATE TABLE. Backends **sollten** versuchen, diese Präzision anzugeben, um die Anzahl der Ziffern für den generischen DatentypFloatanzugeben.Hinweis
Für das Oracle Database-Backend wird der Parameter
Float.precisionbei der Rendern von DDL nicht akzeptiert, da die Oracle Database keine Gleitkommapräzision unterstützt, die als Anzahl von Dezimalstellen angegeben wird. Verwenden Sie stattdessen den Oracle Database-spezifischen DatentypFLOATund geben Sie den ParameterFLOAT.binary_precisionan. Dies ist neu in Version 2.0 von SQLAlchemy.Um ein datenbankagnostisches
Floatzu erstellen, das die binäre Präzision für Oracle Database separat angibt, verwenden SieTypeEngine.with_variant()wie folgtfrom sqlalchemy import Column from sqlalchemy import Float from sqlalchemy.dialects import oracle Column( "float_data", Float(5).with_variant(oracle.FLOAT(binary_precision=16), "oracle"), )
asdecimal¶ – dasselbe Flag wie bei
Numeric, aber standardmäßig aufFalsegesetzt. Beachten Sie, dass das Setzen dieses Flags aufTruezu einer Gleitkommakonvertierung führt.decimal_return_scale¶ – Standard-Skalierung, die beim Konvertieren von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommazahlen sind aufgrund von Dezimalungenauigkeiten typischerweise viel länger, und die meisten Gleitkomma-Datenbanktypen haben keine Vorstellung von "Skalierung", so dass der Float-Typ standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung sucht. Die Angabe dieses Wertes überschreibt diese Länge. Beachten Sie, dass die MySQL-Float-Typen, die eine "Skalierung" enthalten, "Skalierung" als Standard für decimal_return_scale verwenden, falls nicht anders angegeben.
-
method
- class sqlalchemy.types.DOUBLE_PRECISION¶
Der SQL-Datentyp DOUBLE PRECISION.
Neu in Version 2.0.
Siehe auch
Double- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
class
sqlalchemy.types.DOUBLE_PRECISION(sqlalchemy.types.Double)-
method
sqlalchemy.types.DOUBLE_PRECISION.__init__(precision: int | None = None, asdecimal: bool = False, decimal_return_scale: int | None = None)¶ geerbt von der
sqlalchemy.types.Float.__init__Methode vonFloatKonstruiert einen Float.
- Parameter:
precision¶ –
die numerische Präzision für die Verwendung in DDL
CREATE TABLE. Backends **sollten** versuchen, diese Präzision anzugeben, um die Anzahl der Ziffern für den generischen DatentypFloatanzugeben.Hinweis
Für das Oracle Database-Backend wird der Parameter
Float.precisionbei der Rendern von DDL nicht akzeptiert, da die Oracle Database keine Gleitkommapräzision unterstützt, die als Anzahl von Dezimalstellen angegeben wird. Verwenden Sie stattdessen den Oracle Database-spezifischen DatentypFLOATund geben Sie den ParameterFLOAT.binary_precisionan. Dies ist neu in Version 2.0 von SQLAlchemy.Um ein datenbankagnostisches
Floatzu erstellen, das die binäre Präzision für Oracle Database separat angibt, verwenden SieTypeEngine.with_variant()wie folgtfrom sqlalchemy import Column from sqlalchemy import Float from sqlalchemy.dialects import oracle Column( "float_data", Float(5).with_variant(oracle.FLOAT(binary_precision=16), "oracle"), )
asdecimal¶ – dasselbe Flag wie bei
Numeric, aber standardmäßig aufFalsegesetzt. Beachten Sie, dass das Setzen dieses Flags aufTruezu einer Gleitkommakonvertierung führt.decimal_return_scale¶ – Standard-Skalierung, die beim Konvertieren von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommazahlen sind aufgrund von Dezimalungenauigkeiten typischerweise viel länger, und die meisten Gleitkomma-Datenbanktypen haben keine Vorstellung von "Skalierung", so dass der Float-Typ standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung sucht. Die Angabe dieses Wertes überschreibt diese Länge. Beachten Sie, dass die MySQL-Float-Typen, die eine "Skalierung" enthalten, "Skalierung" als Standard für decimal_return_scale verwenden, falls nicht anders angegeben.
-
method
- class sqlalchemy.types.FLOAT¶
Der SQL-Datentyp FLOAT.
Siehe auch
Float- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
-
method
sqlalchemy.types.FLOAT.__init__(precision: int | None = None, asdecimal: bool = False, decimal_return_scale: int | None = None)¶ geerbt von der
sqlalchemy.types.Float.__init__Methode vonFloatKonstruiert einen Float.
- Parameter:
precision¶ –
die numerische Präzision für die Verwendung in DDL
CREATE TABLE. Backends **sollten** versuchen, diese Präzision anzugeben, um die Anzahl der Ziffern für den generischen DatentypFloatanzugeben.Hinweis
Für das Oracle Database-Backend wird der Parameter
Float.precisionbei der Rendern von DDL nicht akzeptiert, da die Oracle Database keine Gleitkommapräzision unterstützt, die als Anzahl von Dezimalstellen angegeben wird. Verwenden Sie stattdessen den Oracle Database-spezifischen DatentypFLOATund geben Sie den ParameterFLOAT.binary_precisionan. Dies ist neu in Version 2.0 von SQLAlchemy.Um ein datenbankagnostisches
Floatzu erstellen, das die binäre Präzision für Oracle Database separat angibt, verwenden SieTypeEngine.with_variant()wie folgtfrom sqlalchemy import Column from sqlalchemy import Float from sqlalchemy.dialects import oracle Column( "float_data", Float(5).with_variant(oracle.FLOAT(binary_precision=16), "oracle"), )
asdecimal¶ – dasselbe Flag wie bei
Numeric, aber standardmäßig aufFalsegesetzt. Beachten Sie, dass das Setzen dieses Flags aufTruezu einer Gleitkommakonvertierung führt.decimal_return_scale¶ – Standard-Skalierung, die beim Konvertieren von Gleitkommazahlen in Python-Dezimalzahlen verwendet wird. Gleitkommazahlen sind aufgrund von Dezimalungenauigkeiten typischerweise viel länger, und die meisten Gleitkomma-Datenbanktypen haben keine Vorstellung von "Skalierung", so dass der Float-Typ standardmäßig die ersten zehn Dezimalstellen bei der Konvertierung sucht. Die Angabe dieses Wertes überschreibt diese Länge. Beachten Sie, dass die MySQL-Float-Typen, die eine "Skalierung" enthalten, "Skalierung" als Standard für decimal_return_scale verwenden, falls nicht anders angegeben.
-
method
-
attribute
sqlalchemy.types..sqlalchemy.types.INT¶ Alias für
INTEGER
- class sqlalchemy.types.JSON¶
Repräsentiert einen SQL-JSON-Typ.
Hinweis
JSONwird als Fassade für herstellerspezifische JSON-Typen bereitgestellt. Da er JSON-SQL-Operationen unterstützt, funktioniert er nur auf Backends, die einen tatsächlichen JSON-Typ haben, derzeitPostgreSQL - siehe
sqlalchemy.dialects.postgresql.JSONundsqlalchemy.dialects.postgresql.JSONBfür backend-spezifische HinweiseMySQL - siehe
sqlalchemy.dialects.mysql.JSONfür backend-spezifische HinweiseSQLite ab Version 3.9 - siehe
sqlalchemy.dialects.sqlite.JSONfür backend-spezifische HinweiseMicrosoft SQL Server 2016 und höher - siehe
sqlalchemy.dialects.mssql.JSONfür backend-spezifische Hinweise
JSONist Teil des Core zur Unterstützung der wachsenden Popularität nativer JSON-Datentypen.Der
JSON-Datentyp speichert beliebige JSON-Formatdaten, z. B.data_table = Table( "data_table", metadata, Column("id", Integer, primary_key=True), Column("data", JSON), ) with engine.connect() as conn: conn.execute( data_table.insert(), {"data": {"key1": "value1", "key2": "value2"}} )
JSON-spezifische Ausdrucksoperatoren
Der
JSON-Datentyp bietet diese zusätzlichen SQL-OperationenSchlüsselbasierte Indexoperationen
data_table.c.data["some key"]
Ganzzahlbasierte Indexoperationen
data_table.c.data[3]
Pfadbasierte Indexoperationen
data_table.c.data[("key_1", "key_2", 5, ..., "key_n")]
Datenkonverter für bestimmte JSON-Elementtypen, nach Aufruf einer Index- oder Pfadoperation
data_table.c.data["some key"].as_integer()
Neu ab Version 1.3.11.
Zusätzliche Operationen können von den dialektspezifischen Versionen von
JSONverfügbar sein, wie z. B.sqlalchemy.dialects.postgresql.JSONundsqlalchemy.dialects.postgresql.JSONB, die beide zusätzliche PostgreSQL-spezifische Operationen bieten.Konvertierung von JSON-Elementen in andere Typen
Indexoperationen, d.h. solche, die durch Aufruf des Ausdrucks mit dem Python-Klammeroperator wie in
some_column['some key']aufgerufen werden, geben ein Ausdrucksobjekt zurück, dessen Typ standardmäßigJSONist, so dass weitere JSON-orientierte Anweisungen auf den Ergebnistyp angewendet werden können. Wahrscheinlicher ist jedoch, dass eine Indexoperation ein bestimmtes Skalar-Element wie eine Zeichenkette oder eine Ganzzahl zurückgeben soll. Um auf diese Elemente backend-unabhängig zugreifen zu können, wird eine Reihe von Datenkonvertern bereitgestelltComparator.as_string()- gibt das Element als Zeichenkette zurückComparator.as_boolean()- gibt das Element als booleschen Wert zurückComparator.as_float()- gibt das Element als Gleitkommazahl zurückComparator.as_integer()- gibt das Element als Ganzzahl zurück
Diese Datentypen werden von unterstützenden Dialekten implementiert, um sicherzustellen, dass Vergleiche mit den obigen Typen wie erwartet funktionieren, z. B.:
# integer comparison data_table.c.data["some_integer_key"].as_integer() == 5 # boolean comparison data_table.c.data["some_boolean"].as_boolean() == True
Neu in Version 1.3.11: Typenspezifische Konverter für die grundlegenden JSON-Datenelementtypen hinzugefügt.
Hinweis
Die Datenkonverterfunktionen sind neu in Version 1.3.11 und ersetzen die zuvor dokumentierten Ansätze zur Verwendung von CAST; als Referenz sah dies wie folgt aus:
from sqlalchemy import cast, type_coerce from sqlalchemy import String, JSON cast(data_table.c.data["some_key"], String) == type_coerce(55, JSON)
Der obige Fall funktioniert jetzt direkt wie
data_table.c.data["some_key"].as_integer() == 5
Details zum vorherigen Vergleichsansatz in der Serie 1.3.x finden Sie in der Dokumentation für SQLAlchemy 1.2 oder in den enthaltenen HTML-Dateien im Verzeichnis doc/ der jeweiligen Version.
Änderungen in JSON-Spalten bei Verwendung des ORM erkennen
Der Typ
JSONerkennt bei Verwendung mit dem SQLAlchemy ORM keine In-Place-Mutationen der Struktur. Um diese zu erkennen, muss die Erweiterungsqlalchemy.ext.mutableverwendet werden, am häufigsten mit der KlasseMutableDict. Diese Erweiterung ermöglicht es "In-Place"-Änderungen an der Datenstruktur, Ereignisse zu erzeugen, die von der Unit of Work erkannt werden. Siehe das Beispiel unterHSTOREfür ein einfaches Beispiel mit einem Wörterbuch.Alternativ löst die Zuweisung einer JSON-Struktur an ein ORM-Element, das das alte ersetzt, immer ein Änderungsereignis aus.
Unterstützung für JSON-Null vs. SQL-NULL
Bei der Arbeit mit NULL-Werten empfiehlt der Typ
JSONdie Verwendung von zwei spezifischen Konstanten, um zwischen einer Spalte, die zu SQL NULL ausgewertet wird (d. h. kein Wert), und dem JSON-kodierten String"null"zu unterscheiden. Um einen Wert einzufügen oder abzufragen, der SQL NULL ist, verwenden Sie die Konstantenull(). Dieses Symbol kann als Parameterwert übergeben werden, insbesondere bei Verwendung des DatentypsJSON, der spezielle Logik enthält, die dieses Symbol interpretiert als bedeutet, dass der Spaltenwert SQL NULL und nicht JSON"null"sein soll.from sqlalchemy import null conn.execute(table.insert(), {"json_value": null()})
Um einen Wert einzufügen oder abzufragen, der JSON
"null"ist, verwenden Sie die KonstanteJSON.NULL.conn.execute(table.insert(), {"json_value": JSON.NULL})
Der Typ
JSONunterstützt ein FlagJSON.none_as_null, das, wenn es auf True gesetzt ist, dazu führt, dass die Python-KonstanteNoneals SQL NULL ausgewertet wird, und wenn es auf False gesetzt ist, dazu führt, dass die Python-KonstanteNoneals JSON"null"ausgewertet wird. Der Python-WertNonekann in Verbindung mitJSON.NULLundnull()verwendet werden, um NULL-Werte anzuzeigen. Dabei ist jedoch auf den Wert vonJSON.none_as_nullzu achten.Anpassen des JSON-Serialisierers
Der von
JSONverwendete JSON-Serialisierer und -Deserialisierer sind standardmäßig die Funktionenjson.dumpsundjson.loadsvon Python; im Fall des psycopg2-Dialekts kann psycopg2 seine eigene benutzerdefinierte Ladefunktion verwenden.Um den Serialisierer/Deserialisierer zu beeinflussen, können diese derzeit auf der Ebene von
create_engine()über die Parametercreate_engine.json_serializerundcreate_engine.json_deserializerkonfiguriert werden. Zum Beispiel, umensure_asciizu deaktivieren.engine = create_engine( "sqlite://", json_serializer=lambda obj: json.dumps(obj, ensure_ascii=False), )
Geändert in Version 1.3.7: Die Parameter
json_serializerundjson_deserializerdes SQLite-Dialekts wurden von_json_serializerund_json_deserializerumbenannt.Siehe auch
sqlalchemy.dialects.postgresql.JSONsqlalchemy.dialects.postgresql.JSONBMitglieder
as_boolean(), as_float(), as_integer(), as_json(), as_numeric(), as_string(), bind_processor(), literal_processor(), NULL, __init__(), bind_processor(), comparator_factory, hashable, python_type, result_processor(), should_evaluate_none
Klassensignatur
class
sqlalchemy.types.JSON(sqlalchemy.types.Indexable,sqlalchemy.types.TypeEngine)- class Comparator¶
Definiert Vergleichsoperationen für
JSON.Klassensignatur
class
sqlalchemy.types.JSON.Comparator(sqlalchemy.types.Comparator,sqlalchemy.types.Comparator)-
method
sqlalchemy.types.JSON.Comparator.as_boolean()¶ Betrachtet einen indizierten Wert als booleschen Wert.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_boolean()).where( mytable.c.json_column["some_data"].as_boolean() == True )
Neu ab Version 1.3.11.
-
method
sqlalchemy.types.JSON.Comparator.as_float()¶ Betrachtet einen indizierten Wert als Float.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_float()).where( mytable.c.json_column["some_data"].as_float() == 29.75 )
Neu ab Version 1.3.11.
-
method
sqlalchemy.types.JSON.Comparator.as_integer()¶ Betrachtet einen indizierten Wert als Integer.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_integer()).where( mytable.c.json_column["some_data"].as_integer() == 5 )
Neu ab Version 1.3.11.
-
method
sqlalchemy.types.JSON.Comparator.as_json()¶ Betrachtet einen indizierten Wert als JSON.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_json())
Dies ist in der Regel das Standardverhalten für indizierte Elemente.
Beachten Sie, dass der Vergleich vollständiger JSON-Strukturen möglicherweise nicht von allen Backends unterstützt wird.
Neu ab Version 1.3.11.
-
method
sqlalchemy.types.JSON.Comparator.as_numeric(precision, scale, asdecimal=True)¶ Betrachtet einen indizierten Wert als numerischen/Dezimalwert.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_numeric(10, 6)).where( mytable.c.json_column["some_data"].as_numeric(10, 6) == 29.75 )
Neu ab Version 1.4.0b2.
-
method
sqlalchemy.types.JSON.Comparator.as_string()¶ Betrachtet einen indizierten Wert als String.
Dies ist ähnlich wie die Verwendung von
type_coerceund wird normalerweise keinCAST()anwenden.z. B.
stmt = select(mytable.c.json_column["some_data"].as_string()).where( mytable.c.json_column["some_data"].as_string() == "some string" )
Neu ab Version 1.3.11.
-
method
- class JSONElementType¶
Gemeinsame Funktion für Index- / Pfadelemente in einem JSON-Ausdruck.
Klassensignatur
class
sqlalchemy.types.JSON.JSONElementType(sqlalchemy.types.TypeEngine)-
method
sqlalchemy.types.JSON.JSONElementType.bind_processor(dialect: Dialect) → _BindProcessorType[Any]¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Instanz des verwendeten Dialekts.
-
method
sqlalchemy.types.JSON.JSONElementType.literal_processor(dialect: Dialect) → _LiteralProcessorType[Any]¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Literalwerten zurück, die direkt ohne Verwendung von Binds gerendert werden sollen.
Diese Funktion wird verwendet, wenn der Compiler das Flag „literal_binds“ verwendet, was typischerweise bei der DDL-Generierung sowie in bestimmten Szenarien, in denen Backends keine gebundenen Parameter akzeptieren, verwendet wird.
Gibt eine aufrufbare Funktion zurück, die einen literalen Python-Wert als einziges positionsbezogenes Argument erhält und eine Zeichenkettendarstellung zurückgibt, die in einer SQL-Anweisung gerendert wird.
Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.literal_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.literal_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_literal_param()bereit.Siehe auch
-
method
- class JSONIndexType¶
Platzhalter für den Datentyp eines JSON-Indexwerts.
Dies ermöglicht die Laufzeitverarbeitung von JSON-Indexwerten für spezielle Syntaxen.
Klassensignatur
class
sqlalchemy.types.JSON.JSONIndexType(sqlalchemy.types.JSONElementType)
- class JSONIntIndexType¶
Platzhalter für den Datentyp eines JSON-Indexwerts.
Dies ermöglicht die Laufzeitverarbeitung von JSON-Indexwerten für spezielle Syntaxen.
Klassensignatur
class
sqlalchemy.types.JSON.JSONIntIndexType(sqlalchemy.types.JSONIndexType)
- class JSONPathType¶
Platzhaltertyp für JSON-Pfadoperationen.
Dies ermöglicht die Laufzeitverarbeitung eines pfadbasierten Indexwerts in eine spezifische SQL-Syntax.
Klassensignatur
class
sqlalchemy.types.JSON.JSONPathType(sqlalchemy.types.JSONElementType)
- class JSONStrIndexType¶
Platzhalter für den Datentyp eines JSON-Indexwerts.
Dies ermöglicht die Laufzeitverarbeitung von JSON-Indexwerten für spezielle Syntaxen.
Klassensignatur
class
sqlalchemy.types.JSON.JSONStrIndexType(sqlalchemy.types.JSONIndexType)
-
attribute
sqlalchemy.types.JSON.NULL = symbol('JSON_NULL')¶ Beschreibt den JSON-Wert von NULL.
Dieser Wert wird verwendet, um zu erzwingen, dass der JSON-Wert
"null"als Wert verwendet wird. Ein Wert von PythonNonewird entweder als SQL NULL oder als JSON"null"erkannt, basierend auf der Einstellung des FlagsJSON.none_as_null; die KonstanteJSON.NULLkann verwendet werden, um unabhängig von dieser Einstellung immer zu JSON"null"aufzulösen. Dies steht im Gegensatz zu dem Konstruktnull(), das immer zu SQL NULL aufgelöst wird. Z.B.from sqlalchemy import null from sqlalchemy.dialects.postgresql import JSON # will *always* insert SQL NULL obj1 = MyObject(json_value=null()) # will *always* insert JSON string "null" obj2 = MyObject(json_value=JSON.NULL) session.add_all([obj1, obj2]) session.commit()
Um JSON NULL als Standardwert für eine Spalte festzulegen, ist die transparenteste Methode die Verwendung von
text()Table( "my_table", metadata, Column("json_data", JSON, default=text("'null'")) )
Obwohl es möglich ist,
JSON.NULLin diesem Kontext zu verwenden, wird der WertJSON.NULLals Wert der Spalte zurückgegeben, was im Kontext des ORM oder anderer Wiederverwendungen des Standardwerts möglicherweise nicht wünschenswert ist. Die Verwendung eines SQL-Ausdrucks bedeutet, dass der Wert aus der Datenbank im Kontext des Abrufens generierter Standardwerte neu abgefragt wird.
-
method
sqlalchemy.types.JSON.__init__(none_as_null: bool = False)¶ Konstruiert einen
JSON-Typ.- Parameter:
none_as_null=False¶ –
wenn True, persistiert den Wert
Noneals SQL NULL, nicht als JSON-Kodierung vonnull. Beachten Sie, dass, wenn dieses Flag False ist, das Konstruktnull()immer noch verwendet werden kann, um einen NULL-Wert zu persistieren, der direkt als Parameterwert übergeben werden kann, der vom TypJSONspeziell als SQL NULL interpretiert wird.from sqlalchemy import null conn.execute(table.insert(), {"data": null()})
Hinweis
JSON.none_as_nullgilt **nicht** für die Werte, die anColumn.defaultundColumn.server_defaultübergeben werden; ein Wert vonNone, der für diese Parameter übergeben wird, bedeutet "kein Standard vorhanden".Zusätzlich gilt bei Verwendung in SQL-Vergleichsausdrücken der Python-Wert
Noneweiterhin für SQL null und nicht für JSON null. Das FlagJSON.none_as_nullbezieht sich explizit auf die **Persistenz** des Werts in einer INSERT- oder UPDATE-Anweisung. Der WertJSON.NULLsollte für SQL-Ausdrücke verwendet werden, die mit JSON null verglichen werden sollen.Siehe auch
-
method
sqlalchemy.types.JSON.bind_processor(dialect)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Bindungswerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Bindungsparameterwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der an die DB-API gesendet werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.bind_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.bind_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_bind_param()bereit.Siehe auch
- Parameter:
dialect¶ – Instanz des verwendeten Dialekts.
-
attribute
sqlalchemy.types.JSON.comparator_factory¶ alias von
Comparator
-
attribute
sqlalchemy.types.JSON.hashable = False¶ Flag, wenn False, bedeutet, dass Werte dieses Typs nicht hashbar sind.
Wird vom ORM beim Eindeutigen machen von Ergebnislisten verwendet.
-
attribute
sqlalchemy.types.JSON.python_type¶
-
method
sqlalchemy.types.JSON.result_processor(dialect, coltype)¶ Gibt eine Konvertierungsfunktion zur Verarbeitung von Ergebniszeilenwerten zurück.
Gibt eine aufrufbare Funktion zurück, die einen Ergebniszeilen-Spaltenwert als einziges Positionsargument empfängt und einen Wert zurückgibt, der dem Benutzer zurückgegeben werden soll.
Wenn keine Verarbeitung erforderlich ist, sollte die Methode
Nonezurückgeben.Hinweis
Diese Methode wird nur in Bezug auf ein **dialektspezifisches Typobjekt** aufgerufen, das oft **privat für den verwendeten Dialekt** ist und nicht dasselbe Typobjekt wie das öffentlich sichtbare ist. Daher ist es nicht möglich, eine
TypeEngine-Klasse zu unterklassen, um eine alternativeTypeEngine.result_processor()-Methode bereitzustellen, es sei denn, Sie unterklassen explizit dieUserDefinedType-Klasse.Um ein alternatives Verhalten für
TypeEngine.result_processor()bereitzustellen, implementieren Sie eineTypeDecorator-Klasse und stellen Sie eine Implementierung vonTypeDecorator.process_result_value()bereit.Siehe auch
-
attribute
sqlalchemy.types.JSON.should_evaluate_none: bool¶ Wenn True, wird die Python-Konstante
Noneexplizit von diesem Typ behandelt.Das ORM verwendet dieses Flag, um anzuzeigen, dass ein positiver Wert von
Nonein einer INSERT-Anweisung an die Spalte übergeben wird, anstatt die Spalte aus der INSERT-Anweisung wegzulassen, was die Ausführung spaltenspezifischer Standardwerte zur Folge hat. Es ermöglicht auch Typen mit speziellem Verhalten für Python None, wie z. B. ein JSON-Typ, anzuzeigen, dass sie den None-Wert explizit behandeln möchten.Um dieses Flag für einen vorhandenen Typ festzulegen, verwenden Sie die Methode
TypeEngine.evaluates_none().Siehe auch
- class sqlalchemy.types.INTEGER¶
Der SQL-Datentyp INT oder INTEGER.
Siehe auch
Integer- Dokumentation für den Basistyp.Klassensignatur
- class sqlalchemy.types.NCHAR¶
Der SQL-Datentyp NCHAR.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.NCHAR.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLE-Anweisung ausgegeben wird. Bestimmte Datenbanken erfordern möglicherweise einelengthfür die Verwendung in DDL und lösen eine Ausnahme aus, wenn dieCREATE TABLE-DDL ausgegeben wird, wenn einVARCHARohne Länge enthalten ist. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
- class sqlalchemy.types.NVARCHAR¶
Der SQL-Datentyp NVARCHAR.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.NVARCHAR.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEAnweisung ausgegeben wird. Bestimmte Datenbanken können einelengthfür die Verwendung in DDL benötigen und lösen eine Ausnahme aus, wenn dieCREATE TABLEDDL-Anweisung ausgegeben wird, wenn einVARCHARohne Länge enthalten ist. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
- class sqlalchemy.types.NUMERIC¶
Der SQL-Datentyp NUMERIC.
Siehe auch
Numeric- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
-
method
sqlalchemy.types.NUMERIC.__init__(precision: int | None = None, scale: int | None = None, decimal_return_scale: int | None = None, asdecimal: bool = True)¶ geerbt von der
sqlalchemy.types.Numeric.__init__Methode vonNumericKonstruiert einen `Numeric`.
- Parameter:
precision¶ – die numerische Präzision zur Verwendung in DDL
CREATE TABLE.scale¶ – der numerische Scale zur Verwendung in DDL
CREATE TABLE.asdecimal¶ – Standardmäßig True. Gibt zurück, ob Werte als Python Decimal-Objekte oder als Floats gesendet werden sollen. Verschiedene DBAPIs senden eines von beiden basierend auf Datentypen – der Numeric-Typ stellt sicher, dass Rückgabewerte über DBAPIs hinweg konsistent eines von beiden sind.
decimal_return_scale¶ – Standard-Scale bei der Konvertierung von Floats in Python-Dezimalzahlen. Gleitkommazahlen sind typischerweise aufgrund von Dezimalungenauigkeiten sehr lang, und die meisten Gleitkomma-Datenbanktypen haben keinen Begriff von "Scale". Daher sucht der Float-Typ standardmäßig nach den ersten zehn Dezimalstellen bei der Konvertierung. Die Angabe dieses Werts überschreibt diese Länge. Typen, die einen expliziten ".scale"-Wert enthalten, wie z. B. der Basis-Typ
Numericsowie die MySQL-Float-Typen, verwenden den Wert von ".scale" als Standard für decimal_return_scale, sofern nicht anders angegeben.
Bei Verwendung des
Numeric-Datentyps ist Vorsicht geboten, um sicherzustellen, dass die `asdecimal`-Einstellung für den verwendeten DBAPI geeignet ist. Wenn Numeric eine Konvertierung von Decimal->float oder float->Decimal anwendet, verursacht diese Konvertierung zusätzliche Leistungskosten für alle empfangenen Ergebnisspalten.DBAPIs, die Decimal nativ zurückgeben (z. B. psycopg2), haben eine bessere Genauigkeit und höhere Leistung bei
True, da die native Übersetzung zu Decimal die Anzahl der Gleitkommaprobleme reduziert und der Numeric-Typ selbst keine weiteren Konvertierungen anwenden muss. Ein anderer DBAPI, der Floats nativ zurückgibt, *verursacht* jedoch zusätzliche Konvertierungskosten und unterliegt weiterhin Gleitkommadatenverlust – in diesem Fall entferntasdecimal=Falsezumindest die zusätzlichen Konvertierungskosten.
-
method
- class sqlalchemy.types.REAL¶
Der SQL-Datentyp REAL.
Siehe auch
Float- Dokumentation für den Basistyp.Mitglieder
Klassensignatur
-
method
sqlalchemy.types.REAL.__init__(precision: int | None = None, asdecimal: bool = False, decimal_return_scale: int | None = None)¶ geerbt von der
sqlalchemy.types.Float.__init__Methode vonFloatKonstruiert einen Float.
- Parameter:
precision¶ –
die numerische Präzision für die Verwendung in DDL
CREATE TABLE. Backends **sollten** versuchen, diese Präzision anzugeben, um die Anzahl der Ziffern für den generischen DatentypFloatanzugeben.Hinweis
Für das Oracle Database-Backend wird der Parameter
Float.precisionbei der Rendern von DDL nicht akzeptiert, da die Oracle Database keine Gleitkommapräzision unterstützt, die als Anzahl von Dezimalstellen angegeben wird. Verwenden Sie stattdessen den Oracle Database-spezifischen DatentypFLOATund geben Sie den ParameterFLOAT.binary_precisionan. Dies ist neu in Version 2.0 von SQLAlchemy.Um ein datenbankagnostisches
Floatzu erstellen, das die binäre Präzision für Oracle Database separat angibt, verwenden SieTypeEngine.with_variant()wie folgtfrom sqlalchemy import Column from sqlalchemy import Float from sqlalchemy.dialects import oracle Column( "float_data", Float(5).with_variant(oracle.FLOAT(binary_precision=16), "oracle"), )
asdecimal¶ – das gleiche Flag wie bei
Numeric, aber standardmäßig aufFalsegesetzt. Beachten Sie, dass das Setzen dieses Flags aufTruezu einer Gleitkomma-Konvertierung führt.decimal_return_scale¶ – Standard-Scale bei der Konvertierung von Floats in Python-Dezimalzahlen. Gleitkommazahlen sind typischerweise aufgrund von Dezimalungenauigkeiten sehr lang, und die meisten Gleitkomma-Datenbanktypen haben keinen Begriff von "Scale". Daher sucht der Float-Typ standardmäßig nach den ersten zehn Dezimalstellen bei der Konvertierung. Die Angabe dieses Werts überschreibt diese Länge. Beachten Sie, dass die MySQL-Float-Typen, die "Scale" enthalten, "Scale" als Standard für decimal_return_scale verwenden, sofern nicht anders angegeben.
-
method
- class sqlalchemy.types.SMALLINT¶
Der SQL-Datentyp SMALLINT.
Siehe auch
SmallInteger- Dokumentation für den Basistyp.Klassensignatur
class
sqlalchemy.types.SMALLINT(sqlalchemy.types.SmallInteger)
- class sqlalchemy.types.TEXT¶
Der SQL-Datentyp TEXT.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.TEXT.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEAnweisung ausgegeben wird. Bestimmte Datenbanken können einelengthfür die Verwendung in DDL benötigen und lösen eine Ausnahme aus, wenn dieCREATE TABLEDDL-Anweisung ausgegeben wird, wenn einVARCHARohne Länge enthalten ist. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
- class sqlalchemy.types.TIME¶
Der SQL-Datentyp TIME.
Klassensignatur
- class sqlalchemy.types.TIMESTAMP¶
Der SQL-Datentyp TIMESTAMP.
TIMESTAMP-Datentypen unterstützen die Zeitzonenspeicherung auf einigen Backends, wie z. B. PostgreSQL und Oracle Database. Verwenden Sie das ArgumentTIMESTAMP.timezone, um "TIMESTAMP WITH TIMEZONE" für diese Backends zu aktivieren.Mitglieder
Klassensignatur
class
sqlalchemy.types.TIMESTAMP(sqlalchemy.types.DateTime)-
method
sqlalchemy.types.TIMESTAMP.__init__(timezone: bool = False)¶ Erstellt einen neuen
TIMESTAMP.- Parameter:
timezone¶ – boolesch. Gibt an, dass der TIMESTAMP-Typ die Zeitzonenunterstützung aktivieren soll, falls auf der Ziel-Datenbank verfügbar. Auf Dialekt-Basis ist dies ähnlich wie "TIMESTAMP WITH TIMEZONE". Wenn die Ziel-Datenbank keine Zeitzonen unterstützt, wird dieses Flag ignoriert.
-
method
sqlalchemy.types.TIMESTAMP.get_dbapi_type(dbapi)¶ Gibt den entsprechenden Typobjekt aus der zugrunde liegenden DB-API zurück, falls vorhanden.
Dies kann beispielsweise nützlich sein, um
setinputsizes()aufzurufen.
-
method
- class sqlalchemy.types.UUID¶
Repräsentiert den SQL-Datentyp UUID.
Dies ist die SQL-native Form des datenbankagnostischen Datentyps
Uuidund ist abwärtskompatibel mit der früheren PostgreSQL-spezifischen Version vonUUID.Der Datentyp
UUIDfunktioniert nur auf Datenbanken, die einen SQL-Datentyp namensUUIDhaben. Er funktioniert nicht für Backends, die diesen exakten Typnamen nicht haben, einschließlich SQL Server. Für backend-agnostische UUID-Werte mit nativer Unterstützung, einschließlich SQL ServersUNIQUEIDENTIFIERDatentyp, verwenden Sie den DatentypUuid.Neu in Version 2.0.
Siehe auch
Mitglieder
Klassensignatur
class
sqlalchemy.types.UUID(sqlalchemy.types.Uuid,sqlalchemy.types.NativeForEmulated)-
method
sqlalchemy.types.UUID.__init__(as_uuid: bool = True)¶ Konstruiert einen
UUID-Typ.- Parameter:
as_uuid=True¶ –
wenn True, werden Werte als Python-UUID-Objekte interpretiert und über DBAPI in Zeichenketten konvertiert.
-
method
- class sqlalchemy.types.VARBINARY¶
Der SQL-Datentyp VARBINARY.
Klassensignatur
class
sqlalchemy.types.VARBINARY(sqlalchemy.types._Binary)
- class sqlalchemy.types.VARCHAR¶
Der SQL-Datentyp VARCHAR.
Mitglieder
Klassensignatur
-
method
sqlalchemy.types.VARCHAR.__init__(length: int | None = None, collation: str | None = None)¶ geerbt von der
sqlalchemy.types.String.__init__Methode vonStringErstellt einen String-speichernden Typ.
- Parameter:
length¶ – optional, eine Länge für die Spalte zur Verwendung in DDL- und CAST-Ausdrücken. Kann sicher weggelassen werden, wenn keine
CREATE TABLEAnweisung ausgegeben wird. Bestimmte Datenbanken können einelengthfür die Verwendung in DDL benötigen und lösen eine Ausnahme aus, wenn dieCREATE TABLEDDL-Anweisung ausgegeben wird, wenn einVARCHARohne Länge enthalten ist. Ob der Wert als Bytes oder Zeichen interpretiert wird, ist datenbankspezifisch.collation¶ –
Optional, eine Spalten-Kollation zur Verwendung in DDL- und CAST-Ausdrücken. Wird mit dem COLLATE-Schlüsselwort gerendert, das von SQLite, MySQL und PostgreSQL unterstützt wird. Z.B.
>>> from sqlalchemy import cast, select, String >>> print(select(cast("some string", String(collation="utf8"))))
SELECT CAST(:param_1 AS VARCHAR COLLATE utf8) AS anon_1Hinweis
In den meisten Fällen sollten die Datentypen
UnicodeoderUnicodeTextfür eineColumnverwendet werden, die nicht-ASCII-Daten speichern soll. Diese Datentypen stellen sicher, dass die korrekten Typen auf der Datenbank verwendet werden.
-
method
Die Designs von flambé! dem Drachen und Der Alchemist wurden von Rotem Yaari erstellt und großzügig gespendet.
Erstellt mit Sphinx 7.2.6. Dokumentation zuletzt generiert: Di 11 Mär 2025 14:40:17 EDT