1.1 Changelog

1.1.18

Veröffentlicht: 6. März 2018

postgresql

  • [postgresql] [bug] [py3k]

    Behobener Fehler bei der Anpassung von PostgreSQL COLLATE / ARRAY, die erstmals in #4006 eingeführt wurde, wobei neue Verhaltensweisen in Python 3.7 regulären Ausdrücken dazu führten, dass die Korrektur fehlschlug.

    Referenzen: #4208

mysql

  • [mysql] [bug]

    MySQL-Dialekte fragen nun explizit die Serverversion mit SELECT @@version ab, 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 2018

orm

  • [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

  • [mysql] [bug]

    Behobener Fehler, bei dem die MySQL-Operatoren "concat" und "match" kwargs nicht an die linken und rechten Ausdrücke weitergaben, was dazu führte, dass Compiler-Optionen wie "literal_binds" fehlschlugen.

    Referenzen: #4136

misc

  • [bug] [pool]

    Behobener, ziemlich ernster Fehler im Verbindungspool, bei dem eine Verbindung, die nach der Aktualisierung aufgrund eines benutzerdefinierten DisconnectionError oder 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 2017

orm

  • [orm] [bug] [ext]

    Behobener Fehler, bei dem sich der Association-Proxy versehentlich mit einem AliasedClass-Objekt verknüpfte, wenn er zuerst mit dem AliasedClass als 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 AbstractConcreteBase ist, 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 von AbstractConcreteBase hinzugefü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

  • [sqlite] [bug]

    Behobener Fehler, bei dem die Reflexion von SQLite CHECK-Constraints fehlschlug, wenn sich die referenzierte Tabelle in einem entfernten Schema befand, z. B. bei SQLite eine entfernte Datenbank, auf die mit ATTACH verwiesen wird.

    Referenzen: #4099

mssql

  • [mssql] [bug]

    Ein umfassender Bereich von "connection closed"-Ausnahmecodes wurde dem PyODBC-Dialekt für SQL Server hinzugefügt, einschließlich '08S01', '01002', '08003', '08007', '08S02', '08001', 'HYT00', 'HY010'. Zuvor wurde nur '08S01' abgedeckt.

    Referenzen: #4095

1.1.14

Veröffentlicht: 5. September 2017

orm

  • [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 2017

oracle

  • [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 .UNICODE aus 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 2017

orm

  • [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

  • [tests] [bug] [py3k]

    Behebung eines Problems in den Test-Fixtures, das mit einer Änderung an Kontextmanagern in Python 3.6.2 inkompatibel war.

    Diese Änderung wurde auch **zurückportiert** zu: 1.0.18

    Referenzen: #4034

1.1.11

Veröffentlicht: Montag, 19. Juni 2017

orm

  • [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

  • [sql] [bug]

    Behobener `AttributeError`, der im `WithinGroup`-Konstrukt während einer Iteration der Struktur auftrat.

    Referenzen: #4012

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 2017

orm

  • [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 ArgumentError wird nun ausgelöst, wenn ein ForeignKeyConstraint-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

  • [oracle] [bug]

    Behob einen Fehler im cx_Oracle-Dialekt, bei dem die Versionszeichenfolge für cx_Oracle Version 6.0b1 aufgrund des „b“-Zeichens nicht geparst werden konnte. Die Versionszeichenfolge wird nun per Regulärem Ausdruck statt durch einfaches Splitten geparst.

    Referenzen: #3975

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 2017

sql

  • [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 Variant zur Berücksichtigung der Regeln der rechten Seite des zugrunde liegenden Typs dazu führten, dass der Variant-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 ResultProxy wurde geändert, um den „autoclose“-Schritt bedingungslos zu verzögern, bis die Connection das 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 TypeDecorator einen Attributfehler verursachte, wenn die Zuordnung auch eine column_property enthielt.

    Referenzen: #3956

1.1.8

Veröffentlicht: 31. März 2017

postgresql

  • [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 Methode Mutable.as_mutable() einen Typ nicht verfolgte, der mit TypeEngine.copy() kopiert worden war. Dies wurde in 1.1 im Vergleich zu 1.0 zu einer Regression, da die Klasse TypeDecorator nun eine Unterklasse von SchemaEventTarget ist, was unter anderem der übergeordneten Column anzeigt, dass der Typ beim Kopiervorgang der Column kopiert 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 Methode Result.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 2017

orm

  • [orm] [feature]

    Ein aliased()-Konstrukt kann nun an die Methode Query.select_entity_from() übergeben werden. Entitäten werden aus dem von dem aliased()-Konstrukt repräsentierten wählbaren Element gezogen. Dies ermöglicht die Verwendung spezieller Optionen für aliased() wie z. B. aliased.adapt_on_names in Verbindung mit Query.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 Connection selbst 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 Variant und SchemaType hinzugefügt, um sie miteinander kompatibel zu machen. Das heißt, ein Variant kann gegen einen Typ wie Enum erstellt 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 Connection eine 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 die Connection, 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 SchemaItem und SchemaType, 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 2017

orm

  • [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 von AliasedClass-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. ein FetchedValue-Objekt, um einen generischen ausgelösten Standardwert anzuzeigen, oder eine text()-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 wie Table.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

  • [mssql] [bug]

    Eine Versionsprüfung wurde zur Funktion „get_isolation_level“ hinzugefügt, die beim ersten Verbindungsaufbau aufgerufen wird, damit sie für SQL Server Version 2000 übersprungen wird, da die notwendige Systemansicht vor SQL Server 2005 nicht verfügbar ist.

    Referenzen: #3898

misc

  • [feature] [ext]

    Die Methoden Result.scalar() und Result.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 2017

orm

  • [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_autoflush stellt 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 Query emittiert 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 gegen Query aufgerufen wird, genauso wie bei Query.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 mit MetaData.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 der MetaData.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 Funktionen any_ und all_.

    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ür TLEngine verhält sich nun wie das von Engine, 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 von TypeDecorator geerbt wurde, die rechte Seite in Variant selbst zwang, anstatt dessen, was der Standardtyp für Variant tun würde. Im Fall von Variant möchten wir, dass der Typ sich größtenteils wie der Basistyp verhält, sodass die Standardlogik von TypeDecorator nun ü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 TIME und TIMESTAMP unterstü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_prefix zum Index-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 2016

orm

  • [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_descriptors und 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 Connection wurde 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

  • [sql] [bug]

    Behobener Fehler, bei dem die neu hinzugefügte Warnung für Primärschlüssel bei INSERT ohne Autoincrement-Einstellung (siehe #3216) nicht korrekt ausgelöst wurde, wenn sie auf ein Kleinbuchstaben-Konstrukt table() angewendet wurde.

    Referenzen: #3842

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.

    Referenzen: #3807, #3846

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_results sowie das Dialektargument server_side_cursors=True verfü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 2016

orm

  • [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 wie Query.update() und andere fehlschlugen, wenn die Query auf 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 den Enum-Typ als Typ des gesamten Ausdrucks beibehalten würde, was zu fehlenden Lookups führte. Eine String-Verkettung gegen eine Spalte vom Typ Enum verwendet nun String als 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 von SchemaType war (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.autoincrement auf False gesetzt wird, wenn eine Primärschlüsselspalte reflektiert wird, die nicht vom Datentyp Integer ist, 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 2016

orm

  • [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 ein functools.partial oder 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 2016

mssql

  • [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

1.1.0

Veröffentlicht: 5. Oktober 2016

orm

  • [orm] [feature]

    Die neue „raise“-Lazy-Loader-Strategie wurde um eine Variante „raise_on_sql“ erweitert, die sowohl über relationship.lazy als auch über raiseload() 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 von None übergeben wird, genauso wie Query.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

    Referenzen: #3773, #3774

  • [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 Klasse ClauseElement tut. 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 ein bindparam()-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 ein Table-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_default gesendete 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 BaseException wird jetzt von den Ausnahmebehandlungsroutinen von Connection abgefangen und beinhaltet die Behandlung durch das Ereignis ConnectionEvents.handle_error(). Die Connection wird standardmäßig bei einer Systemausnahme, die keine Unterklasse von Exception ist, einschließlich KeyboardInterrupt und der Greenlet-Klasse GreenletExit, **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) == z auf 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 Index Spalten 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 2016

orm

  • [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 TypeDecorator und Variant Typen 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.14

    Diese Änderung wird auch zurückportiert auf: 1.0.14

    Referenzen: #3739

oracle

  • [oracle] [bug]

    Fehler in Select.with_for_update.of behoben, 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.baked behoben, 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 2016

sql

  • [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.

    Referenzen: #3730

  • [sql] [bug]

    Die Validierungsregeln in Enum wurden etwas zurückgenommen, um unbekannte Zeichenkettenwerte zuzulassen, es sei denn, das Flag validate_string=True wird 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.compiler vorgenommen, 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 sind ARRAY-Unterklassen ARRAY und 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

1.1.0b1

Veröffentlicht: 16. Juni 2016

orm

  • [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.

  • [orm] [feature]

    Neues Flag Session.bulk_insert_mappings.render_nulls hinzugefü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.schema wurde zur Methode AutomapBase.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_deletes hinzugefü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ür Query berücksichtigt nun die Engine, an die die Session gebunden 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 den MetaData, denen die Abbildungen zugeordnet sind, verbunden war, falls vorhanden. Wenn weder auf der Session noch auf den MetaData, 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 die Session selbst ermöglichen, z. B. pending, transient, persistent, detached. Der Zustand des Objekts innerhalb jedes Ereignisses ist ebenfalls definiert.

    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; der InstanceState.deleted-Accessor ist stattdessen für diese Objekte True, bis sie detached werden.

    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 über lazy='raise'). Diese Strategie verhält sich fast wie noload(), aber anstatt None zurückzugeben, löst sie eine InvalidRequestError aus. Pull-Request von Adrian Moennich.

    Referenzen: #3512

  • [orm] [change]

    Der Parameter Mapper.order_by ist 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.

    Referenzen: #3394

  • [orm] [change]

    Der Parameter Session.weak_identity_map ist veraltet. Siehe das neue Rezept unter Session Referencing Behavior für einen ereignisbasierten Ansatz zur Aufrechterhaltung des Strong Identity Map Verhaltens.

    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 Session platziert wird, wenn ein SAVEPOINT vor dem Rollback verschwindet, verbessert, um der Session zu 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() mit Query.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.

    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 None in Verbindung mit dem PostgreSQL JSON-Typ vorgenommen. Wenn das Flag JSON.none_as_null auf seinem Standardwert False belassen wird, wird das ORM nun korrekt den JSON-String „null“ in die Spalte einfügen, wann immer der Wert im ORM-Objekt auf den Wert None gesetzt wird oder wann immer der Wert None mit Session.bulk_insert_mappings() verwendet wird, **einschließlich** wenn die Spalte einen Standard- oder Serverstandardwert hat.

    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.

    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 an Table-Objekten in vielen Schemata verwendet, z. B. Schema pro Benutzer. Eine neue Ausführungsoption Connection.execution_options.schema_translate_map wurde 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 CreateEnginePlugin geschrieben; Details finden Sie in dieser Klasse.

    Referenzen: #3536

sql

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

MySQL

SQLite

MSSQL

  • [MSSQL] [Funktion]

    Das Flag mssql_clustered, das für UniqueConstraint, PrimaryKeyConstraint, Index verfügbar ist, ist nun standardmäßig None und 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_level und Connection.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 BinaryNull in Verbindung mit dem Datentyp VARBINARY zu 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 MutableSet und MutableList wurden 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 NotImplementedError aus, wenn versucht wird, eine Abfrage zu kompilieren, die "offset" enthält; Sybase hat keine einfache "offset"-Funktion.

    Referenzen: #2278