SQLAlchemy 2.0 Dokumentation
Änderungen und Migration
- SQLAlchemy 2.0 - Major Migration Guide
- Was ist neu in SQLAlchemy 2.0?
- 2.0 Changelog
- 1.4 Changelog
- 1.3 Changelog
- 1.2 Changelog
- 1.1 Changelog¶
- 1.0 Changelog
- 0.9 Changelog
- 0.8 Changelog
- 0.7 Changelog
- 0.6 Changelog
- 0.5 Changelog
- 0.4 Changelog
- 0.3 Changelog
- 0.2 Changelog
- 0.1 Changelog
- Was ist neu in SQLAlchemy 1.4?
- Was ist neu in SQLAlchemy 1.3?
- Was ist neu in SQLAlchemy 1.2?
- Was ist neu in SQLAlchemy 1.1?
- Was ist neu in SQLAlchemy 1.0?
- Was ist neu in SQLAlchemy 0.9?
- Was ist neu in SQLAlchemy 0.8?
- Was ist neu in SQLAlchemy 0.7?
- Was ist neu in SQLAlchemy 0.6?
- Was ist neu in SQLAlchemy 0.5?
- Was ist neu in SQLAlchemy 0.4?
Projektversionen
1.1 Changelog¶
1.1.18¶
Veröffentlicht: 6. März 2018postgresql¶
mysql¶
[mysql] [bug] ¶
MySQL-Dialekte fragen nun explizit die Serverversion mit
SELECT @@versionab, um sicherzustellen, dass wir die korrekten Versionsinformationen zurückerhalten. Proxy-Server wie MaxScale stören den Wert, der an den server_version-Wert der DBAPI-Verbindung übergeben wird, sodass dieser nicht mehr zuverlässig ist.Referenzen: #4205
1.1.17¶
Veröffentlicht: 22. Februar 2018[bug] [ext] ¶
Behobene Regression, die in 1.2.3 und 1.1.16 bezüglich Association-Proxy-Objekten verursacht wurde. Überarbeitete den Ansatz für #4185 bei der Berechnung der "besitzenden Klasse" eines Association-Proxys, um standardmäßig die aktuelle Klasse zu wählen, wenn das Proxy-Objekt nicht direkt mit einer gemappten Klasse verbunden ist, wie z. B. ein Mixin.
Referenzen: #4185
1.1.16¶
Veröffentlicht: 16. Februar 2018orm¶
[orm] [bug] ¶
Behobenes Problem mit der `post_update`-Funktion, bei der ein UPDATE ausgegeben wurde, wenn das übergeordnete Objekt gelöscht wurde, das abhängige Objekt aber nicht. Dieses Problem bestand lange Zeit, da seit 1.2 nun Zeilen für `post_update` abgeglichen werden, was einen Fehler auslöste.
Referenzen: #4187
[orm] [bug] ¶
Behobene Regression, die durch die Korrektur des Problems #4116 verursacht wurde und die Versionen 1.2.2 sowie 1.1.15 betraf. Dies führte in einigen deklarativen Mixin/Vererbungssituationen sowie bei Zugriff auf den Association-Proxy von einer nicht zugeordneten Klasse zu einer falschen Berechnung der "besitzenden Klasse" eines
AssociationProxy, sodass die `NoneType`-Klasse als Ergebnis herauskam. Die Logik zur "Ermittlung des Besitzers" wurde durch eine detaillierte Routine ersetzt, die die vollständige Zuordnungshierarchie durchsucht, die der Klasse oder Unterklasse zugeordnet ist, um die korrekte (hoffentlich) Übereinstimmung zu ermitteln. Der Besitzer wird nicht zugewiesen, wenn keine Übereinstimmung gefunden wird. Wenn der Proxy auf eine nicht zugeordnete Instanz angewendet wird, wird nun eine Ausnahme ausgelöst.Referenzen: #4185
[orm] [bug] ¶
Behobener Fehler, bei dem ein Objekt, das während eines Rollbacks einer verschachtelten oder Untertransaktion aus der Sitzung entfernt wurde und dessen Primärschlüssel mutiert wurde, nicht korrekt aus der Sitzung entfernt wurde, was zu nachfolgenden Problemen bei der Verwendung der Sitzung führte.
Referenzen: #4151
sql¶
[sql] [bug] ¶
Hinzugefügt wurden `nullsfirst()` und `nullslast()` als Top-Level-Importe im Namensraum `sqlalchemy.` und `sqlalchemy.sql.`. Pull-Request von Lele Gaifax.
[sql] [bug] ¶
Behobener Fehler in `Insert.values()`, bei dem die Verwendung des "Multi-Values"-Formats in Kombination mit `Column`-Objekten als Schlüssel anstelle von Zeichenfolgen fehlschlug. Pull-Request von Aubrey Stark-Toller.
Referenzen: #4162
postgresql¶
[postgresql] [bug] ¶
Meldung "SSL SYSCALL error: Operation timed out" zur Liste der Meldungen hinzugefügt, die ein "Disconnect"-Szenario für den psycopg2-Treiber auslösen. Pull-Request von André Cruz.
[postgresql] [bug] ¶
Schlüsselwort "TRUNCATE" zur Liste der Schlüsselwörter hinzugefügt, die vom PostgreSQL-Dialekt als "autocommit"-auslösendes Schlüsselwort akzeptiert werden. Pull-Request von Jacob Hayes.
mysql¶
misc¶
[bug] [pool] ¶
Behobener, ziemlich ernster Fehler im Verbindungspool, bei dem eine Verbindung, die nach der Aktualisierung aufgrund eines benutzerdefinierten
DisconnectionErroroder aufgrund der mit 1.2 veröffentlichten "pre_ping"-Funktion erworben wurde, nicht korrekt zurückgesetzt wurde, wenn die Verbindung durch Garbage Collection per Weakref in den Pool zurückgegeben wurde (z. B. das frontseitige Objekt wurde garbage collected); der Weakref verwies immer noch auf die zuvor ungültig gewordene DBAPI-Verbindung, auf der die Reset-Operation fälschlicherweise aufgerufen wurde. Dies führte zu Stacktraces in den Logs und einer Verbindung, die ohne Zurücksetzen in den Pool eingecheckt wurde, was zu Sperrproblemen führen kann.Referenzen: #4184
1.1.15¶
Veröffentlicht: 3. November 2017orm¶
[orm] [bug] [ext] ¶
Behobener Fehler, bei dem sich der Association-Proxy versehentlich mit einem
AliasedClass-Objekt verknüpfte, wenn er zuerst mit demAliasedClassals Elternteil aufgerufen wurde, was zu Fehlern bei der späteren Verwendung führte.Referenzen: #4116
[orm] [bug] ¶
Behobener Fehler, bei dem die ORM-Beziehung vor konfligierenden Sync-Zielen warnte (z. B. zwei Beziehungen würden dieselbe Spalte schreiben) für Geschwisterklassen in einer Vererbungshierarchie, wo die beiden Beziehungen während des Schreibens nie tatsächlich kollidierten.
Referenzen: #4078
[orm] [bug] ¶
Behobener Fehler, bei dem eine korrelierte Auswahl, die gegen eine Single-Table-Inheritance-Entität verwendet wurde, in der äußeren Abfrage nicht korrekt gerendert wurde, aufgrund einer Anpassung für Single-Inheritance-Diskriminatorkriterien, die die Kriterien unangemessen auf die äußere Abfrage anwandten.
Referenzen: #4103
orm declarative¶
[orm] [declarative] [bug] ¶
Behobener Fehler, bei dem ein Deskriptor, der eine gemappte Spalte oder eine Beziehung an anderer Stelle in einer Hierarchie basierend auf
AbstractConcreteBaseist, während eines Refresh-Vorgangs referenziert wurde, was zu einem Fehler führte, da das Attribut nicht als Mapper-Eigenschaft zugeordnet ist. Ein ähnliches Problem kann bei anderen Attributen wie der vonAbstractConcreteBasehinzugefügten "Typ"-Spalte auftreten, wenn die Klasse "concrete=True" nicht in ihrem Mapper enthält. Die hier durchgeführte Prüfung sollte jedoch auch dieses Szenario verhindern.Referenzen: #4124
sql¶
[sql] [bug] ¶
Behobener Fehler, bei dem `__repr__` von `ColumnDefault` fehlschlug, wenn das Argument ein Tupel war. Pull-Request von Nicolas Caniart.
Referenzen: #4126
[sql] [bug] ¶
Behobener Fehler, bei dem die kürzlich hinzugefügten Methoden `ColumnOperators.any_()` und `ColumnOperators.all_()` nicht funktionierten, wenn sie als Methoden aufgerufen wurden, im Gegensatz zur Verwendung der eigenständigen Funktionen `any_()` und `all_()`. Zusätzlich wurden Dokumentationsbeispiele für diese relativ unintuitiven SQL-Operatoren hinzugefügt.
Referenzen: #4093
postgresql¶
[postgresql] [bug] ¶
Weitere Korrekturen an der `ARRAY`-Klasse in Verbindung mit COLLATE, da die in #4006 vorgenommene Korrektur keine mehrdimensionale Array berücksichtigte.
Referenzen: #4006
[postgresql] [bug] ¶
Behobener Fehler in der Funktion `array_agg`, bei dem das Übergeben eines Arguments, das bereits vom Typ `ARRAY` war, wie z. B. ein PostgreSQL `array`-Konstrukt, zu einem `ValueError` führte, da die Funktion versuchte, die Arrays zu verschachteln.
Referenzen: #4107
[postgresql] [bug] ¶
Behobener Fehler in PostgreSQLs `Insert.on_conflict_do_update()`, der verhinderte, dass die Insert-Anweisung als CTE verwendet werden konnte, z. B. über `Insert.cte()`, innerhalb einer anderen Anweisung.
Referenzen: #4074
mysql¶
[mysql] [bug] ¶
Warnung ausgegeben, wenn MariaDB 10.2.8 oder früher in der Serie 10.2 erkannt wird, da es größere Probleme mit CHECK-Constraints in diesen Versionen gibt, die ab 10.2.9 behoben wurden.
Hinweis: Diese Changelog-Meldung wurde NICHT mit SQLAlchemy 1.2.0b3 veröffentlicht und nachträglich hinzugefügt.
Referenzen: #4097
[mysql] [bug] ¶
MySQL 5.7.20 warnt nun bei der Verwendung der Variablen `@tx_isolation`; es wird nun eine Versionsprüfung durchgeführt und stattdessen `@transaction_isolation` verwendet, um diese Warnung zu vermeiden.
Referenzen: #4120
[mysql] [bug] ¶
Behobenes Problem, bei dem CURRENT_TIMESTAMP in der MariaDB 10.2-Serie aufgrund einer Syntaxänderung nicht korrekt widergespiegelt wurde, wobei die Funktion nun als `current_timestamp()` dargestellt wird.
Referenzen: #4096
[mysql] [bug] ¶
MariaDB 10.2 unterstützt nun CHECK-Constraints (Warnung: Verwenden Sie Version 10.2.9 oder höher aufgrund von Upstream-Problemen, die in #4097 aufgeführt sind). Die Reflexion berücksichtigt nun diese CHECK-Constraints, wenn sie in der Ausgabe von `SHOW CREATE TABLE` vorhanden sind.
Referenzen: #4098
sqlite¶
mssql¶
1.1.14¶
Veröffentlicht: 5. September 2017orm¶
[orm] [bug] ¶
Behobener Fehler in `Session.merge()`, ähnlich dem in #4030, bei dem eine interne Prüfung auf ein Zielobjekt in der Identitätskarte zu einem Fehler führen konnte, wenn es unmittelbar vor dem tatsächlichen Abrufen des Objekts durch die Merge-Routine garbage collected wurde.
Referenzen: #4069
[orm] [bug] ¶
Behobener Fehler, bei dem eine Option `undefer_group()` nicht erkannt wurde, wenn sie von einer Beziehung abgeleitet wurde, die mithilfe von Joined Eager Loading geladen wurde. Zusätzlich, da der Fehler zu übermäßiger Arbeit führte, wurden die Python-Funktionsaufrufzahlen bei der anfänglichen Berechnung der Ergebnisspalten um 20 % verbessert, was die Verbesserungen beim Joined Eager Loading von #3915 ergänzt.
Referenzen: #4048
[orm] [bug] ¶
Behobene Race Condition in der ORM-Identitätskarte, die dazu führte, dass Objekte während eines Ladevorgangs unangemessen entfernt wurden, was zu doppelten Objektidentitäten führte, insbesondere unter Joined Eager Loading, das die Deduplizierung von Objekten beinhaltet. Das Problem ist spezifisch für die Garbage Collection von Weak References und tritt nur unter dem PyPy-Interpreter auf.
Referenzen: #4068
[orm] [bug] ¶
Behobener Fehler in `Session.merge()`, bei dem Objekte in einer Sammlung, deren Primärschlüsselattribut für einen typischerweise automatisch inkrementierenden Schlüssel auf `None` gesetzt war, als datenbankpersistenter Schlüssel für einen Teil des internen Deduplizierungsprozesses betrachtet wurden, was dazu führte, dass nur ein Objekt tatsächlich in die Datenbank eingefügt wurde.
Referenzen: #4056
[orm] [bug] ¶
Es wird ein `InvalidRequestError` ausgelöst, wenn ein `synonym()` auf ein Attribut angewendet wird, das keine `MapperProperty` ist, wie z. B. ein Association Proxy. Zuvor trat ein Rekursionsüberlauf auf, der versuchte, nicht vorhandene Attribute zu lokalisieren.
Referenzen: #4067
sql¶
[sql] [bug] ¶
Der Bereichsspezifikation für Fensterfunktionen wurde geändert, um zwei gleiche PRECEDING- oder FOLLOWING-Schlüsselwörter in einem Bereich zu ermöglichen, indem die linke Seite des Bereichs positiv und die rechte negativ sein kann, z. B. (1, 3) bedeutet "1 FOLLOWING UND 3 FOLLOWING".
Referenzen: #4053
1.1.13¶
Veröffentlicht: 3. August 2017oracle¶
[oracle] [bug] [performance] [py2k] ¶
Behebung eines Performance-Rückschritts, verursacht durch die Korrektur von #3937, bei dem cx_Oracle ab Version 5.3 das Symbol
.UNICODEaus seinem Namensraum entfernt hat. Dies wurde als bedingungsloses Einschalten des „WITH_UNICODE“-Modus von cx_Oracle interpretiert, was Funktionen auf der SQLAlchemy-Seite aufrief, die alle Strings bedingungslos in Unicode konvertieren und dadurch die Leistung beeinträchtigten. Tatsächlich wurde laut dem Autor von cx_Oracle der „WITH_UNICODE“-Modus bereits in Version 5.1 vollständig entfernt, sodass die aufwändigen Unicode-Konvertierungsfunktionen nicht mehr erforderlich sind und deaktiviert werden, wenn cx_Oracle 5.1 oder höher unter Python 2 erkannt wird. Die Warnung vor dem „WITH_UNICODE“-Modus, die unter #3937 entfernt wurde, wird ebenfalls wiederhergestellt.Diese Änderung wurde auch **zurückportiert** zu: 1.0.19
Referenzen: #4035
1.1.12¶
Veröffentlicht: 24. Juli 2017orm¶
[orm] [bug] ¶
Behobene Regression von 1.1.11, bei der das Hinzufügen zusätzlicher Nicht-Entitätsspalten zu einer Abfrage, die eine Entität mit Subqueryload-Beziehungen enthielt, fehlschlug, aufgrund einer Inspektion, die in 1.1.11 als Ergebnis von #4011 hinzugefügt wurde.
Referenzen: #4033
[orm] [bug] ¶
Behobener Fehler im Zusammenhang mit der JSON NULL-Auswertungslogik, die in 1.1 als Teil von #3514 hinzugefügt wurde, wobei die Logik keine ORM-gemappten Attribute berücksichtigte, die anders benannt waren als die zugeordnete `Column`.
Referenzen: #4031
[orm] [bug] ¶
Hinzugefügt wurden `KeyError`-Prüfungen zu allen Methoden innerhalb von `WeakInstanceDict`, bei denen auf eine Prüfung von `key in dict` ein indizierter Zugriff auf diesen Schlüssel folgt, um eine Race Condition gegen die Garbage Collection zu verhindern, die unter Last den Schlüssel aus dem Dictionary entfernen kann, nachdem der Code davon ausgeht, dass er vorhanden ist, was zu sehr seltenen `KeyError`-Auslösungen führt.
Referenzen: #4030
oracle¶
[oracle] [feature] [postgresql] ¶
Neue Schlüsselwörter `Sequence.cache` und `Sequence.order` zu `Sequence` hinzugefügt, um das Rendern des von Oracle und PostgreSQL verstandenen CACHE-Parameters und des von Oracle verstandenen ORDER-Parameters zu ermöglichen. Pull-Request von David Moore.
tests¶
1.1.11¶
Veröffentlicht: Montag, 19. Juni 2017orm¶
[orm] [bug] ¶
Behobenes Problem mit der Subquery Eager Loading, das sich aus den in #2699, #3106, #3893 behobenen Problemen ergibt. Es ging darum, dass die "Subquery" die korrekte FROM-Klausel enthält, wenn sie von einer Joined-Inheritance-Unterklasse ausgeht und dann Subquery Eager Loading auf eine Beziehung von der Basisklasse anwendet, während die Abfrage auch Kriterien gegen die Unterklasse enthält. Die Korrektur in den vorherigen Tickets berücksichtigte keine zusätzlichen Subqueryload-Operationen, die tiefer als die erste Ebene laden, daher wurde die Korrektur weiter verallgemeinert.
Referenzen: #4011
sql¶
postgresql¶
[postgresql] [bug] ¶
Fortsetzung der Korrektur, die die PostgreSQL-Versionszeichenfolge "10devel" korrekt behandelt, die in 1.1.8 veröffentlicht wurde. Eine zusätzliche Anpassung der regulären Ausdrücke wurde vorgenommen, um Versionszeichenfolgen der Form "10beta1" zu behandeln. Obwohl PostgreSQL nun bessere Möglichkeiten bietet, diese Informationen zu erhalten, bleiben wir bei den regulären Ausdrücken zumindest bis 1.1.x, um das Risiko für Kompatibilitätsprobleme mit älteren oder alternativen PostgreSQL-Datenbanken zu minimieren.
Referenzen: #4005
[postgresql] [bug] ¶
Behobener Fehler, bei dem die Verwendung von `ARRAY` mit einem String-Typ, der eine Kollation aufweist, beim Erstellen von `CREATE TABLE` nicht die korrekte Syntax erzeugte.
Referenzen: #4006
mysql¶
[mysql] [bug] ¶
MySQL 5.7 hat eine Zugriffsbeschränkung für den Befehl "SHOW VARIABLES" eingeführt. Der MySQL-Dialekt behandelt nun den Fall, dass SHOW keine Zeile zurückgibt, insbesondere beim ersten Abrufen von SQL_MODE, und gibt eine Warnung aus, dass die Benutzerberechtigungen geändert werden sollten, um die Anwesenheit der Zeile zu ermöglichen.
Referenzen: #4007
mssql¶
[mssql] [bug] ¶
Behobener Fehler, bei dem die Transaktionsisolation von SQL Server bei Verwendung von Azure Data Warehouse aus einer anderen Ansicht abgerufen werden muss. Die Abfrage wird nun gegen beide Ansichten versucht und dann wird bedingungslos ein `NotImplemented` ausgelöst, wenn weiterhin Fehler auftreten, um die beste Ausfallsicherheit gegen zukünftige willkürliche API-Änderungen in neuen SQL Server-Versionen zu gewährleisten.
Referenzen: #3994
[mssql] [bug] ¶
Ein Platzhaltertyp `XML` wurde dem SQL Server-Dialekt hinzugefügt, sodass eine reflektierte Tabelle, die diesen Typ enthält, als `CREATE TABLE` neu gerendert werden kann. Der Typ hat kein spezielles Round-Trip-Verhalten und unterstützt derzeit auch keine zusätzlichen qualifizierenden Argumente.
Referenzen: #3973
oracle¶
[oracle] [bug] ¶
Die Unterstützung für Zweiphasentransaktionen wurde für cx_Oracle vollständig entfernt, wenn Version 6.0b1 oder neuer der DBAPI verwendet wird. Die Zweiphasenfunktion war in jedem Fall noch nie unter cx_Oracle 5.x nutzbar, und cx_Oracle 6.x hat das Flag „twophase“ auf Connection-Ebene entfernt, auf dem diese Funktion beruhte.
Referenzen: #3997
1.1.10¶
Veröffentlicht: Freitag, 19. Mai 2017orm¶
[orm] [bug] ¶
Behob einen Fehler, bei dem eine Kaskade wie „delete-orphan“ (aber auch andere) ein Objekt, das mit einer Beziehung verknüpft war, die selbst lokal zu einer Unterklasse in einer Vererbungsbeziehung war, nicht finden konnte, wodurch die Operation nicht ausgeführt wurde.
Referenzen: #3986
schema¶
[schema] [bug] ¶
Eine
ArgumentErrorwird nun ausgelöst, wenn einForeignKeyConstraint-Objekt mit einer inkonsistenten Anzahl von „lokalen“ und „entfernten“ Spalten erstellt wird, was andernfalls den internen Zustand der Einschränkung inkorrekt machen würde. Beachten Sie, dass dies auch die Bedingung beeinflusst, bei der der Reflektionsprozess eines Dialekts einen inkonsistenten Satz von Spalten für eine Fremdschlüsselbeschränkung erzeugt.Referenzen: #3949
postgresql¶
[postgresql] [bug] ¶
Unterstützung für Autocommit für die Schlüsselwörter GRANT, REVOKE hinzugefügt. Pull Request von Jacob Hayes.
mysql¶
[mysql] [bug] ¶
Ein alter und unnötiger Abfang der MySQL-Funktion UTC_TIMESTAMP wurde entfernt, die die Verwendung mit einem Parameter verhinderte.
Referenzen: #3966
[mysql] [bug] ¶
Behob einen Fehler im MySQL-Dialekt bezüglich der Darstellung von Tabellenoptionen in Verbindung mit PARTITION-Optionen beim Rendern von CREATE TABLE. Die PARTITION-bezogenen Optionen müssen den Tabellenoptionen folgen, während diese Reihenfolge zuvor nicht erzwungen wurde.
Referenzen: #3961
oracle¶
misc¶
[bug] [ext] ¶
Schutz vor dem Testen von „None“ als Klasse für den Fall, dass deklarative Klassen garbage collected werden und neue automap prepare()-Operationen gleichzeitig stattfinden, wobei sehr selten ein weakref getroffen wird, auf das noch nicht vollständig reagiert wurde, nachdem gc abgeschlossen wurde.
Referenzen: #3980
1.1.9¶
Veröffentlicht: 4. April 2017sql¶
[sql] [bug] ¶
Behob eine Regression, die in 1.1.5 aufgrund von #3859 veröffentlicht wurde, bei der Anpassungen der Auswertung der „rechten Seite“ eines Ausdrucks basierend auf
Variantzur Berücksichtigung der Regeln der rechten Seite des zugrunde liegenden Typs dazu führten, dass derVariant-Typ unangemessen verloren ging, in den Fällen, in denen wir möchten, dass der Typ der linken Seite direkt an die rechte Seite übertragen wird, damit Bind-Level-Regeln auf das Argument des Ausdrucks angewendet werden können.Referenzen: #3952
[sql] [bug] [postgresql] ¶
Die Mechanik von
ResultProxywurde geändert, um den „autoclose“-Schritt bedingungslos zu verzögern, bis dieConnectiondas Objekt nicht mehr verwendet; in dem Fall, in dem PostgreSQL ON CONFLICT mit RETURNING keine Zeilen zurückgibt, erfolgte autoclose in diesem zuvor nicht vorhandenen Anwendungsfall, was dazu führte, dass das übliche Autocommit-Verhalten, das bedingungslos bei INSERT/UPDATE/DELETE auftritt, fehlschlug.Referenzen: #3955
misc¶
[bug] [ext] ¶
Behob eine Regression, die in 1.1.8 aufgrund von #3950 veröffentlicht wurde, bei der die tiefere Suche nach Informationen über Spaltentypen im Falle eines „Schema-Typs“ oder eines
TypeDecoratoreinen Attributfehler verursachte, wenn die Zuordnung auch einecolumn_propertyenthielt.Referenzen: #3956
1.1.8¶
Veröffentlicht: 31. März 2017postgresql¶
[postgresql] [bug] ¶
Unterstützung für das Parsen der PostgreSQL-Versionszeichenfolge für eine Entwicklungsversion wie „PostgreSQL 10devel“ hinzugefügt. Pull Request von Sean McCully.
misc¶
[bug] [ext] ¶
Behob einen Fehler in
sqlalchemy.ext.mutable, bei dem die MethodeMutable.as_mutable()einen Typ nicht verfolgte, der mitTypeEngine.copy()kopiert worden war. Dies wurde in 1.1 im Vergleich zu 1.0 zu einer Regression, da die KlasseTypeDecoratornun eine Unterklasse vonSchemaEventTargetist, was unter anderem der übergeordnetenColumnanzeigt, dass der Typ beim Kopiervorgang derColumnkopiert werden soll. Diese Kopien sind üblich, wenn man deklarativ mit Mixins oder abstrakten Klassen arbeitet.Referenzen: #3950
[bug] [ext] ¶
Unterstützung für gebundene Parameter, z. B. solche, die normalerweise über
Query.params()eingerichtet werden, für die MethodeResult.count()hinzugefügt. Zuvor wurde die Unterstützung für Parameter weggelassen. Pull Request von Pat Deegan.
1.1.7¶
Veröffentlicht: 27. März 2017orm¶
[orm] [feature] ¶
Ein
aliased()-Konstrukt kann nun an die MethodeQuery.select_entity_from()übergeben werden. Entitäten werden aus dem von demaliased()-Konstrukt repräsentierten wählbaren Element gezogen. Dies ermöglicht die Verwendung spezieller Optionen füraliased()wie z. B.aliased.adapt_on_namesin Verbindung mitQuery.select_entity_from().Referenzen: #3933
[orm] [bug] ¶
Behob ein Wettlaufbedingung, die unter Thread-Umgebungen als Ergebnis des durch #3915 hinzugefügten Caching auftreten konnte. Eine interne Sammlung von
Column-Objekten konnte auf einem Alias-Objekt unangemessen neu generiert werden, was einen Joined-Eager-Loader verwirrte, wenn er versuchte, SQL zu rendern und Ergebnisse zu sammeln, und zu einem Attributfehler führte. Die Sammlung wird nun im Voraus generiert, bevor das Alias-Objekt zwischen Threads gecached und geteilt wird.Referenzen: #3947
engine¶
[engine] [bug] ¶
Ein Ausnahmebehandlungsmechanismus wurde hinzugefügt, der für die „Ursachen“-Ausnahme unter Py2K warnt, wenn das „autorollback“-Feature von
Connectionselbst eine Ausnahme auslöst. Unter Py3K werden die beiden Ausnahmen vom Interpreter natürlich als eine gemeldet, die bei der Behandlung der anderen auftritt. Dies setzt die Reihe von Änderungen zur Behandlung von Rollback-Fehlern fort, die zuletzt im Rahmen von #2696 in 1.0.12 besucht wurden.Referenzen: #3946
sql¶
[sql] [bug] [postgresql] ¶
Unterstützung für die Objekte
VariantundSchemaTypehinzugefügt, um sie miteinander kompatibel zu machen. Das heißt, ein Variant kann gegen einen Typ wieEnumerstellt werden, und die Anweisungen zum Erstellen von Constraints und/oder Dialekt-spezifischen Typ-Objekten werden korrekt wie gemäß der Dialektzuordnung des Variants weitergegeben.Referenzen: #2892
[sql] [bug] ¶
Behob einen Fehler im Compiler, bei dem die String-Kennung eines Savepoints im Wörterbuch für die Bezeichner-Quoting zwischengespeichert wurde; da diese Kennungen beliebig sind, konnte ein kleiner Speicherleck auftreten, wenn eine einzelne
Connectioneine unbegrenzte Anzahl von Savepoints verwendete, sowie wenn die Savepoint-Klausel-Konstrukte direkt mit einer unbegrenzten Anzahl von Savepoint-Namen verwendet wurden. Das Speicherleck beeinträchtigt **nicht** die überwiegende Mehrheit der Fälle, da normalerweise dieConnection, die Savepoint-Namen mit einem einfachen Zähler ab „1“ rendert, pro Transaktion oder pro fester Anzahl von Transaktionen verwendet wird, bevor sie verworfen wird.Referenzen: #3931
[sql] [bug] ¶
Behob einen Fehler in der neuen Funktion „schema translate“, bei der der übersetzte Schemaname im Zusammenhang mit einem Spaltenausdruck als Alias-Name aufgerufen wurde; dies trat nur auf, wenn der Quellübersetzungsname „None“ war. Die Funktion „schema translate“ wirkt nun nur noch für Unterklassen von
SchemaItemundSchemaType, d. h. für Objekte, die einer DDL-erstellbaren Struktur in einer Datenbank entsprechen.Referenzen: #3924
oracle¶
[oracle] [bug] ¶
Eine Korrektur für den WITH_UNICODE-Modus von cx_Oracle, die dadurch aufgedeckt wurde, dass cx_Oracle 5.3 dieses Flag anscheinend im Build fest codiert; eine interne Methode, die diesen Modus verwendet, benutzte nicht die korrekte Signatur.
Diese Änderung wurde auch **zurückportiert** zu: 1.0.18
Referenzen: #3937
1.1.6¶
Veröffentlicht: 28. Februar 2017orm¶
[orm] [bug] ¶
Einige lange unbeachtete Performance-Bedenken innerhalb des Joined Eager Loader Query-Konstruktionssystems wurden behoben, die sich seit früheren Versionen aufgrund erhöhter Abstraktion angesammelt hatten. Die Verwendung von Ad-hoc
AliasedClass-Objekten pro Abfrage, was jedes Mal viel Spalten-Lookup-Overhead erzeugt, wurde durch einen gecachten Ansatz ersetzt, der einen kleinen Pool vonAliasedClass-Objekten verwendet, die zwischen Aufrufen von Joined Eager Loading wiederverwendet werden. Einige Mechanismen im Zusammenhang mit der Eager Join Path Konstruktion wurden ebenfalls optimiert. Die Aufrufanzahl für eine End-to-End-Abfragekonstruktion + Abruf einer einzelnen Zeile mit einem Worst-Case-Joined-Loader-Szenario wurde um etwa 60% gegenüber 1.1.5 und 42% gegenüber 0.8.6 reduziert.Referenzen: #3915
[orm] [bug] ¶
Behob eine erhebliche Ineffizienz im „eager_defaults“-Feature, bei der eine unnötige SELECT-Anweisung für Spaltenwerte ausgegeben wurde, wo die ORM explizit NULL eingefügt hatte, entsprechend Attributen, die auf dem Objekt nicht gesetzt waren, aber keine Server-Standardwerte hatten, sowie abgelaufenen Attributen bei Updates, die dennoch keine Server-Onupdate-Werte hatten. Da diese Spalten nicht Teil der RETURNING-Klausel sind, die eager_defaults zu verwenden versucht, sollten sie auch nicht post-SELECTed werden.
Referenzen: #3909
[orm] [bug] ¶
Behob zwei eng verwandte Fehler im Zusammenhang mit dem Mapper-Flag eager_defaults in Verbindung mit Single-Table-Inheritance; einer, bei dem die eager defaults-Logik versehentlich versuchte, auf eine Spalte zuzugreifen, die Teil der „exclude_properties“-Liste des Mappers ist (verwendet von Declarative mit Single-Table-Inheritance) während des eager defaults-Fetchens, und der andere, bei dem das vollständige Laden der Zeile zum Abrufen der Defaults den falschen erbenden Mapper nicht verwendete.
Referenzen: #3908
[orm] [bug] ¶
Behob einen Fehler, der erstmals in 0.9.7 als Ergebnis von #3106 eingeführt wurde und zu einer inkorrekten Abfrage bei einigen Formen von Multi-Level-Subqueryload gegen aliasierte Entitäten führte, mit einer unnötigen zusätzlichen FROM-Entität in der innersten Subquery.
Referenzen: #3893
orm declarative¶
[orm] [declarative] [bug] ¶
Behob einen Fehler, bei dem die „automatische Ausschluss“-Funktion von Declarative, die sicherstellt, dass eine Spalte, die lokal zu einer Single-Table-Inheritance-Unterklasse gehört, nicht als Attribut für andere Ableitungen der Basis erscheint, bei mehreren Ebenen der Vererbung von der Basis nicht wirksam wurde.
Referenzen: #3895
sql¶
[sql] [bug] ¶
Behob einen Fehler, bei dem das Ereignis
DDLEvents.column_reflect()keinen nicht-textuellen Ausdruck als Wert für den „default“ der neuen Spalte zuließ, wie z. B. einFetchedValue-Objekt, um einen generischen ausgelösten Standardwert anzuzeigen, oder einetext()-Konstruktion. Die Dokumentation wurde in dieser Hinsicht ebenfalls verdeutlicht.Referenzen: #3905
postgresql¶
[postgresql] [bug] ¶
Reguläre Ausdrücke für die PostgreSQL-Anweisungen „IMPORT FOREIGN SCHEMA“ und „REFRESH MATERIALIZED VIEW“ hinzugefügt, damit diese bei Aufruf über eine Verbindung oder eine Engine ohne explizite Transaktion automatisch committet werden. Pull Requests von Frazer McLean und Paweł Stiasny.
Referenzen: #3804
[postgresql] [bug] ¶
Behob einen Fehler in der PostgreSQL
ExcludeConstraint, bei der die Parameter „whereclause“ und „using“ bei einer Operation wieTable.tometadata()nicht kopiert wurden.Referenzen: #3900
mysql¶
[mysql] [bug] ¶
Neue reservierte Wörter von MySQL 8.0 wurden dem MySQL-Dialekt für die korrekte Quoting hinzugefügt. Pull Request von Hanno Schlichting.
mssql¶
misc¶
[feature] [ext] ¶
Die Methoden
Result.scalar()undResult.count()wurden dem „baked“-Query-System hinzugefügt.Referenzen: #3896
[bug] [ext] ¶
Behob einen Fehler in der neuen Erweiterung
sqlalchemy.ext.indexable, bei der das Setzen einer Eigenschaft, die selbst auf eine andere Eigenschaft verweist, fehlschlug.Referenzen: #3901
1.1.5¶
Veröffentlicht: 17. Januar 2017orm¶
[orm] [bug] ¶
Behob einen Fehler bei Joined Eager Loading gegen mehrere Entitäten, wenn auch polymorphe Vererbung verwendet wurde, was zu einem Fehler “‘NoneType’ object has no attribute ‘isa’” führte. Das Problem wurde durch die Korrektur für #3611 eingeführt.
Diese Änderung wird auch **zurückportiert** zu: 1.0.17
Referenzen: #3884
[orm] [bug] ¶
Behob einen Fehler beim Subquery-Laden, bei dem ein Objekt, das als „bestehende“ Zeile angetroffen wurde, z. B. bereits aus einem anderen Pfad in derselben Abfrage geladen, keine Subquery-Loader für unbeladene Attribute aufrief, die dieses Laden angaben. Dieses Problem liegt im selben Bereich wie das von #3431, #3811, welche ähnliche Probleme mit dem Joined Loading betrafen.
Referenzen: #3854
[orm] [bug] ¶
Der Kontextmanager
Session.no_autoflushstellt nun sicher, dass das Autoflush-Flag innerhalb eines „finally“-Blocks zurückgesetzt wird, sodass bei einer Ausnahme innerhalb des Blocks der Zustand immer noch ordnungsgemäß zurückgesetzt wird. Pull Request von Emin Arakelian.[orm] [bug] ¶
Behob einen Fehler, bei dem die Abfragekriterien für Single-Table-Inheritance nicht in die Abfrage eingefügt wurden, wenn die
Bundle-Konstruktion als Auswahlkriterium verwendet wurde.Referenzen: #3874
[orm] [bug] ¶
Behob einen Fehler im Zusammenhang mit #3177, bei dem eine UNION oder eine andere Mengenoperation, die von einer
Queryemittiert wurde, „single-inheritance“-Kriterien außerhalb der Union anwendete (und auf das falsche wählbare Element verwies), obwohl diese Kriterien nun in den inneren Subqueries vorhanden sein sollten. Die Single-Inheritance-Kriterien werden nun weggelassen, sobald union() oder eine andere Mengenoperation gegenQueryaufgerufen wird, genauso wie beiQuery.from_self().Referenzen: #3856
examples¶
[examples] [bug] ¶
Behob zwei Probleme mit dem Beispiel versioned_history, erstens bekommt die History-Tabelle jetzt autoincrement=False, um die neuen Fehler von 1.1 bezüglich zusammengesetzter Primärschlüssel mit autoincrement zu vermeiden; zweitens wird nun das sqlite_autoincrement-Flag verwendet, um sicherzustellen, dass unter SQLite eindeutige Bezeichner für die Lebensdauer einer Tabelle verwendet werden, auch wenn einige Zeilen gelöscht werden. Pull Request von Carlos García Montoro.
Referenzen: #3872
engine¶
[engine] [bug] ¶
Die Option „extend_existing“ der
Table-Reflektion führte zu einer Verdopplung von Indizes und Constraints, wenn der Parameter mitMetaData.reflect()verwendet wurde (wie die Automap-Erweiterung es tut), da Tabellen sowohl innerhalb des Fremdschlüsselpfades als auch direkt reflektiert wurden. Ein neuer de-duplizierender Satz wird nun innerhalb derMetaData.reflect()-Sequenz durchlaufen, um eine doppelte Reflexion auf diese Weise zu verhindern.Referenzen: #3861
sql¶
[sql] [bug] ¶
Behob einen Fehler, der ursprünglich in 0.9 über #1068 eingeführt wurde, bei dem order_by(<eine Label()>) nach dem Labelnamen nur nach Namen sortierte, d. h. auch dann, wenn der gelabelte Ausdruck überhaupt nicht derselbe Ausdruck war, der ansonsten implizit oder explizit im wählbaren Element vorhanden war. Die Logik, die nach Label sortiert, stellt nun sicher, dass der gelabelte Ausdruck mit demjenigen verwandt ist, der sich auf diesen Namen bezieht, bevor nach dem Labelnamen sortiert wird; zusätzlich muss der Name ein tatsächliches Label auflösen, das irgendwo explizit im Ausdruck vorhanden ist, nicht nur einen Spaltennamen. Diese Logik wird sorgfältig von der Funktion order by(textual name) getrennt gehalten, die einen leicht anderen Zweck hat.
Referenzen: #3882
[sql] [bug] ¶
Behob eine 1.1-Regression, bei der
import *für sqlalchemy.sql.expression nicht funktionierte, aufgrund von falsch geschriebenen Funktionenany_undall_.Referenzen: #3878
[sql] [bug] ¶
Die in der Ausnahme für „could not reflect“ in
MetaData.reflect()eingebettete Engine-URL verbirgt nun das Passwort; auch das__repr__fürTLEngineverhält sich nun wie das vonEngine, wobei das Passwort der URL verborgen wird. Pull Request von Valery Yundin.[sql] [bug] ¶
Behobenes Problem mit
Variant, bei dem die „right hand coercion“-Logik, die vonTypeDecoratorgeerbt wurde, die rechte Seite inVariantselbst zwang, anstatt dessen, was der Standardtyp fürVarianttun würde. Im Fall vonVariantmöchten wir, dass der Typ sich größtenteils wie der Basistyp verhält, sodass die Standardlogik vonTypeDecoratornun überschrieben wird, um auf die Logik des zugrunde liegenden umschlossenen Typs zurückzufallen. Ist derzeit hauptsächlich für JSON relevant.Referenzen: #3859
[sql] [bg] ¶
Behobener Fehler, bei dem das Flag literal_binds compiler vom Insert-Konstrukt für das Feature „mehrere Werte“ nicht beachtet wurde; die nachfolgenden Werte werden nun als Literale gerendert.
Referenzen: #3880
postgresql¶
[postgresql] [bug] ¶
Behobener Fehler im neuen Feature „ON CONFLICT DO UPDATE“, bei dem die „set“-Werte für die UPDATE-Klausel nicht der typbasierten Verarbeitung unterlagen, wie sie normalerweise für die Verarbeitung von benutzerdefinierten Typumwandlungen sowie von Dialekt erforderlichen Umwandlungen, wie z. B. für JSON-Datentypen, stattfindet. Außerdem wurde klargestellt, dass die Schlüssel im
set_-Dictionary mit dem „Schlüssel“ der Spalte übereinstimmen sollten, falls dieser vom Spaltennamen abweicht. Für verbleibende Spaltennamen, die nicht mit Spaltenschlüsseln übereinstimmen, wird eine Warnung ausgegeben; aus Kompatibilitätsgründen werden diese wie zuvor ausgegeben.Referenzen: #3888
[postgresql] [bug] ¶
Die Datentypen
TIMEundTIMESTAMPunterstützen nun eine Einstellung von Null für die „Präzision“; zuvor wurde eine Null ignoriert. Pull-Request von Ionuț Ciocîrlan.
mysql¶
[mysql] [feature] ¶
Es wurde ein neuer Parameter
mysql_prefixzumIndex-Konstrukt hinzugefügt, der die Angabe von MySQL-spezifischen Präfixen wie „FULLTEXT“ ermöglicht. Pull-Request von Joseph Schorr.[mysql] [bug] ¶
Der MySQL-Dialekt gibt nun keine Warnung mehr aus, wenn eine reflektierte Spalte ein „COMMENT“-Schlüsselwort enthält, beachten Sie jedoch, dass der Kommentar noch nicht reflektiert wird; dies ist für eine zukünftige Veröffentlichung geplant. Pull-Request von Lele Long.
Referenzen: #3867
mssql¶
[mssql] [bug] ¶
Behobener Fehler, bei dem SQL Server-Dialekte versuchten, die letzte Zeilenidentität für ein INSERT FROM SELECT auszuwählen, und im Fall, dass das SELECT keine Zeilen enthielt, fehlschlugen. Für eine solche Anweisung wird das Inline-Flag auf True gesetzt, was bedeutet, dass kein letzter Primärschlüssel abgerufen werden sollte.
Referenzen: #3876
oracle¶
[oracle] [bug] [postgresql] ¶
Behobener Fehler, bei dem ein INSERT FROM SELECT, bei dem die Quelltabelle eine autoincrementierende Sequenz enthält, nicht korrekt kompiliert wurde.
Referenzen: #3877
[oracle] [bug] ¶
Behobener Fehler, bei dem das Schlüsselwort „COMPRESSION“ in der ALL_TABLES-Abfrage unter Oracle 9.2 verwendet wurde; obwohl die Oracle-Dokumentation besagt, dass die Tabellenkompression in 9i eingeführt wurde, ist die eigentliche Spalte erst ab 10.1 vorhanden.
Referenzen: #3875
misc¶
[bug] [py3k] ¶
Behobene Python 3.6 DeprecationWarnings im Zusammenhang mit escaped Strings ohne den ‚r‘-Modifikator und zusätzliche Testabdeckung für Python 3.6.
Diese Änderung wird auch **zurückportiert** zu: 1.0.17
Referenzen: #3886
[bug] [firebird] ¶
Die Korrektur für Oracle-Anführungszeichen mit Kleinbuchstaben-Namen wurde auf Firebird portiert, sodass ein Tabellenname, der in Kleinbuchstaben in Anführungszeichen gesetzt ist, korrekt reflektiert werden kann, auch wenn der Tabellenname aus der Inspektionsfunktion get_table_names() stammt.
Referenzen: #3548
1.1.4¶
Veröffentlicht: 15. November 2016orm¶
[orm] [bug] ¶
Behobener Fehler in
Session.bulk_update_mappings(), bei dem ein alternativer Primärschlüsselattribut nicht korrekt in die UPDATE-Anweisung verfolgt wurde.Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3849
[orm] [bug] ¶
Behobener Fehler in
Session.bulk_save(), bei dem ein UPDATE in Verbindung mit einer Zuordnung, die einen Versions-ID-Zähler implementiert, nicht korrekt funktionierte.Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3781
[orm] [bug] ¶
Behobener Fehler, bei dem
Mapper.attrs,Mapper.all_orm_descriptorsund andere abgeleitete Attribute beim Hinzufügen von Mapper-Eigenschaften oder anderen ORM-Konstrukten zum Mapper/zur Klasse nach dem ersten Aufruf dieser Zugriffsfunktionen nicht aktualisiert wurden.Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3778
[orm] [bug] ¶
Behobene Regression in Sammlungen aufgrund von #3457, bei der die Deserialisierung während des Pickelns oder Deepcopy alle Attribute einer ORM-Sammlung nicht korrekt einrichten konnte, was zu weiteren Mutationsoperationen führte.
Referenzen: #3852
[orm] [bug] ¶
Behobener langjähriger Fehler, bei dem die „noload“-Beziehungs-Lade-Strategie Backrefs und/oder back_populates-Optionen ignorierte.
Referenzen: #3845
engine¶
[engine] [bug] ¶
Die seit langem defekte Methode „default_schema_name()“ aus
Connectionwurde entfernt. Diese Methode stammte aus einer sehr alten Version und war nicht funktionsfähig (z. B. löste sie Fehler aus). Pull-Request von Benjamin Dopplinger.
sql¶
postgresql¶
[postgresql] [bug] ¶
Behobene Regression, die durch die Korrektur in #3807 (Version 1.1.0) verursacht wurde, bei der wir sicherstellten, dass der Tabellenname in der WHERE-Klausel des DO UPDATE-Teils von PostgreSQLs ON CONFLICT qualifiziert war, aber man kann den Tabellennamen nicht in die WHERE-Klausel des eigentlichen ON CONFLICT selbst einfügen. Dies war eine falsche Annahme, sodass dieser Teil der Änderung in #3807 zurückgerollt wird.
mysql¶
[mysql] [feature] ¶
Unterstützung für serverseitige Cursor wurde zu den mysqlclient- und pymysql-Dialekten hinzugefügt. Dieses Feature ist über das Flag
Connection.execution_options.stream_resultssowie das Dialektargumentserver_side_cursors=Trueverfügbar, genauso wie es für psycopg2 unter PostgreSQL war. Pull-Request von Roman Podoliaka.[mysql] [bug] ¶
Der native ENUM-Typ von MySQL unterstützt das Senden beliebiger ungültiger Werte und gibt als Antwort einen leeren String zurück. Eine hartkodierte Regel zur Prüfung auf „gibt den leeren String zurück“ wurde zur MySQL-Implementierung für ENUM hinzugefügt, sodass dieser leere String an die Anwendung zurückgegeben wird, anstatt als ungültiger Wert abgelehnt zu werden. Beachten Sie, dass Sie auch dann den leeren String zurückerhalten, wenn Ihre MySQL-Enum Werte mit Objekten verknüpft.
Referenzen: #3841
sqlite¶
[sqlite] [bug] ¶
Anführungszeichen wurden zu den PRAGMA-Direktiven im pysqlcipher-Dialekt hinzugefügt, um zusätzliche Cipher-Argumente korrekt zu unterstützen. Pull-Request von Kevin Jurczyk.
[sqlite] [bug] [py3k] ¶
Ein optionaler Import für pysqlcipher3 DBAPI wurde für die Verwendung des pysqlcipher-Dialekts hinzugefügt. Dieses Paket wird versucht zu importieren, wenn die nur für Python 2 verfügbare pysqlcipher DBAPI nicht vorhanden ist. Pull-Request von Kevin Jurczyk.
mssql¶
[mssql] [bug] ¶
Behobener Fehler im pyodbc-Dialekt (sowie im weitgehend nicht funktionierenden adodbapi-Dialekt), bei dem ein Semikolon im Passwort- oder Benutzernamenfeld als Trennzeichen für ein anderes Token interpretiert werden konnte; die Werte werden nun in Anführungszeichen gesetzt, wenn Semikolons vorhanden sind.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3762
1.1.3¶
Veröffentlicht: 27. Oktober 2016orm¶
[orm] [bug] ¶
Behobene Regression, die durch #2677 verursacht wurde, bei der das Aufrufen von
Session.delete()auf ein Objekt, das in dieser Sitzung bereits als gelöscht markiert war, dazu führte, dass das Objekt nicht in der Identitätsmap eingerichtet (oder abgelehnt) wurde, was zu Flush-Fehlern führte, da das Objekt in einem vom Unit of Work nicht unterstützten Zustand war. Das Verhalten vor 1.1 in diesem Fall wurde wiederhergestellt, d. h. das Objekt wird wieder in die Identitätsmap eingefügt, sodass die DELETE-Anweisung erneut versucht wird, was eine Warnung ausgibt, dass die Anzahl der erwarteten Zeilen nicht übereinstimmt (es sei denn, die Zeile wurde außerhalb der Sitzung wiederhergestellt).Referenzen: #3839
[orm] [bug] ¶
Behobene Regression, bei der einige
Query-Methoden wieQuery.update()und andere fehlschlugen, wenn dieQueryauf eine Reihe von zugeordneten Spalten und nicht auf die zugeordnete Entität als Ganzes abzielte.Referenzen: #3836
sql¶
[sql] [bug] ¶
Behobener Fehler im Zusammenhang mit dem neuen Feature zur Übersetzung und Validierung neuer Werte in
Enum, bei dem die Verwendung des Enum-Objekts in einer String-Verkettung denEnum-Typ als Typ des gesamten Ausdrucks beibehalten würde, was zu fehlenden Lookups führte. Eine String-Verkettung gegen eine Spalte vom TypEnumverwendet nunStringals Datentyp des Ausdrucks selbst.Referenzen: #3833
[sql] [bug] ¶
Behobene Regression, die als Nebenwirkung von #2919 auftrat, bei der im weniger typischen Fall eines benutzerdefinierten
TypeDecorator, der selbst eine Instanz vonSchemaTypewar (anstatt der Implementierung), die Spaltenanhang-Ereignisse für den Typ selbst übersprungen wurden.Referenzen: #3832
postgresql¶
[postgresql] [bug] ¶
Die PostgreSQL-Tabellenreflexion stellt sicher, dass das Flag
Column.autoincrementauf False gesetzt wird, wenn eine Primärschlüsselspalte reflektiert wird, die nicht vom DatentypIntegerist, auch wenn der Standardwert mit einer Integer-generierenden Sequenz zusammenhängt. Dies kann passieren, wenn eine Spalte als SERIAL erstellt und der Datentyp geändert wird. Das Autoincrement-Flag kann in der 1.1-Serie nur True sein, wenn der Datentyp eine Integer-Affinität hat.Referenzen: #3835
1.1.2¶
Veröffentlicht: 17. Oktober 2016orm¶
[orm] [bug] ¶
Behobener Fehler bezüglich der Regel zur Deaktivierung eines Joined Collection Eager Loaders auf der anderen Seite eines Many-to-One Lazy Loaders, erstmals eingeführt in #1495, bei der die Regel fehlschlug, wenn das Elternobjekt andere Lazyloader-gebundene Abfrageoptionen hatte.
Referenzen: #3824
[orm] [bug] ¶
Behobenes Problem mit der verzögerten Spaltenladung von sich selbst referenzierenden Entitäten, ähnlich wie bei #3431, #3811, bei der eine Entität aufgrund von sich selbst referenzierenden Eager Loadings an mehreren Stellen in der Zeile vorhanden ist; wenn der Deferred Loader nur für einen der Pfade gilt, überschreibt der „vorhandene“ Spaltenlader nun den Deferred Non-Load für diese Entität, unabhängig von der Zeilenreihenfolge.
Referenzen: #3822
sql¶
[sql] [bug] ¶
Behobene Regression, die durch eine neu hinzugefügte Funktion verursacht wurde, die die „Wrap Callable“-Funktion von
DefaultGenerator-Objekten von SQL übernimmt. Ein Attributfehler wurde für__module__ausgelöst, wenn der Standard-Callable einfunctools.partialoder ein anderes Objekt war, das kein__module__-Attribut hatte.Referenzen: #3823
[sql] [bug] [postgresql] ¶
Behobene Regression im
Enum-Typ, bei der Ereignishandler im Falle einer Kopie des Typobjekts nicht übertragen wurden, aufgrund einer widersprüchlichen copy()-Methode, die als Teil von #3250 hinzugefügt wurde. Diese Kopie erfolgt normalerweise in Situationen, in denen die Spalte kopiert wird, z. B. in tometadata() oder bei Verwendung von deklarativen Mixins mit Spalten. Der fehlende Ereignishandler hätte die Erstellung einer Einschränkung für einen nicht nativen aufgezählten Typ beeinträchtigt, aber kritischer den ENUM-Objekt im PostgreSQL-Backend.Referenzen: #3827
postgresql¶
[postgresql] [bug] [sql] ¶
Geänderte Benennungskonvention für die Generierung von gebundenen Parametern für eine Multi-VALUES-INSERT-Anweisung, sodass die nummerierten Parameternamen nicht mit den anonymisierten Parametern einer WHERE-Klausel kollidieren, wie es nun bei einer PostgreSQL ON CONFLICT-Konstruktion üblich ist.
Referenzen: #3828
1.1.1¶
Veröffentlicht: 7. Oktober 2016mssql¶
[mssql] [bug] ¶
Die in #3810 und #3814 hinzugefügte Abfrage „SELECT SERVERPROPERTY“ schlägt bei unbekannten Kombinationen von Pyodbc und SQL Server fehl. Obwohl ein Fehler dieser Funktion erwartet wurde, war die Ausnahmebehandlung nicht breit genug gefasst, sodass nun alle Formen von pyodbc.Error abgefangen werden.
Referenzen: #3820
misc¶
[bug] [core] ¶
Die CompileError, die ausgelöst wurde, wenn verschiedene fehlende Primärschlüsselsituationen erkannt wurden, wurde in eine Warnung geändert. Die Anweisung wird erneut an die Datenbank übergeben, wo sie fehlschlägt und der DBAPI-Fehler (normalerweise IntegrityError) wie üblich ausgelöst wird.
Referenzen: #3216
1.1.0¶
Veröffentlicht: 5. Oktober 2016orm¶
[orm] [feature] ¶
Die neue „raise“-Lazy-Loader-Strategie wurde um eine Variante „raise_on_sql“ erweitert, die sowohl über
relationship.lazyals auch überraiseload()verfügbar ist. Diese Variante löst nur dann einen Fehler aus, wenn der Lazy Load tatsächlich SQL ausgibt, im Gegensatz zur Auslösung, wenn der Lazy Loader-Mechanismus überhaupt aufgerufen wird.Referenzen: #3812
[orm] [feature] ¶
Die Methode
Query.group_by()setzt die Group-by-Sammlung zurück, wenn ein Argument vonNoneübergeben wird, genauso wieQuery.order_by()seit langem funktioniert. Pull-Request von Iuri Diniz.[orm] [change] ¶
Das Übergeben von False an
Query.order_by(), um alle Sortierungen abzubrechen, ist veraltet; es gibt keinen Unterschied mehr zwischen dem Aufruf dieser Methode mit False oder None.[orm] [bug] ¶
Behobener Fehler, bei dem Joined Eager Loading für einen polymorph geladenen Mapper fehlschlug, wenn der polymorphic_on auf einen nicht zugeordneten Ausdruck wie einen CASE-Ausdruck gesetzt war.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3800
[orm] [bug] ¶
Behobener Fehler, bei dem der ArgumentError für ein ungültiges an eine Sitzung über
Session.bind_mapper(),Session.bind_table()oder den Konstruktor gesendetes Bind nicht korrekt ausgelöst wurde.Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3798
[orm] [bug] ¶
Behobener Fehler in Subquery Eager Loading, bei dem ein Subqueryload eines „of_type()“-Objekts, das mit einem zweiten Subqueryload einer einfachen zugeordneten Klasse oder einer längeren Kette mehrerer „of_type()“-Attribute verbunden war, die Joins nicht korrekt verknüpfen konnte.
Diese Änderung wird auch nach zurückportiert: 1.0.15
[orm] [bug] ¶
ORM-Attribute können nun jedes Objekt zugewiesen bekommen, das ein
__clause_element__()-Attribut besitzt, was zu inline SQL führt, wie es jede KlasseClauseElementtut. Dies deckt andere zugeordnete Attribute ab, die nicht anderweitig durch weitere Ausdruckskonstrukte transformiert werden.Referenzen: #3802
[orm] [bug] ¶
Anpassung der zuerst in [ticket:3431] eingeführten Fehlerbehebung vorgenommen, bei der ein Objekt in mehreren Kontexten eines einzelnen Ergebnissets erscheint, sodass ein Eager-Loader, der den Wert des zugehörigen Objekts auf None setzt, trotzdem ausgelöst wird und somit die Ladung dieses Attributs erfüllt. Zuvor berücksichtigte die Anpassung nur einen Nicht-Null-Wert, der für ein eager-geladenes Attribut in einer sekundären Zeile eintraf.
Referenzen: #3811
[orm] [bug] ¶
Behobener Fehler im neuen Event
SessionEvents.persistent_to_deleted(), bei dem das Zielobjekt vor dem Auslösen des Events gesammelt werden konnte.Referenzen: #3808
[orm] [bug] ¶
Der primaryjoin eines
relationship()-Konstrukts kann nun einbindparam()-Objekt enthalten, das eine aufrufbare Funktion zur Generierung von Werten enthält. Zuvor war die Lazy Loader-Strategie damit inkompatibel und erkannte außerdem nicht korrekt, ob das Kriterium „use_get“ verwendet werden sollte, wenn der Primärschlüssel mit dem gebundenen Parameter verknüpft war.Referenzen: #3767
[orm] [bug] ¶
Ein UPDATE, das vom ORM-Flush-Prozess ausgegeben wird, kann nun ein SQL-Ausdruckselement für eine Spalte innerhalb des Primärschlüssels eines Objekts aufnehmen, wenn die Zieldatenbank RETURNING unterstützt, um den neuen Wert bereitzustellen, oder wenn der PK-Wert für die Erhöhung eines anderen Triggers/onupdate der Spalte „auf sich selbst“ gesetzt wird.
Referenzen: #3801
[orm] [bug] ¶
Behobener Fehler, bei dem die Bedingung „einfaches Many-to-One“, die es Lazy Loading ermöglicht, get() aus der Identitätsmap zu verwenden, nicht aufgerufen wurde, wenn der Primaryjoin der Beziehung mehrere Klauseln enthielt, die durch AND getrennt waren und nicht in der gleichen Reihenfolge wie die Primärschlüsselspalten waren, die in jeder Klausel verglichen wurden. Dieser Reihenfolgeunterschied tritt bei einem zusammengesetzten Fremdschlüssel auf, bei dem die tabellengebundenen Spalten auf der Referenzseite nicht in der gleichen Reihenfolge in der .c-Sammlung wie die Primärschlüsselspalten auf der referenzierten Seite waren… was wiederum häufig vorkommt, wenn man deklarative Mixins und/oder declared_attr zur Einrichtung von Spalten verwendet.
Referenzen: #3788
[orm] [bug] ¶
Wenn zwei
@validates-Dekoratoren auf einer Zuordnung denselben Namen verwenden, wird eine Ausnahme ausgelöst. Nur ein Validator eines bestimmten Namens ist gleichzeitig zulässig, es gibt keinen Mechanismus, diese zu verketten, da die Reihenfolge der Validatoren auf der Ebene des Funktionsdecorators nicht deterministisch gemacht werden kann.Referenzen: #3776
[orm] [bug] ¶
Mapper-Fehler, die während
configure_mappers()ausgelöst werden, enthalten nun explizit den Namen des Ursprungsmappers in der Fehlermeldung, um in Fällen zu helfen, in denen die umschlossene Ausnahme selbst den Quellmapper nicht enthält. Pull-Request von John Perkins.
orm declarative¶
[orm] [declarative] [change] ¶
Das Erstellen einer deklarativen Basisklasse, die von einer anderen Klasse erbt, erbt auch deren Docstring. Das bedeutet, dass
as_declarative()eher wie ein normaler Klassen-Decorator funktioniert.
sql¶
[sql] [bug] ¶
Fehler behoben in
Table, bei dem die interne Methode_reset_exported()den Zustand des Objekts beschädigte. Diese Methode ist für wählbare Objekte vorgesehen und wird in einigen Fällen vom ORM aufgerufen; eine fehlerhafte Mapper-Konfiguration konnte dazu führen, dass das ORM diese Methode für einTable-Objekt aufruft.Diese Änderung wird auch nach zurückportiert: 1.0.15
Referenzen: #3755
[sql] [bug] ¶
Ausführungsoptionen können nun von innerhalb einer Anweisung zur Kompilierzeit an die äußerste Anweisung weitergegeben werden, sodass, wenn ein eingebettetes Element z. B. „autocommit“ auf True setzen möchte, es dies an die umschließende Anweisung weitergeben kann. Derzeit ist diese Funktion für eine DML-orientierte CTE aktiviert, die in eine SELECT-Anweisung eingebettet ist, z. B. INSERT/UPDATE/DELETE innerhalb von SELECT.
Referenzen: #3805
[sql] [bug] ¶
Eine als Spaltendefault über den Parameter
Column.server_defaultgesendete Zeichenkette wird nun für Anführungszeichen escaped.Referenzen: #3809
[sql] [bug] [postgresql] ¶
Compiler-Flags wurden hinzugefügt, die von PostgreSQL verwendet werden, um zusätzliche Klammern um Operationen mit JSON-, HSTORE-Indizierungsoperatoren sowie deren Operanden zu setzen, als es die Vorrangregeln normalerweise erfordern würden. Dies wurde beobachtet, da die Vorrangregeln von PostgreSQL für mindestens den HSTORE-Indizierungsoperator zwischen 9.4 und 9.5 nicht konsistent sind.
Referenzen: #3806
[sql] [bug] [mysql] ¶
Die Ausnahme-Klasse
BaseExceptionwird jetzt von den Ausnahmebehandlungsroutinen vonConnectionabgefangen und beinhaltet die Behandlung durch das EreignisConnectionEvents.handle_error(). DieConnectionwird standardmäßig bei einer Systemausnahme, die keine Unterklasse vonExceptionist, einschließlichKeyboardInterruptund der Greenlet-KlasseGreenletExit, **ungültig gemacht**, um weitere Operationen auf einer Datenbankverbindung zu verhindern, die sich in einem unbekannten und möglicherweise beschädigten Zustand befindet. Die MySQL-Treiber sind am stärksten von dieser Änderung betroffen, aber die Änderung gilt für alle DBAPIs.Referenzen: #3803
[sql] [bug] ¶
Die Operatoren „eq“ und „ne“ sind nicht mehr Teil der Liste der „assoziativen“ Operatoren, bleiben aber als „kommutativ“ gelten. Dies ermöglicht es, dass ein Ausdruck wie
(x == y) == zauf SQL-Ebene mit Klammern beibehalten wird. Pull-Request von John Passaro.Referenzen: #3799
[sql] [bug] ¶
Die Stringifizierung eines Ausdrucks mit unbenannten
Column-Objekten, wie sie in vielen Situationen, einschließlich der ORM-Fehlermeldung, vorkommen, wird nun den Namen im String-Kontext als „<name unknown>“ rendern, anstatt einen Kompilierungsfehler auszulösen.Referenzen: #3789
[sql] [bug] ¶
Es wird eine aussagekräftigere Ausnahme/Meldung ausgelöst, wenn ClauseElement oder nicht-SQLAlchemy-Objekte, die nicht „ausführbar“ sind, fälschlicherweise an
.execute()übergeben werden; eine neue Ausnahme ObjectNotExecutableError wird in allen Fällen konsistent ausgelöst.Referenzen: #3786
[sql] [bug] [mysql] [postgresql] ¶
Regression in JSON-Datentypen behoben, bei der der „literal processor“ für einen JSON-Indexwert nicht aufgerufen wurde. Die nativen Datentypen String und Integer werden jetzt von JSONIndexType und JSONPathType aufgerufen. Dies gilt für die generischen, PostgreSQL und MySQL JSON-Typen und hat auch eine Abhängigkeit von #3766.
Referenzen: #3765
[sql] [bug] ¶
Fehler behoben, bei dem
IndexSpalten aus zusammengesetzten SQL-Ausdrücken nicht extrahieren konnte, wenn diese SQL-Ausdrücke innerhalb eines ORM-Stils__clause_element__()-Konstrukts verschachtelt waren. Dieser Fehler existiert auch in 1.0.x, ist aber in 1.1 auffälliger, da hybrid_property @expression nun ein verschachteltes Element zurückgibt.Referenzen: #3763
postgresql¶
[postgresql] [bug] ¶
Anpassung von ON CONFLICT, so dass die Logik „inserted_primary_key“ den Fall berücksichtigen kann, in dem keine INSERT oder UPDATE stattfindet und keine Nettoänderung erfolgt. Der Wert ergibt in diesem Fall None anstelle einer Ausnahme.
Referenzen: #3813
[postgresql] [bug] ¶
Problem im neuen PG „on conflict“-Konstrukt behoben, bei dem Spalten, einschließlich der aus dem „excluded“-Namespace, in den WHERE-Klauseln der Anweisung nicht tabellenqualifiziert waren.
Referenzen: #3807
mysql¶
[mysql] [bug] ¶
Unterstützung für das Parsen von MySQL/Connector-Boolean- und Integer-Argumenten in der URL-Abfragezeichenkette hinzugefügt: connection_timeout, connect_timeout, pool_size, get_warnings, raise_on_warnings, raw, consume_results, ssl_verify_cert, force_ipv6, pool_reset_session, compress, allow_local_infile, use_pure.
Diese Änderung wird auch nach zurückportiert: 1.0.15
Referenzen: #3787
[mysql] [bug] ¶
Fehler behoben, bei dem das Flag „literal_binds“ unter MySQL nicht an einen CAST-Ausdruck weitergegeben wurde.
Referenzen: #3766
mssql¶
[mssql] [bug] ¶
Die Abfrage zum Abrufen des „Standard-Schemanamens“ wurde von einer Abfrage der Datenbank-Principal-Tabelle zur Verwendung der Funktion „schema_name()“ geändert, da Berichte eingegangen sind, dass das erstere System auf der Azure Data Warehouse Edition nicht verfügbar war. Es wird gehofft, dass dies endlich auf allen SQL Server-Versionen und Authentifizierungsstilen funktioniert.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3810
[mssql] [bug] ¶
Das Schema für die Serverversionsinformationen für pyodbc wurde aktualisiert, um SQL Server SERVERPROPERTY() zu verwenden, anstatt sich auf pyodbc.SQL_DBMS_VER zu verlassen, das insbesondere bei FreeTDS weiterhin unzuverlässig ist.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3814
[mssql] [bug] ¶
Der Fehlercode 20017 „unerwartetes EOF vom Server“ wurde der Liste der Trennungs-Ausnahmen hinzugefügt, die zu einem Zurücksetzen des Verbindungspools führen. Pull-Request von Ken Robbins.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3791
misc¶
[bug] [orm.declarative] ¶
Fehler behoben, bei dem die Einrichtung einer Single-Table-Inheritance-Unterklasse einer Joined-Table-Inheritance-Unterklasse mit einer zusätzlichen Spalte die Fremdschlüssel-Sammlung der abgebildeten Tabelle beschädigte und somit die Initialisierung von Beziehungen beeinträchtigte.
Diese Änderung wird auch nach zurückportiert: 1.0.16
Referenzen: #3797
1.1.0b3¶
Veröffentlicht: 26. Juli 2016orm¶
[orm] [change] ¶
Eine Warnung entfernt, die seit 0.4 bestand und ausgegeben wurde, wenn eine Beziehung mit demselben Namen auf zwei Mapper gesetzt wurde, die über Joined- oder Single-Table-Inheritance geerbt wurden. Die Warnung gilt nicht für die aktuelle Unit-of-Work-Implementierung.
Referenzen: #3749
sql¶
[sql] [bug] ¶
Fehler in der neuen CTE-Funktion für Update/Insert/Delete, die als CTE innerhalb einer umschließenden Anweisung (typischerweise SELECT) angegeben wurde, behoben, bei der die Werte oninsert und onupdate für die eingebettete Anweisung nicht aufgerufen wurden.
Referenzen: #3745
[sql] [bug] ¶
Fehler in der neuen CTE-Funktion für Update/Insert/Delete behoben, bei der ein anonymer (d. h. ohne Angabe eines Namens)
CTE-Konstrukt um die Anweisung herum fehlschlug.Referenzen: #3744
postgresql¶
[postgresql] [bug] ¶
Fehler behoben, bei dem
TypeDecoratorundVariantTypen vom PostgreSQL-Dialekt nicht tief genug inspiziert wurden, um zu bestimmen, ob SMALLSERIAL oder BIGSERIAL anstelle von SERIAL gerendert werden musste. Dies ist auch zurückportiert auf: 1.0.14Diese Änderung wird auch zurückportiert auf: 1.0.14
Referenzen: #3739
oracle¶
[oracle] [bug] ¶
Fehler in
Select.with_for_update.ofbehoben, bei dem die Oracle „rownum“-Methode für LIMIT/OFFSET die Ausdrücke in der „OF“-Klausel nicht berücksichtigen konnte, die auf der obersten Ebene auf Ausdrücke innerhalb der Unterabfrage verweisen müssen. Die Ausdrücke werden jetzt bei Bedarf zur Unterabfrage hinzugefügt.Diese Änderung wird auch zurückportiert auf: 1.0.14
Referenzen: #3741
misc¶
[feature] [ext] ¶
Ein Parameter „default“ wurde zur neuen Erweiterung sqlalchemy.ext.indexable hinzugefügt.
[bug] [ext] ¶
Fehler in
sqlalchemy.ext.bakedbehoben, bei dem das Entpacken einer Subquery-Eager-Loader-Abfrage aufgrund eines Variablen-Gültigkeitsbereichsproblems fehlschlug, wenn mehrere Subquery-Loader beteiligt waren. Pull-Request von Mark Hahnenberg.Diese Änderung wird auch nach zurückportiert: 1.0.15
Referenzen: #3743
[bug] [ext] ¶
sqlalchemy.ext.indexable wird IndexError sowie KeyError abfangen, wenn als AttributeError ausgelöst.
1.1.0b2¶
Veröffentlicht: 1. Juli 2016sql¶
[sql] [bug] ¶
Problem mit dem SQL-mathematischen Negationsoperator behoben, bei dem der Typ des Ausdrucks nicht mehr der numerische Typ des Originals war. Dies führte zu Problemen, bei denen der ermittelte Typ das Verhalten des Ergebnissatzes bestimmte.
Diese Änderung wird auch zurückportiert auf: 1.0.14
Referenzen: #3735
[sql] [bug] ¶
Fehler behoben, bei dem die Methoden
__getstate__/__setstate__für sqlalchemy.util.Properties aufgrund des Übergangs in der 1.0-Serie zu__slots__nicht funktionierten. Das Problem beeinträchtigte potenziell einige Drittanbieteranwendungen. Pull-Request von Pieter Mulder.Diese Änderung wird auch zurückportiert auf: 1.0.14
Referenzen: #3728
[sql] [bug] ¶
Die Verarbeitung durch den
Boolean-Datentyp für Backends, die nur Integer-Typen haben, wurde zwischen den reinen Python- und C-Erweiterungsversionen konsistent gemacht, sodass die C-Erweiterungsversion jeden Integer-Wert aus der Datenbank als Boolean akzeptiert, nicht nur null und eins; außerdem werden nicht-boolesche Integer-Werte, die an die Datenbank gesendet werden, genau in null oder eins umgewandelt, anstatt als ursprünglicher Integer-Wert übergeben zu werden.Siehe auch
Nicht-native boolesche Integer-Werte werden in allen Fällen in null/eins/None umgewandelt
Referenzen: #3730
[sql] [bug] ¶
Die Validierungsregeln in
Enumwurden etwas zurückgenommen, um unbekannte Zeichenkettenwerte zuzulassen, es sei denn, das Flagvalidate_string=Truewird an Enum übergeben; jede andere Art von Objekt wird natürlich weiterhin abgelehnt. Während der unmittelbare Verwendungszweck darin besteht, Vergleiche mit Enums mit LIKE zu ermöglichen, deutet die Tatsache, dass dieser Verwendungszweck existiert, darauf hin, dass es möglicherweise mehr Verwendungsmöglichkeiten für unbekannte Zeichenkettenvergleiche gibt, als wir erwartet hatten, was darauf hindeutet, dass es vielleicht auch unbekannte Zeichenketten-INSERT-Fälle gibt.Referenzen: #3725
postgresql¶
[postgresql] [bug] [ext] ¶
Eine leichte Verhaltensänderung wurde in der Erweiterung
sqlalchemy.ext.compilervorgenommen, bei der bestehende Kompilierungsschemata für einen eingerichteten Konstrukt entfernt würden, wenn dieser Konstrukt selbst nicht bereits seinen eigenen dedizierten__visit_name__hatte. Dies war eine selteneoccurrence in 1.0, aber in 1.1 sindARRAY-UnterklassenARRAYund haben dieses Verhalten. Infolgedessen ist die Einrichtung eines Kompilierungshandlers für einen anderen Dialekt wie SQLite nicht mehr möglich, um das Haupt-ARRAY-Objekt zu kompilieren.Referenzen: #3732
mysql¶
[mysql] [bug] ¶
Die „Sortierung der Primärschlüsselspalten für Auto-Inkrement“ (beschrieben in Keine implizite KEY-Generierung mehr für zusammengesetzten Primärschlüssel mit AUTO_INCREMENT) wurde etwas zurückgenommen, sodass, wenn die
PrimaryKeyConstraintexplizit definiert ist, die Reihenfolge der Spalten genau beibehalten wird, was die Steuerung dieses Verhaltens bei Bedarf ermöglicht.Referenzen: #3726
1.1.0b1¶
Veröffentlicht: 16. Juni 2016orm¶
[orm] [feature] [ext] ¶
Eine neue ORM-Erweiterung Indexable wird hinzugefügt, die die Erstellung von Python-Attributen ermöglicht, die sich auf bestimmte Elemente von „indizierten“ Strukturen wie Arrays und JSON-Felder beziehen. Pull-Request von Jeong YunWon.
Siehe auch
[orm] [feature] ¶
Neues Flag
Session.bulk_insert_mappings.render_nullshinzugefügt, das einen ORM-Massen-INSERT mit gerenderten NULL-Werten ermöglicht. Dies umgeht serverseitige Standardwerte, ermöglicht aber die Erstellung aller Anweisungen mit demselben Satz von Spalten, sodass sie gebündelt werden können. Pull-Request von Tobias Sauerwein.[orm] [feature] ¶
Neues Ereignis
AttributeEvents.init_scalar()sowie eine neue Beispielsuite zur Veranschaulichung seiner Verwendung hinzugefügt. Dieses Ereignis kann verwendet werden, um einen Core-generierten Standardwert für ein Python-seitiges Attribut bereitzustellen, bevor das Objekt persistent gemacht wird.Referenzen: #1311
[orm] [feature] ¶
Der Parameter
AutomapBase.prepare.schemawurde zur MethodeAutomapBase.prepare()hinzugefügt, um anzugeben, aus welchem Schema Tabellen reflektiert werden sollen, wenn es nicht das Standardschema ist. Pull-Request von Josh Marlow.[orm] [feature] ¶
Neuer Mapper-Option-Parameter
mapper.passive_deleteshinzugefügt. Dies ermöglicht es, dass ein DELETE bei einer Joined-Table-Inheritance-Zuordnung nur auf die Basistabelle angewendet wird, während ON DELETE CASCADE die Löschung der Zeile aus den Unterklassentabellen übernimmt.Referenzen: #2349
[orm] [feature] ¶
Das Aufrufen von str() für einen Core-SQL-Konstrukt wurde „freundlicher“ gestaltet, wenn der Konstrukt nicht standardmäßige SQL-Elemente wie RETURNING, Array-Indexoperationen oder dialektspezifische oder benutzerdefinierte Datentypen enthält. In diesen Fällen wird nun eine Zeichenkette zurückgegeben, die eine Annäherung an den Konstrukt rendert (typischerweise die PostgreSQL-Version davon) anstatt einen Fehler auszulösen.
Referenzen: #3631
[orm] [feature] ¶
Der
str()-Aufruf fürQueryberücksichtigt nun dieEngine, an die dieSessiongebunden ist, wenn die Zeichenkettenform des SQLs generiert wird, sodass, wenn möglich, das tatsächliche SQL angezeigt wird, das an die Datenbank ausgegeben würde. Zuvor wurde nur die Engine verwendet, die mit denMetaData, denen die Abbildungen zugeordnet sind, verbunden war, falls vorhanden. Wenn weder auf derSessionnoch auf denMetaData, denen die Abbildungen zugeordnet sind, eine Bindung gefunden werden kann, dann wird der „Standard“-Dialekt verwendet, um das SQL zu rendern, wie es zuvor der Fall war.Referenzen: #3081
[orm] [feature] ¶
Die
SessionEvents-Suite enthält jetzt Ereignisse, die eine eindeutige Nachverfolgung aller Objektlebenszyklus-Zustandsübergänge in Bezug auf dieSessionselbst ermöglichen, z. B. pending, transient, persistent, detached. Der Zustand des Objekts innerhalb jedes Ereignisses ist ebenfalls definiert.Siehe auch
Referenzen: #2677
[orm] [feature] ¶
Ein neuer Session-Lifecycle-Status deleted wurde hinzugefügt. Dieser neue Status repräsentiert ein Objekt, das aus dem persistent-Zustand gelöscht wurde und nach Bestätigung der Transaktion in den detached-Zustand übergeht. Dies löst das langjährige Problem, dass Objekte, die gelöscht wurden, in einem Graubereich zwischen persistent und detached existierten. Der
InstanceState.persistent-Accessor meldet nicht mehr ein gelöschtes Objekt als persistent; derInstanceState.deleted-Accessor ist stattdessen für diese Objekte True, bis sie detached werden.Siehe auch
Referenzen: #2677
[orm] [feature] ¶
Neue Prüfungen für den häufigen Fehlerfall hinzugefügt, dass abgebildete Klassen oder abgebildete Instanzen in Kontexte übergeben werden, in denen sie als SQL-gebundene Parameter interpretiert werden; eine neue Ausnahme wird dafür ausgelöst.
Referenzen: #3321
[orm] [feature] ¶
Neue Beziehungsladestrategie
raiseload()hinzugefügt (auch zugänglich überlazy='raise'). Diese Strategie verhält sich fast wienoload(), aber anstattNonezurückzugeben, löst sie eine InvalidRequestError aus. Pull-Request von Adrian Moennich.Referenzen: #3512
[orm] [change] ¶
Der Parameter
Mapper.order_byist veraltet. Dies ist ein alter Parameter, der für die Funktionsweise von SQLAlchemy, seitdem das Query-Objekt eingeführt wurde, nicht mehr relevant ist. Indem wir ihn als veraltet markieren, stellen wir klar, dass wir nicht funktionierende Anwendungsfälle nicht unterstützen und dass wir Anwendungen ermutigen, von der Verwendung dieses Parameters abzukommen.Siehe auch
Referenzen: #3394
[orm] [change] ¶
Der Parameter
Session.weak_identity_mapist veraltet. Siehe das neue Rezept unter Session Referencing Behavior für einen ereignisbasierten Ansatz zur Aufrechterhaltung des Strong Identity Map Verhaltens.Siehe auch
Referenzen: #2677
[orm] [bug] ¶
Ein Problem wurde behoben, bei dem eine Many-to-One-Änderung eines Objekts von einem Elternteil zu einem anderen inkonsistent funktionieren konnte, wenn sie mit einer nicht gefluchten Modifikation des Fremdschlüsselattributs kombiniert wurde. Die Attributverschiebung berücksichtigt nun den datenbankseitig bestätigten Wert des Fremdschlüssels, um den „vorherigen“ Elternteil des verschobenen Objekts zu lokalisieren. Dies ermöglicht, dass Ereignisse korrekt ausgelöst werden, einschließlich Backref-Ereignissen. Zuvor wurden diese Ereignisse nicht immer ausgelöst. Anwendungen, die sich möglicherweise auf das zuvor fehlerhafte Verhalten verlassen haben, könnten betroffen sein.
Referenzen: #3708
[orm] [bug] ¶
Fehler behoben, bei dem verzögerte Spalten unbeabsichtigt für die Datenbankladung beim nächsten globalen Deaktivieren des Objekts vorbereitet wurden, wenn das Objekt mit
session.merge(obj, load=False)in die Session gemergt wurde.Referenzen: #3488
[orm] [bug] [mysql] ¶
Weiterhin, bezüglich des häufigen MySQL-Ausnahmefalls eines zuerst in #2696 behandelten abgebrochenen Savepoints, wurde der Fehlerfall, in dem die
Sessionplatziert wird, wenn ein SAVEPOINT vor dem Rollback verschwindet, verbessert, um derSessionzu ermöglichen, außerhalb dieses Savepoints weiter zu funktionieren. Es wird davon ausgegangen, dass die Savepoint-Operation fehlgeschlagen und abgebrochen wurde.Referenzen: #3680
[orm] [bug] ¶
Fehler behoben, bei dem eine neu eingefügte Instanz, die zurückgerollt wurde, immer noch Persistenzkonflikte beim nächsten Transaktion verursachen konnte, da die Instanz nicht als abgelaufen markiert wurde. Diese Korrektur löst eine große Klasse von Fällen, die fälschlicherweise den Fehler „Neue Instanz mit Identität X kollidiert mit persistenter Instanz Y“ verursachen.
Referenzen: #3677
[orm] [bug] ¶
Eine Verbesserung der Funktionsweise von
Query.correlate(), sodass, wenn eine „polymorphe“ Entität verwendet wird, die einen direkten Join mehrerer Tabellen darstellt, die Anweisung sicherstellt, dass alle Tabellen im Join Teil des korrelierenden sind.Referenzen: #3662
[orm] [bug] ¶
Fehler behoben, der dazu führte, dass ein eager geladenes Many-to-One-Attribut nicht geladen wurde, wenn der joined eager load von einer Zeile stammte, in der dieselbe Entität mehrmals vorhanden war, wobei einige die eager Ladung des Attributs forderten und andere nicht. Die Logik hier wurde überarbeitet, um das Attribut zu berücksichtigen, auch wenn ein anderer Laderpfad bereits die Elternentität behandelt hat.
Referenzen: #3431
[orm] [bug] ¶
Eine Verfeinerung der Logik, die Spalten zum resultierenden SQL hinzufügt, wenn
Query.distinct()mitQuery.order_by()kombiniert wird, sodass Spalten, die bereits vorhanden sind, nicht ein zweites Mal hinzugefügt werden, auch wenn sie mit einem anderen Namen bezeichnet sind. Unabhängig von dieser Änderung wurden die zusätzlichen Spalten, die dem SQL hinzugefügt wurden, niemals im Endergebnis zurückgegeben, sodass diese Änderung nur die Zeichenfolgendarstellung der Anweisung sowie deren Verhalten bei Verwendung im Core-Ausführungskontext beeinflusst. Darüber hinaus werden Spalten nicht mehr hinzugefügt, wenn das DISTINCT ON-Format verwendet wird, vorausgesetzt, die Abfrage ist aufgrund von joined eager loading nicht in einer Unterabfrage verschachtelt.Referenzen: #3641
[orm] [bug] ¶
Fehler behoben, bei dem zwei gleichnamige Beziehungen, die sich auf eine Basisklasse und eine konkret vererbte Unterklasse beziehen, einen Fehler auslösten, wenn diese Beziehungen über „backref“ eingerichtet wurden, während die Einrichtung derselben Konfiguration über relationship() statt mit den widersprüchlichen Namen erfolgreich war, wie es im Fall einer konkreten Abbildung zulässig ist.
Referenzen: #3630
[orm] [bug] ¶
Die Methode
Session.merge()verfolgt nun ausstehende Objekte anhand des Primärschlüssels, bevor ein INSERT ausgegeben wird, und führt zusammenhängende Objekte mit doppelten Primärschlüsseln zusammen, wenn sie angetroffen werden, was im besten Fall semi-deterministisch ist. Dieses Verhalten entspricht dem, was bereits bei persistenten Objekten geschieht.Referenzen: #3601
[orm] [bug] ¶
Fehler behoben, bei dem die Kriterien der „Single Table Inheritance“ in einigen ungeeigneten Situationen am Ende einer Abfrage hinzugefügt wurden, z. B. beim Abfragen aus einem exists() einer Single-Inheritance-Unterklasse.
Referenzen: #3582
[orm] [bug] ¶
Ein neuer Typ-Level-Modifikator
TypeEngine.evaluates_none()wurde hinzugefügt, der dem ORM anzeigt, dass ein positiver Satz von None als Wert NULL persistiert wird, anstatt die Spalte aus der INSERT-Anweisung wegzulassen. Dieses Feature wird sowohl als Teil der Implementierung für #3514 als auch als eigenständiges Feature für jeden Typ verwendet.Siehe auch
Neue Optionen, die die explizite Persistierung von NULL gegenüber einem Standardwert ermöglichen
Referenzen: #3250
[orm] [bug] ¶
Interne Aufrufe von „Bookkeeping“-Funktionen innerhalb von
Session.bulk_save_objects()und verwandten Bulk-Methoden wurden reduziert, insofern diese Funktionalität derzeit nicht genutzt wird, z. B. Überprüfungen von Spaltenstandardwerten, die nach einer INSERT- oder UPDATE-Anweisung abgerufen werden sollen.Referenzen: #3526
[orm] [bug] [postgresql] ¶
Weitere Korrekturen wurden bezüglich des Werts von
Nonein Verbindung mit dem PostgreSQLJSON-Typ vorgenommen. Wenn das FlagJSON.none_as_nullauf seinem StandardwertFalsebelassen wird, wird das ORM nun korrekt den JSON-String „null“ in die Spalte einfügen, wann immer der Wert im ORM-Objekt auf den WertNonegesetzt wird oder wann immer der WertNonemitSession.bulk_insert_mappings()verwendet wird, **einschließlich** wenn die Spalte einen Standard- oder Serverstandardwert hat.Siehe auch
JSON „null“ wird wie erwartet mit ORM-Operationen eingefügt, weggelassen, wenn nicht vorhanden
Neue Optionen, die die explizite Persistierung von NULL gegenüber einem Standardwert ermöglichen
Referenzen: #3514
engine¶
[engine] [feature] ¶
Verbindungspool-Ereignisse
ConnectionEvents.close(),ConnectionEvents.detach(),ConnectionEvents.close_detached()wurden hinzugefügt.[engine] [feature] ¶
Alle Zeichenfolgenformatierungen von gebundenen Parameter-Sets und Ergebniszeilen für Protokollierungs-, Ausnahme- und
repr()-Zwecke kürzen nun sehr große Skalarwerte innerhalb jeder Sammlung, einschließlich einer „N Zeichen gekürzt“-Notation, ähnlich wie die Anzeige großer Mehrfachparametersätze selbst gekürzt wird.Siehe auch
Große Parameter- und Zeilenwerte werden nun in Protokollierungs- und Ausnahmeanzeigen gekürzt
Referenzen: #2837
[engine] [feature] ¶
Multi-Tenant-Schemaübersetzung für
Table-Objekte wurde hinzugefügt. Dies unterstützt den Anwendungsfall einer Anwendung, die dieselbe Menge anTable-Objekten in vielen Schemata verwendet, z. B. Schema pro Benutzer. Eine neue AusführungsoptionConnection.execution_options.schema_translate_mapwurde hinzugefügt.Referenzen: #2685
[engine] [feature] ¶
Ein neues Einstiegspunkt-System wurde zum Engine hinzugefügt, um „Plugins“ in der URL-Abfragezeichenfolge anzugeben. Benutzerdefinierte Plugins können geschrieben werden, die die Möglichkeit erhalten, die URL und Schlüsselwortargumente des Engines im Voraus zu ändern und/oder zu verbrauchen, und dann zum Zeitpunkt der Engine-Erstellung den Engine selbst erhalten, um zusätzliche Modifikationen oder Ereignisregistrierungen zu ermöglichen. Plugins werden als Unterklasse von
CreateEnginePlugingeschrieben; Details finden Sie in dieser Klasse.Referenzen: #3536
sql¶
[sql] [feature] ¶
TABLESAMPLE-Unterstützung wurde über die neue Methode
FromClause.tablesample()und die eigenständige Funktion hinzugefügt. Pull Request von Ilja Everilä.Siehe auch
Referenzen: #3718
[sql] [feature] ¶
Unterstützung für Bereiche in Fensterfunktionen wurde hinzugefügt, unter Verwendung der Parameter
over.range_undover.rows.Referenzen: #3049
[sql] [feature] ¶
Reflection von CHECK-Constraints für SQLite und PostgreSQL wurde implementiert. Dies ist über die neue Inspector-Methode
Inspector.get_check_constraints()verfügbar, sowie beim Reflektieren vonTable-Objekten in Form vonCheckConstraint-Objekten, die in der Constraints-Sammlung vorhanden sind. Pull Request von Alex Grönholm.[sql] [feature] ¶
Neue Operatoren
ColumnOperators.is_distinct_from()undColumnOperators.isnot_distinct_from(); Pull Request von Sebastian Bank.[sql] [feature] ¶
Ein Hook in
DDLCompiler.visit_create_table()namensDDLCompiler.create_table_suffix()wurde hinzugefügt, der es benutzerdefinierten Dialekten ermöglicht, Schlüsselwörter nach der Klausel „CREATE TABLE“ hinzuzufügen. Pull Request von Mark Sandan.[sql] [feature] ¶
Negative ganzzahlige Indizes werden nun von den Zeilen einer
ResultProxyberücksichtigt. Pull Request von Emanuele Gaifas.[sql] [feature] ¶
Select.lateral()und verwandte Konstrukte wurden hinzugefügt, um das SQL-Standardkeyword LATERAL zu ermöglichen, das derzeit nur von PostgreSQL unterstützt wird.Referenzen: #2857
[sql] [feature] ¶
Unterstützung für „FULL OUTER JOIN“ wurde sowohl für Core als auch für ORM hinzugefügt. Pull Request von Stefan Urbanek.
Referenzen: #1957
[sql] [feature] ¶
Die CTE-Funktionalität wurde erweitert, um alle DMLs zu unterstützen, sodass INSERT-, UPDATE- und DELETE-Anweisungen sowohl ihre eigene WITH-Klausel angeben können als auch diese Anweisungen selbst CTE-Ausdrücke sind, wenn sie eine RETURNING-Klausel enthalten.
Siehe auch
Referenzen: #2551
[sql] [feature] ¶
Unterstützung für PEP-435-konforme Enumerationsklassen, insbesondere Pythons 3
enum.Enum-Klasse, aber auch kompatible Enumerationsbibliotheken, wurde zumEnum-Datentyp hinzugefügt. DerEnum-Datentyp führt nun auch eine In-Python-Validierung eingehender Werte durch und fügt eine Option hinzu, um die Erstellung der CHECK-ConstraintEnum.create_constraintzu unterdrücken. Pull Request von Alex Grönholm.[sql] [feature] ¶
Eine tiefgreifende Verbesserung der kürzlich hinzugefügten Methode
TextClause.columns()und ihrer Interaktion mit der Verarbeitung von Ergebniszeilen ermöglicht nun die positionale Zuordnung der an die Methode übergebenen Spalten zu den Ergebnisspalten in der Anweisung, anstatt nur nach Namen abzugleichen. Der Vorteil hierbei ist, dass beim Verknüpfen einer textuellen SQL-Anweisung mit einem ORM- oder Core-Tabellenmodell kein System zur Bezeichnung oder Deduplizierung gemeinsamer Spaltennamen erforderlich ist, was auch bedeutet, dass man sich keine Gedanken darüber machen muss, wie Bezeichnungen mit ORM-Spalten übereinstimmen usw. Darüber hinaus wurde dieResultProxyweiter verbessert, um in einigen Fällen Spalten- und Zeichenfolgen-Schlüssel mit größerer Präzision einer Zeile zuzuordnen.Siehe auch
Verbesserungen der ResultSet-Spaltenzuordnung; positionale Spalteneinrichtung für textuelles SQL - Feature-Übersicht
TextClause.columns() ordnet Spalten positionell, nicht nach Namen, zu, wenn sie positionell übergeben werden - Bemerkungen zur Abwärtskompatibilität
Referenzen: #3501
[sql] [feature] ¶
Ein neuer Typ
JSONwurde in Core hinzugefügt. Dies ist die Basis für den PostgreSQLJSON-Typ sowie für den neuenJSON-Typ, sodass eine PG/MySQL-agnostische JSON-Spalte verwendet werden kann. Der Typ bietet grundlegende Unterstützung für Index- und Pfadsuche.Siehe auch
Referenzen: #3619
[sql] [feature] ¶
Unterstützung für „set-aggregate“-Funktionen vom Typ
<function> WITHIN GROUP (ORDER BY <criteria>)wurde über die MethodeFunctionElement.within_group()hinzugefügt. Eine Reihe gängiger Set-Aggregatfunktionen mit Rückgabetypen, die aus dem Satz abgeleitet sind, wurden hinzugefügt. Dazu gehören Funktionen wiepercentile_cont,dense_rankund andere.Referenzen: #1370
[sql] [feature] [postgresql] ¶
Unterstützung für die SQL-Standardfunktion
array_aggwurde hinzugefügt, die automatisch einARRAYdes richtigen Typs zurückgibt und Index-/Slice-Operationen unterstützt, sowiearray_agg(), die einARRAYmit zusätzlichen Vergleichsfunktionen zurückgibt. Da Arrays derzeit nur auf PostgreSQL unterstützt werden, funktioniert dies nur auf PostgreSQL. Eine neue Konstruktionaggregate_order_byzur Unterstützung der PG „ORDER BY“-Erweiterung wurde ebenfalls hinzugefügt.Referenzen: #3132
[sql] [feature] ¶
Ein neuer Typ
ARRAYwurde in Core hinzugefügt. Dies ist die Basis für den PostgreSQLARRAY-Typ und ist nun Teil von Core, um verschiedene SQL-Standard-Array-unterstützende Features zu unterstützen, einschließlich einiger Funktionen und zukünftiger Unterstützung für native Arrays auf anderen Datenbanken mit einem „Array“-Konzept, wie z. B. DB2 oder Oracle. Zusätzlich wurden neue Operatorenany_()undall_()hinzugefügt. Diese unterstützen nicht nur Array-Konstrukte auf PostgreSQL, sondern auch Unterabfragen, die auf MySQL (aber leider nicht auf PostgreSQL) verwendet werden können.Referenzen: #3516
[sql] [change] [mysql] ¶
Das System, mit dem eine
Columnsich selbst als „Auto-Inkrement“-Spalte betrachtet, wurde geändert, sodass Autoincrement nicht mehr implizit für eineTableaktiviert wird, die einen zusammengesetzten Primärschlüssel hat. Um die Aktivierung von Autoincrement für eine Spalte eines zusammengesetzten PK-Mitglieds zu ermöglichen und gleichzeitig das langjährige Verhalten von SQLAlchemy beizubehalten, implizites Autoincrement für einen einzelnen Integer-Primärschlüssel zu aktivieren, wurde ein dritter Zustand zum ParameterColumn.autoincrementhinzugefügt:"auto", was nun der Standard ist.Siehe auch
Keine implizite Generierung eines KEY mehr für zusammengesetzte Primärschlüssel mit AUTO_INCREMENT
Referenzen: #3216
[sql] [bug] ¶
FromClause.count()ist veraltet. Diese Funktion verwendet eine beliebige Spalte der Tabelle und ist nicht zuverlässig; für die Core-Nutzung solltefunc.count()bevorzugt werden.Referenzen: #3724
[sql] [bug] ¶
Eine Assertion wurde behoben, die etwas unangemessen ausgelöst wurde, wenn ein
Indexmit einerColumnverbunden war, die mit einerTableClause(mit kleinem T) verbunden war; die Verbindung sollte für die Zwecke der Verbindung des Indexes mit einerTableignoriert werden.Referenzen: #3616
[sql] [bug] ¶
Der
type_coerce()-Konstrukt ist nun ein vollwertiges Core-Ausdruckselement, das zur Kompilierungszeit spät ausgewertet wird. Zuvor war die Funktion nur eine Konvertierungsfunktion, die verschiedene Ausdruckseingaben behandelte, indem sie entweder einLabeleines spaltenorientierten Ausdrucks oder eine Kopie eines gegebenenBindParameter-Objekts zurückgab, was insbesondere verhinderte, dass die Operation logisch aufrechterhalten wurde, wenn eine ORM-seitige Ausdruckstransformation eine Spalte in einen gebundenen Parameter konvertierte (z. B. für Lazy Loading).Referenzen: #3531
[sql] [bug] ¶
Der Typ-Erweiterer
TypeDecoratorfunktioniert nun in Verbindung mit einerSchemaType-Implementierung, typischerweiseEnumoderBoolean, um sicherzustellen, dass die pro-Tabelle-Ereignisse von der Implementierung zu dem äußeren Typ weitergegeben werden. Diese Ereignisse werden verwendet, um sicherzustellen, dass die Constraints oder PostgreSQL-Typen (z. B. ENUM) korrekt zusammen mit der übergeordneten Tabelle erstellt (und möglicherweise gelöscht) werden.Referenzen: #2919
[sql] [bug] ¶
Das Verhalten des Konstrukts
union()und verwandter Konstrukte wieQuery.union()behandelt nun den Fall, dass die eingebetteten SELECT-Anweisungen aufgrund von LIMIT, OFFSET und/oder ORDER BY in Klammern gesetzt werden müssen. Diese Abfragen **funktionieren nicht unter SQLite** und schlagen dort wie zuvor fehl, sollten aber nun auf allen anderen Backends funktionieren.Referenzen: #2528
Schema¶
[Schema] [Verbesserung] ¶
Die Standard-Generierungsfunktionen, die an
Column-Objekte übergeben werden, durchlaufen nun "update_wrapper" oder eine äquivalente Funktion, wenn ein aufrufbares Nicht-Funktions-Objekt übergeben wird, damit Introspektionswerkzeuge den Namen und die Docstring der umschlossenen Funktion beibehalten. Pull-Request von hsum.
PostgreSQL¶
[PostgreSQL] [Funktion] ¶
Unterstützung für PostgreSQLs INSERT..ON CONFLICT hinzugefügt, unter Verwendung eines neuen PostgreSQL-spezifischen
Insert-Objekts. Pull-Request und umfangreiche Bemühungen hier von Robin Thomas.Referenzen: #3529
[PostgreSQL] [Funktion] ¶
Die DDL für DROP INDEX gibt "CONCURRENTLY" aus, wenn das Flag
postgresql_concurrentlyauf demIndexgesetzt ist und wenn die verwendete Datenbank als PostgreSQL Version 9.2 oder neuer erkannt wird. Für CREATE INDEX wird ebenfalls eine Erkennung der Datenbankversion hinzugefügt, die die Klausel weglässt, wenn die PG-Version kleiner als 8.2 ist. Pull-Request von Iuri de Silvio.[PostgreSQL] [Funktion] ¶
Neuer Parameter
PGInspector.get_view_names.includehinzugefügt, der die Angabe ermöglicht, welche Arten von Views zurückgegeben werden sollen. Derzeit sind "plain" und "materialized" Views enthalten. Pull-Request von Sebastian Bank.Referenzen: #3588
[PostgreSQL] [Funktion] ¶
Das Argument
postgresql_tablespacewurde zuIndexhinzugefügt, um die Angabe von TABLESPACE für einen Index in PostgreSQL zu ermöglichen. Ergänzt den gleichnamigen Parameter beiTable. Pull-Request von Benjamin Bertrand.Referenzen: #3720
[PostgreSQL] [Funktion] ¶
Neuer Parameter
GenerativeSelect.with_for_update.key_sharehinzugefügt, der die VersionFOR NO KEY UPDATEvonFOR UPDATEundFOR KEY SHAREanstelle vonFOR SHAREauf dem PostgreSQL-Backend rendert. Pull-Request von Sergey Skopin.[PostgreSQL] [Funktion] [Oracle] ¶
Neuer Parameter
GenerativeSelect.with_for_update.skip_lockedhinzugefügt, der die PhraseSKIP LOCKEDfür einFOR UPDATEoderFOR SHARELock auf den PostgreSQL- und Oracle-Backends rendert. Pull-Request von Jack Zhou.[PostgreSQL] [Funktion] ¶
Ein neues Dialekt für den PyGreSQL PostgreSQL-Dialekt wurde hinzugefügt. Dank an Christoph Zwerschke und Kaolin Imago Fire für ihre Bemühungen.
[PostgreSQL] [Funktion] ¶
Neue Konstante
JSON.NULLhinzugefügt, die angibt, dass der JSON NULL-Wert für einen Wert verwendet werden soll, unabhängig von anderen Einstellungen.Siehe auch
Referenzen: #3514
[PostgreSQL] [Änderung] ¶
Das Modul
sqlalchemy.dialects.postgres, das lange als veraltet galt, wurde entfernt; dies hat viele Jahre lang eine Warnung ausgegeben, und Projekte solltensqlalchemy.dialects.postgresqlverwenden. Engine-URLs der Formpostgres://funktionieren jedoch weiterhin.[PostgreSQL] [Fehler] ¶
Unterstützung für die Reflexion der Quelle von Materialized Views in die PostgreSQL-Version der Methode
Inspector.get_view_definition()hinzugefügt.Referenzen: #3587
[PostgreSQL] [Fehler] ¶
Die Verwendung eines
ARRAY-Objekts, das sich auf einenEnum- oderENUM-Subtyp bezieht, gibt nun die erwartete "CREATE TYPE"- und "DROP TYPE"-DDL aus, wenn der Typ innerhalb eines "CREATE TABLE" oder "DROP TABLE" verwendet wird.Referenzen: #2729
[PostgreSQL] [Fehler] ¶
Das Flag "hashable" bei speziellen Datentypen wie
ARRAY,JSONundHSTOREist nun auf False gesetzt, was es diesen Typen ermöglicht, in ORM-Abfragen, die Entitäten innerhalb der Zeile enthalten, abrufbar zu sein.Referenzen: #3499
[PostgreSQL] [Fehler] ¶
Der PostgreSQL
ARRAY-Typ unterstützt nun mehrdimensionale indizierte Zugriffe, z.B. Ausdrücke wiesomecol[5][6]ohne Notwendigkeit expliziter Casts oder Typumwandlungen, vorausgesetzt, der ParameterARRAY.dimensionsist auf die gewünschte Anzahl von Dimensionen gesetzt.Referenzen: #3487
[PostgreSQL] [Fehler] ¶
Der Rückgabetyp für
JSONundJSONBbei indiziertem Zugriff wurde korrigiert, um wie PostgreSQL selbst zu funktionieren, und gibt einen Ausdruck zurück, der selbst vom TypJSONoderJSONBist. Zuvor gab der AccessorNullTypezurück, was nachfolgende JSON-ähnliche Operatoren verhinderte.Referenzen: #3503
[PostgreSQL] [Fehler] ¶
Die Datentypen
JSON,JSONBundHSTOREerlauben nun die vollständige Kontrolle über den Rückgabetyp einer indizierten textuellen Zugriffsoperation, entwedercolumn[someindex].astextfür einen JSON-Typ odercolumn[someindex]für einen HSTORE-Typ, über die ParameterJSON.astext_typeundHSTORE.text_type.Referenzen: #3503
[PostgreSQL] [Fehler] ¶
Der Modifikator
Comparator.astextruft nicht mehr implizitColumnElement.cast()auf, da PG's JSON/JSONB-Typen gegenseitiges Casing zwischeneinander erlauben. Code, derColumnElement.cast()bei JSON-indiziertem Zugriff verwendet, z.B.col[someindex].cast(Integer), muss geändert werden, umComparator.astextexplizit aufzurufen.Referenzen: #3503
MySQL¶
[MySQL] [Funktion] ¶
Unterstützung für "autocommit" bei MySQL-Treibern hinzugefügt, über die AUTOCOMMIT-Isolationsstufe. Pull-Request von Roman Podoliaka.
Referenzen: #3332
[MySQL] [Funktion] ¶
Hinzugefügt
JSONfür MySQL 5.7. Der JSON-Typ bietet Persistenz von JSON-Werten in MySQL sowie grundlegende Operatorunterstützung für "getitem" und "getpath", wobei die FunktionJSON_EXTRACTverwendet wird, um auf einzelne Pfade in einer JSON-Struktur zu verweisen.Siehe auch
Referenzen: #3547
[MySQL] [Änderung] ¶
Der MySQL-Dialekt generiert keine zusätzliche "KEY"-Direktive mehr, wenn CREATE TABLE DDL für eine Tabelle mit InnoDB und einem zusammengesetzten Primärschlüssel mit AUTO_INCREMENT auf einer Spalte, die nicht die erste Spalte ist, generiert wird; um diese Einschränkung von InnoDB zu überwinden, wird die PRIMARY KEY-Beschränkung nun mit der AUTO_INCREMENT-Spalte an erster Stelle in der Liste der Spalten generiert.
Siehe auch
Keine implizite Generierung eines KEY mehr für zusammengesetzte Primärschlüssel mit AUTO_INCREMENT
Referenzen: #3216
SQLite¶
[SQLite] [Funktion] ¶
Der SQLite-Dialekt reflektiert nun ON UPDATE- und ON DELETE-Klauseln innerhalb von Fremdschlüsselbeschränkungen. Pull-Request von Michal Petrucha.
[SQLite] [Funktion] ¶
Der SQLite-Dialekt reflektiert nun die Namen von Primärschlüsselbeschränkungen. Pull-Request von Diana Clarke.
Referenzen: #3629
[SQLite] [Änderung] ¶
Dem SQLite-Dialekt wurde Unterstützung für die Methode
Inspector.get_schema_names()hinzugefügt, damit sie mit SQLite funktioniert; Pull-Request von Brian Van Klaveren. Auch die Unterstützung für die Erstellung von Indizes mit Schemata sowie die Reflexion von Fremdschlüsselbeschränkungen in schema-gebundenen Tabellen wurde repariert.[SQLite] [Fehler] ¶
Der Workaround für rechts verschachtelte Joins in SQLite, bei denen sie als Subqueries umgeschrieben werden, um die mangelnde Unterstützung von SQLite für diese Syntax zu umgehen, wird aufgehoben, wenn SQLite Version 3.7.16 oder neuer erkannt wird.
Referenzen: #3634
[SQLite] [Fehler] ¶
Der Workaround für die unerwartete Lieferung von Spaltennamen als
tablename.columnnamebei einigen Abfragetypen in SQLite ist nun deaktiviert, wenn SQLite Version 3.10.0 oder neuer erkannt wird.Referenzen: #3633
MSSQL¶
[MSSQL] [Funktion] ¶
Das Flag
mssql_clustered, das fürUniqueConstraint,PrimaryKeyConstraint,Indexverfügbar ist, ist nun standardmäßigNoneund kann auf False gesetzt werden, was insbesondere für einen Primärschlüssel das Schlüsselwort NONCLUSTERED rendert und so die Verwendung eines anderen Index als "clustered" ermöglicht. Pull-Request von Saulius Žemaitaitis.[MSSQL] [Funktion] ¶
Grundlegende Unterstützung für die Isolationsstufe zu den SQL Server-Dialekten hinzugefügt über die Parameter
create_engine.isolation_levelundConnection.execution_options.isolation_level.Referenzen: #3534
[MSSQL] [Änderung] ¶
Das Flag
legacy_schema_aliasing, das in Version 1.0.5 als Teil von #3424 eingeführt wurde, um die Versuche des MSSQL-Dialekts, Aliase für schema-qualifizierte Tabellen zu erstellen, zu deaktivieren, ist nun standardmäßig False; das alte Verhalten ist nun deaktiviert, es sei denn, es wird explizit aktiviert.Referenzen: #3434
[MSSQL] [Fehler] ¶
Anpassungen am mxODBC-Dialekt, um bei Bedarf das Symbol
BinaryNullin Verbindung mit dem DatentypVARBINARYzu verwenden. Pull-Request von Sheila Allen.[MSSQL] [Fehler] ¶
Problem behoben, bei dem der SQL Server-Dialekt einen Zeichenketten- oder anderen variablen Längen-Spaltentyp ohne unbegrenzte Länge reflektierte, indem er dem Längenattribut der Zeichenkette das Token
"max"zuwies. Während die explizite Verwendung des"max"-Tokens vom SQL Server-Dialekt unterstützt wird, ist es nicht Teil des normalen Vertrags der Basis-Zeichenketten-Typen, und stattdessen sollte die Länge einfach auf None belassen werden. Der Dialekt weist nun die Länge bei der Reflexion des Typs auf None zu, damit der Typ in anderen Kontexten normal funktioniert.Referenzen: #3504
Sonstiges¶
[Funktion] [Erweiterung] ¶
Die Hilfsklassen
MutableSetundMutableListwurden der Erweiterung Mutationsverfolgung hinzugefügt. Pull-Request von Jeong YunWon.Referenzen: #3297
[Fehler] [Erweiterung] ¶
Der Docstring, der für eine Hybrid-Eigenschaft oder -Methode angegeben wurde, wird nun auf Klassenebene berücksichtigt, sodass er mit Tools wie Sphinx autodoc funktioniert. Die Mechanik hierfür beinhaltet notwendigerweise ein gewisses Umschließen von Ausdrücken für Hybrid-Eigenschaften, was dazu führen kann, dass sie bei der Introspektion anders erscheinen.
Referenzen: #3653
[Fehler] [Sybase] ¶
Der nicht unterstützte Sybase-Dialekt löst nun
NotImplementedErroraus, wenn versucht wird, eine Abfrage zu kompilieren, die "offset" enthält; Sybase hat keine einfache "offset"-Funktion.Referenzen: #2278
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