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.2 Changelog¶
1.2.19¶
Veröffentlicht: 15. April 2019orm¶
[orm] [bug] ¶
Behobene eine Regression in 1.2 durch die Einführung von "baked queries" für relationale Lazy-Loader, bei der ein Race Condition beim Generieren der "lazy clause" auftrat, die innerhalb eines memoisierten Attributs stattfindet. Wenn zwei Threads das memoisierte Attribut gleichzeitig initialisieren, konnte die "baked query" mit Bind-Parametern generiert werden, die dann durch den nächsten Lauf durch neue Schlüssel ersetzt wurden, was zu einer Lazy-Load-Abfrage führte, die die zugehörigen Kriterien als
Noneangab. Die Korrektur stellt sicher, dass die Parameternamen vor der Generierung der neuen Klausel und Parameterobjekte festgelegt werden, sodass die Namen jedes Mal gleich sind.Referenzen: #4507
examples¶
engine¶
[engine] [bug] ¶
Der Vergleich zweier Objekte von
URLmittels__eq__()berücksichtigte nicht die Portnummer; zwei Objekte, die sich nur durch die Portnummer unterschieden, wurden als gleich betrachtet. Die Portvergleichung wurde nun zur Methode__eq__()vonURLhinzugefügt; Objekte, die sich durch die Portnummer unterscheiden, sind nun nicht mehr gleich. Außerdem war__ne__()fürURLnicht implementiert, was zu unerwarteten Ergebnissen bei der Verwendung von!=in Python 2 führte, da es in Python 2 keine impliziten Beziehungen zwischen den Vergleichsoperatoren gibt.Referenzen: #4406
mssql¶
oracle¶
1.2.18¶
Veröffentlicht: 15. Februar 2019orm¶
[orm] [bug] ¶
Behobene eine Regression in 1.2, bei der eine Wildcard/load_only Loader-Option nicht korrekt gegen einen Loader-Pfad funktionierte, bei dem of_type() verwendet wurde, um auf eine bestimmte Unterklasse zu beschränken. Die Korrektur funktioniert bisher nur für of_type() einer einfachen Unterklasse, nicht für ein with_polymorphic-Entität, was in einem separaten Problem behandelt wird; es ist unwahrscheinlich, dass letzteres zuvor funktioniert hat.
Referenzen: #4468
[orm] [bug] ¶
Behobenes recht einfaches, aber kritisches Problem, bei dem das Ereignis
SessionEvents.pending_to_persistent()nicht nur aufgerufen wurde, wenn Objekte von "pending" zu "persistent" wechselten, sondern auch, wenn sie bereits persistent waren und nur aktualisiert wurden, was dazu führte, dass das Ereignis bei jeder Aktualisierung für alle Objekte aufgerufen wurde.Referenzen: #4489
sql¶
[sql] [bug] ¶
Behobenes Problem, bei dem der
JSON-Typ ein schreibgeschütztes AttributJSON.should_evaluate_nonehatte, was zu Fehlern bei der Verwendung der MethodeTypeEngine.evaluates_none()in Verbindung mit diesem Typ führte. Pull Request von Sanjana S.Referenzen: #4485
mysql¶
[mysql] [bug] ¶
Behobene eine zweite Regression, die durch #4344 verursacht wurde (die erste war #4361), welche das MySQL-Problem 88718 umgeht. Die verwendete Funktion zur Kleinschreibung war für Python 2 mit OSX/Windows-Konventionen nicht korrekt und löste dann eine
TypeErroraus. Eine vollständige Abdeckung wurde zu dieser Logik hinzugefügt, sodass jeder Codepfad in Mock-Manier für alle drei Schreibungskonventionen auf allen Python-Versionen durchlaufen wird. MySQL 8.0 hat inzwischen Problem 88718 behoben, sodass die Umgehungslösung nur für einen bestimmten Zeitraum von MySQL 8.0-Versionen gilt.Referenzen: #4492
sqlite¶
mssql¶
[mssql] [bug] ¶
Behobener Fehler, bei dem die SQL Server-Logik "IDENTITY_INSERT", die eine INSERT-Anweisung mit einem expliziten Wert für eine IDENTITY-Spalte zulässt, den Fall nicht erkannte, dass
Insert.values()mit einem Wörterbuch verwendet wurde, das eineColumnals Schlüssel und einen SQL-Ausdruck als Wert enthielt.Referenzen: #4499
1.2.17¶
Veröffentlicht: 25. Januar 2019orm¶
[orm] [feature] ¶
Neue Ereignishooks
QueryEvents.before_compile_update()undQueryEvents.before_compile_delete()hinzugefügt, dieQueryEvents.before_compile()im Falle der MethodenQuery.update()undQuery.delete()ergänzen.Referenzen: #4461
[orm] [bug] ¶
Behobenes Problem, bei dem die Kriterien der "single table" für eine "single table inheritance"-Entität, wenn sie in Verbindung mit einer "joined inheritance"-Hierarchie verwendet wurde, die "with polymorphic" Loading nutzt, mit denen anderer Entitäten aus derselben Hierarchie in derselben Abfrage verwechselt werden konnten. Die Anpassung der "single table criteria" wurde spezifischer für die Zielentität gemacht, um zu vermeiden, dass sie versehentlich an andere Tabellen in der Abfrage angepasst wird.
Referenzen: #4454
postgresql¶
oracle¶
[oracle] [bug] ¶
Behobene Regression in der Integer-Präzisionslogik aufgrund der Umgestaltung des cx_Oracle-Dialekts in 1.2. Wir wenden nun nicht mehr den Typ cx_Oracle.NATIVE_INT auf Ergebnisspalten an, die Integer-Werte zurückgeben (erkannt als positive Präzision mit Skala == 0), was zu Integer-Überlauf-Problemen bei Werten führt, die über die 32-Bit-Grenze hinausgehen. Stattdessen bleibt die Ausgabevariable untypisiert, sodass cx_Oracle die beste Option wählen kann.
Referenzen: #4457
1.2.16¶
Veröffentlicht: 11. Januar 2019engine¶
[engine] [bug] ¶
Behobene eine Regression, die in Version 1.2 eingeführt wurde, als eine Umgestaltung der Basisklasse
SQLAlchemyErroreine unangemessene Umwandlung einer einfachen Zeichenfolgennachricht in Unicode unter Python 2k verursachte, die vom Python-Interpreter für Zeichen außerhalb der Plattform-Kodierung (typischerweise ASCII) nicht verarbeitet wird. Die KlasseSQLAlchemyErrorübergibt nun einen Byte-String unter Py2K für__str__(), wie es bei Ausnahmeobjekten im Allgemeinen unter Py2K der Fall ist, und führt eine sichere Umwandlung nach Unicode mit UTF-8 und Backslash-Fallback für__unicode__()durch. Für Py3K ist die Nachricht typischerweise bereits Unicode, wird aber, falls nicht, wieder sicher mit UTF-8 und Backslash-Fallback für die Methode__str__()umgewandelt.Referenzen: #4429
sql¶
postgresql¶
[postgresql] [bug] ¶
Behobenes Problem, bei dem ein
ENUModer eine benutzerdefinierte Domäne in einem entfernten Schema innerhalb der Spaltenreflexion nicht erkannt wurde, wenn der Name des Enums/der Domäne oder der Name des Schemas Anführungszeichen erforderte. Ein neues Parsing-Schema parst nun vollständig angeführte oder nicht angeführte Tokens, einschließlich Unterstützung für SQL-escapte Anführungszeichen.Referenzen: #4416
[postgresql] [bug] ¶
Behobenes Problem, bei dem mehrere
ENUM-Objekte, auf die von demselbenMetaData-Objekt verwiesen wird, nicht erstellt werden konnten, wenn mehrere Objekte denselben Namen unter verschiedenen Schemanamen hatten. Die interne Memoisation, die das PostgreSQL-Dialekt verwendet, um zu verfolgen, ob es ein bestimmtesENUMwährend einer DDL-Erstellungssequenz in der Datenbank erstellt hat, berücksichtigt nun den Schemanamen.
sqlite¶
[sqlite] [bug] ¶
Die Reflexion eines Index, der auf SQL-Ausdrücken basiert, wird nun mit einer Warnung übersprungen, ähnlich wie beim Postgresql-Dialekt, wo wir derzeit keine Indizes unterstützen, die SQL-Ausdrücke enthalten. Zuvor wurde ein Index mit Spalten von None erzeugt, was Werkzeuge wie Alembic beeinträchtigt hätte.
Referenzen: #4431
misc¶
1.2.15¶
Veröffentlicht: 11. Dezember 2018orm¶
[orm] [bug] ¶
Behobener Fehler, bei dem die ORM-Annotationen für "primaryjoin"/"secondaryjoin" einer Relation falsch sein konnten, wenn das Muster
ForeignKey(SomeClass.id)in den deklarativen Mappings verwendet wurde. Dieses Muster führte unerwünschte Annotationen in die Join-Bedingungen ein, was Aliasing-Operationen inQuerybrechen konnte, die nicht die Elemente dieser Join-Bedingung betreffen sollten. Diese Annotationen werden nun im Voraus entfernt, falls vorhanden.Referenzen: #4367
[orm] [bug] ¶
In Fortsetzung eines ähnlichen Themas wie bei dem sehr aktuellen #4349 wurde ein Problem mit
Comparator.any()undComparator.has()behoben, bei denen die "secondary"-Wählbarkeit explizit Teil der FROM-Klausel in der EXISTS-Unterabfrage sein muss, um den Fall zu berücksichtigen, dass diese "secondary" ein Join-Objekt ist.Referenzen: #4366
[orm] [bug] ¶
Behobene Regression, die durch #4349 verursacht wurde, bei der das Hinzufügen der "secondary"-Tabelle zur FROM-Klausel für einen dynamischen Loader die Fähigkeit der
Querybeeinträchtigte, einen nachfolgenden Join zu einer anderen Entität herzustellen. Die Korrektur fügt die primäre Entität als erstes Element der FROM-Liste hinzu, daQuery.join()von dort springen möchte. Version 1.3 wird ebenfalls eine umfassendere Lösung für dieses Problem haben (#4365).Referenzen: #4363
[orm] [bug] ¶
Behobener Fehler, bei dem die Verkettung von Mapper-Optionen mittels
RelationshipProperty.of_type()in Verbindung mit einer verketteten Option, die sich nur per Zeichenkette auf einen Attributnamen bezieht, das Attribut nicht finden konnte.Referenzen: #4400
orm declarative¶
misc¶
[no_tags] ¶
Unterstützung für das Flag
write_timeouthinzugefügt, das von mysqlclient und pymysql akzeptiert wird und in der URL-Zeichenkette übergeben werden kann.Referenzen: #4381
[no_tags] ¶
Behobenes Problem, bei dem die Reflexion einer PostgreSQL-Domäne, die als Array ausgedrückt wird, nicht erkannt wurde. Pull Request von Jakub Synowiec.
1.2.14¶
Veröffentlicht: 10. November 2018orm¶
[orm] [bug] ¶
Behobener Fehler in
Session.bulk_update_mappings(), bei dem alternative gemappte Attributnamen dazu führten, dass die Primärschlüsselspalte der UPDATE-Anweisung sowohl in der SET-Klausel als auch in der WHERE-Klausel enthalten war. Dies ist zwar meist harmlos, kann aber bei SQL Server aufgrund der IDENTITY-Spalte zu einem Fehler führen. Dies ist eine Fortsetzung desselben Fehlers, der in #3849 behoben wurde, wobei die Tests nicht ausreichten, um diesen zusätzlichen Fehler zu erkennen.Referenzen: #4357
[orm] [bug] ¶
Behobenes kleines Performance-Problem, das in einigen Fällen unnötigen Overhead bei der Abfrage von Ergebnissen verursachen konnte und die Verwendung von ORM-Spalten und Entitäten betraf, die dieselben Spalten gleichzeitig innerhalb einer Abfrage enthielten. Das Problem liegt im Hash-/Gleichheits-Overhead, wenn auf die Spalte auf verschiedene Weise verwiesen wird.
Referenzen: #4347
mysql¶
[mysql] [bug] ¶
Behobene Regression, die durch #4344 in 1.2.13 verursacht wurde. Die Korrektur für das Problem der Groß-/Kleinschreibung in MySQL 8.0 bei referenzierten Spaltennamen während der Reflexion von Fremdschlüsselreferenzen wurde über die Ansicht
information_schema.columnsumgangen. Die Umgehungslösung schlug auf OSX /lower_case_table_names=2fehl, was zu nicht übereinstimmender Groß-/Kleinschreibung zwischeninformation_schema.columnsundSHOW CREATE TABLEführte. Daher wird nun in SQL-Modi, die die Groß-/Kleinschreibung ignorieren, eine fallsensitive Übereinstimmung verwendet.Referenzen: #4361
1.2.13¶
Veröffentlicht: 31. Oktober 2018orm¶
[orm] [bug] ¶
Behobener Fehler, bei dem "dynamic" Loader die "secondary"-Tabelle explizit in die FROM-Klausel der Abfrage setzen muss, um den Fall zu berücksichtigen, dass die "secondary" ein Join-Objekt ist, das sonst nicht allein aufgrund seiner Spalten in die Abfrage aufgenommen wird.
Referenzen: #4349
orm declarative¶
[orm] [declarative] [bug] ¶
Behobene Regression, die durch #4326 in Version 1.2.12 verursacht wurde. Die Verwendung von
declared_attrmit einer Mixin in Verbindung mitsynonym()konnte das Synonym nicht ordnungsgemäß auf eine geerbte Unterklasse abbilden.Referenzen: #4350
[orm] [declarative] [bug] ¶
Die unter Konflikte bei Spaltennamen mit use_existing_column auflösen diskutierte Technik zur Auflösung von Spaltenkonflikten ist nun für eine
Column, die auch eine Primärschlüsselspalte ist, funktionsfähig. Zuvor erfolgte eine Prüfung auf Primärschlüsselspalten, die auf einer Single-Inheritance-Unterklasse deklariert waren, bevor das Kopieren der Spalte erlaubt wurde.Referenzen: #4352
sql¶
[sql] [feature] ¶
Refaktorierung von
SQLCompiler, um eine MethodeSQLCompiler.group_by_clause()freizulegen, ähnlich wie die MethodenSQLCompiler.order_by_clause()undSQLCompiler.limit_clause(), die von Dialekten überschrieben werden können, um anzupassen, wie GROUP BY gerendert wird. Pull Request von Samuel Chou.[sql] [bug] ¶
Behobener Fehler, bei dem das Flag
Enum.create_constraintim DatentypEnumnicht auf Kopien des Typs übertragen wurde, was Anwendungsfälle wie deklarative Mixins und abstrakte Basen betrifft.Referenzen: #4341
postgresql¶
[postgresql] [bug] ¶
Unterstützung für die Funktion
aggregate_order_byhinzugefügt, um mehrere ORDER BY-Elemente entgegenzunehmen; zuvor wurde nur ein einzelnes Element akzeptiert.Referenzen: #4337
mysql¶
[mysql] [bug] ¶
Das Wort
functionwurde zur Liste der reservierten Wörter für MySQL hinzugefügt, da es sich in MySQL 8.0 um ein Schlüsselwort handelt.Referenzen: #4348
[mysql] [bug] ¶
Ein Workaround für einen MySQL-Fehler #88718, der in der Serie 8.0 eingeführt wurde, wurde hinzugefügt. Dabei meldet die Reflexion einer Fremdschlüsselbeschränkung nicht die korrekte Groß- und Kleinschreibung für die referenzierte Spalte, was zu Fehlern bei der Verwendung der reflektierten Beschränkung führt, z. B. bei der Verwendung der Automap-Erweiterung. Der Workaround sendet eine zusätzliche Abfrage an die Tabellen information_schema, um den korrekten Namen unter Berücksichtigung der Groß- und Kleinschreibung abzurufen.
Referenzen: #4344
misc¶
[misc] [bug] ¶
Problem behoben, bei dem ein Teil der internen Dienstprogramme der Sprachhelfer falsche Argumente an die Python-Builtin-Funktion
__import__übergab, als Liste der zu importierenden Module. Das Problem zeigte keine Symptome innerhalb der Kernbibliothek, konnte aber Probleme bei externen Anwendungen verursachen, die die__import__-Builtin neu definieren oder anderweitig instrumentieren. Pull Request von Joe Urciuoli.[misc] [bug] [py3k] ¶
Zusätzliche Warnungen behoben, die von Python 3.7 aufgrund von Änderungen in der Organisation der Python-Pakete
collectionsundcollections.abcgeneriert wurden. Früherecollections-Warnungen wurden in Version 1.2.11 behoben. Pull Request von xtreak.Referenzen: #4339
[bug] [ext] ¶
Fehlende
.index()-Methode zu listenbasierten Zuordnungssammlungen in der Zuordnungs-Proxy-Erweiterung hinzugefügt.
1.2.12¶
Veröffentlicht: 19. September 2018orm¶
[orm] [bug] ¶
Eine Prüfung wurde innerhalb der Weakref-Bereinigung für das
InstanceState-Objekt hinzugefügt, um auf die Anwesenheit derdict-Builtin zu prüfen, um Fehlermeldungen zu reduzieren, die bei diesen Bereinigungen während des Interpreter-Shutdowns auftreten. Pull Request von Romuald Brunet.[orm] [bug] ¶
Fehler behoben, bei dem die Verwendung des
Lateral-Konstrukts in Verbindung mitQuery.join()sowieQuery.select_entity_from()keine Klauselanpassung auf der rechten Seite des Joins vornahm. „lateral“ führt den Anwendungsfall ein, dass die rechte Seite eines Joins korrelierbar ist. Zuvor wurde die Anpassung dieser Klausel nicht berücksichtigt. Beachten Sie, dass in 1.2 nur ein durchQuery.subquery()eingeführtes auswählbares Objekt aufgrund von #4304 noch nicht angepasst wird; das auswählbare Objekt muss von der Funktionselect()erzeugt werden, um die rechte Seite des „lateral“-Joins zu sein.Referenzen: #4334
[orm] [bug] ¶
1.2-Regression behoben, die durch #3472 verursacht wurde, bei der die Behandlung einer Spalte vom Typ „updated_at“ im Kontext einer Post-Update-Operation auch für eine Zeile erfolgte, die nach dem Update gelöscht werden sollte. Dies bedeutete, dass eine Spalte mit einem Wertgenerator auf der Python-Seite den jetzt gelöschten Wert anzeigte, der für das UPDATE vor dem DELETE ausgegeben wurde (was nicht das bisherige Verhalten war), und dass ein SQL-generierter Wertgenerator das Attribut ablaufen ließ, was bedeutete, dass der vorherige Wert nicht erreichbar war, da die Zeile gelöscht und das Objekt von der Sitzung getrennt wurde. Die als Teil von #3472 hinzugefügte „postfetch“-Logik wird nun vollständig für ein Objekt übersprungen, das letztendlich gelöscht werden soll.
Referenzen: #4327
orm declarative¶
[orm] [declarative] [bug] ¶
Fehler behoben, bei dem der deklarative Scan nach Attributen den von einem Hybridattribut auf Klassenebene gelieferten Ausdrucksproxy und nicht das Hybridattribut selbst empfing, wenn der Deskriptor über den
@declared_attr-Callable einer Unterklasse einer bereits gemappten Klasse empfangen wurde. Dies führte dazu, dass ein Attribut, das sich selbst nicht als Hybrid meldete, wenn es inMapper.all_orm_descriptorsangezeigt wurde.Referenzen: #4326
postgresql¶
[postgresql] [bug] ¶
Fehler im PostgreSQL-Dialekt behoben, bei dem Compiler-Schlüsselwortargumente wie
literal_binds=Truenicht an einen DISTINCT ON-Ausdruck weitergegeben wurden.Referenzen: #4325
[postgresql] [bug] ¶
Die Funktion
array_agg(), die eine leicht modifizierte Version der üblichenarray_agg()-Funktion ist, wurde behoben, so dass sie auch ein eingehendes „type“-Argument akzeptiert, ohne es in ARRAY zu zwingen, im Wesentlichen dasselbe, was für die generische Funktion in 1.1 in #4107 behoben wurde.Referenzen: #4324
[postgresql] [bug] ¶
Fehler bei der Reflexion von PostgreSQL ENUM behoben, bei dem ein Groß- und Kleinschreibung beachtender, Anführungszeichen enthaltender Name von der Abfrage mit Anführungszeichen gemeldet wurde, was bei der Tabellenreflexion nicht mit einer Zielspalte übereinstimmte, da die Anführungszeichen entfernt werden mussten.
Referenzen: #4323
oracle¶
[oracle] [bug] ¶
Problem für cx_Oracle 7.0 behoben, bei dem das Verhalten von Oracle param.getvalue() nun eine Liste und keinen einzelnen Skalarwert zurückgibt, was die Autoincrement-Logik in Core und ORM unterbricht. Das Kompatibilitätsflag dml_ret_array_val wird für cx_Oracle 6.3 und 6.4 verwendet, um ein kompatibles Verhalten mit 7.0 und neuer zu gewährleisten. Für cx_Oracle 6.2.1 und früher greift eine Versionsnummernprüfung auf die alte Logik zurück.
Referenzen: #4335
misc¶
[bug] [ext] ¶
Problem behoben, bei dem
BakedQuerynicht die spezifische Abfrageklasse enthielt, die von derSessionals Teil des Cache-Schlüssels verwendet wurde, was zu Inkompatibilitäten bei der Verwendung benutzerdefinierter Abfrageklassen führte, insbesondere derShardedQuery, die einige unterschiedliche Argumentsignaturen hat.Referenzen: #4328
1.2.11¶
Veröffentlicht: 20. August 2018orm declarative¶
[orm] [declarative] [bug] ¶
Problem in einem zuvor nicht getesteten Anwendungsfall behoben, der es einer deklarativ abgebildeten Klasse ermöglicht, von einer klassisch abgebildeten Klasse außerhalb der deklarativen Basis zu erben, einschließlich der Berücksichtigung von nicht abgebildeten Zwischenklassen. Eine nicht abgebildete Zwischenklasse kann
__abstract__angeben, was nun korrekt interpretiert wird, oder die Zwischenklasse kann unmarkiert bleiben, und die klassisch abgebildete Basisklasse wird unabhängig davon in der Hierarchie erkannt. Um bestehende Szenarien zu antizipieren, die klassische Abbildungen in bestehende deklarative Hierarchien einmischen könnten, wird nun ein Fehler ausgelöst, wenn für eine bestimmte Klasse mehrere abgebildete Basen erkannt werden.Referenzen: #4321
sql¶
[sql] [bug] ¶
Problem behoben, der eng mit #3639 zusammenhängt, bei dem ein Ausdruck, der in einem booleschen Kontext auf einem nicht nativen booleschen Backend gerendert wurde, mit 1/0 verglichen wurde, obwohl es sich bereits um einen implizit booleschen Ausdruck handelte, wenn
ColumnElement.self_group()verwendet wurde. Dies wirkt sich zwar nicht auf die benutzerfreundlichen Backends (MySQL, SQLite) aus, wurde aber von Oracle (und möglicherweise SQL Server) nicht behandelt. Ob ein Ausdruck auf einer Datenbank implizit boolesch ist, wird nun vorab als zusätzliche Prüfung ermittelt, um den Integer-Vergleich bei der Kompilierung der Anweisung nicht zu generieren.Referenzen: #4320
[sql] [bug] ¶
Fehlende Fensterfunktionsparameter
WithinGroup.over.range_undWithinGroup.over.rowszu den MethodenWithinGroup.over()undFunctionFilter.over()hinzugefügt, entsprechend der Range/Rows-Funktion, die zur „over“-Methode von SQL-Funktionen in Version 1.1 unter #3049 hinzugefügt wurde.Referenzen: #4322
[sql] [bug] ¶
Fehler behoben, bei dem die Mehrstabellenunterstützung für UPDATE- und DELETE-Anweisungen die zusätzlichen FROM-Elemente nicht als Ziele für die Korrelation berücksichtigte, wenn ein korrelierter SELECT ebenfalls mit der Anweisung kombiniert wurde. Diese Änderung beinhaltet nun, dass eine SELECT-Anweisung in der WHERE-Klausel für eine solche Anweisung versucht, sich automatisch auf diese zusätzlichen Tabellen im übergeordneten UPDATE/DELETE zu beziehen, oder bedingungslos korreliert, wenn
Select.correlate()verwendet wird. Beachten Sie, dass die automatische Korrelation einen Fehler auslöst, wenn die SELECT-Anweisung keine FROM-Klauseln zur Folge hat, was nun auftreten kann, wenn das übergeordnete UPDATE/DELETE dieselben Tabellen in seinem zusätzlichen Satz von Tabellen angibt; geben SieSelect.correlate()explizit an, um dies zu beheben.Referenzen: #4313
oracle¶
misc¶
[bug] [py3k] ¶
Unter Python 3.3 und höher wurde „collections“ aus „collections.abc“ importiert, um die Kompatibilität mit Python 3.8 zu gewährleisten. Pull Request von Nathaniel Knight.
[no_tags] ¶
Problem behoben, bei dem der „schema“-Name für eine SQLite-Datenbank bei der Tabellenreflexion den Schemanamen nicht korrekt in Anführungszeichen setzte. Pull Request von Phillip Cloud.
1.2.10¶
Veröffentlicht: 13. Juli 2018orm¶
[orm] [bug] ¶
Problem mit dem
Bundle-Konstrukt behoben, bei dem die Platzierung zweier Spalten mit demselben Namen dedupliziert wurde, wenn dieBundleals Teil der gerenderten SQL verwendet wurde, z. B. im ORDER BY oder GROUP BY der Anweisung.Referenzen: #4295
[orm] [bug] ¶
Regression in 1.2.9 aufgrund von #4287 behoben, bei der die Verwendung einer
Load-Option in Verbindung mit einem String-Wildcard zu einem TypeError führte.Referenzen: #4298
sql¶
[sql] [bug] ¶
Fehler behoben, bei dem eine
Sequenceexplizit vor jederTable, die auf sie verweist, gelöscht wurde. Dies schlägt fehl, wenn die Sequenz auch in einem serverseitigen Standardwert für diese Tabelle verwendet wird, wennMetaData.drop_all()verwendet wird. Der Schritt, der Sequenzen verarbeitet, die über nicht-serverseitige Spaltendefault-Funktionen gelöscht werden sollen, wird nun aufgerufen, nachdem die Tabelle selbst gelöscht wurde.Referenzen: #4300
1.2.9¶
Veröffentlicht: 29. Juni 2018orm¶
[orm] [bug] ¶
Problem behoben, bei dem die Verkettung mehrerer Join-Elemente innerhalb von
Query.join()möglicherweise nicht korrekt an die vorherige linke Seite angepasst wurde, wenn verkettete Vererbungsklassen, die dieselbe Basisklasse teilen.Referenzen: #3505
[orm] [bug] ¶
Problem bei der Cache-Schlüsselgenerierung für gebackene Abfragen behoben, was zu einem zu kurzen Cache-Schlüssel für den Fall von Eager-Loads über Unterklassen führen konnte. Dies konnte wiederum dazu führen, dass die Eagerload-Abfrage anstelle einer Nicht-Eagerload-Abfrage oder umgekehrt für einen polymorphen „selectin“-Load oder möglicherweise auch für Lazy-Loads oder Selectin-Loads zwischengespeichert wurde.
Referenzen: #4287
[orm] [bug] ¶
Fehler bei der neuen polymorphen Selectin-Ladung behoben, bei der die intern verwendete BakedQuery durch die gegebenen Ladeoptionen verändert wurde, was sowohl die Unterklassenabfrage unangemessen veränderte als auch die Auswirkung auf nachfolgende Abfragen trug.
Referenzen: #4286
[orm] [bug] ¶
Regression behoben, die durch #4256 (selbst eine Korrektur einer Regression für #4228) verursacht wurde, die ein undokumentiertes Verhalten unterbrach, das eine nicht-sequenzielle Entität, die direkt an den
Query-Konstruktor übergeben wurde, in eine Einkomponenten-Sequenz umwandelte. Obwohl dieses Verhalten nie unterstützt oder dokumentiert wurde, wird es bereits verwendet und wurde daher als Vertragsverhalten zuQueryhinzugefügt.Referenzen: #4269
[orm] [bug] ¶
Problem behoben, das sowohl eine Performance-Regression in 1.2 als auch ein falsches Ergebnis bezüglich des „baked“ Lazy-Loaders betraf und die Generierung von Cache-Schlüsseln aus den ursprünglichen Loader-Optionen des
Query-Objekts beinhaltete. Wenn die Loader-Optionen in einem „verzweigten“ Stil mit gemeinsamen Basiselementen für mehrere Optionen aufgebaut wurden, wurden dieselben Optionen wiederholt in den Cache-Schlüssel gerendert, was sowohl ein Performance-Problem verursachte als auch einen falschen Cache-Schlüssel generierte. Dies ist behoben, zusammen mit einer Performance-Verbesserung, wenn solche „verzweigten“ Optionen überQuery.options()angewendet werden, um zu verhindern, dass dieselben Options-Objekte wiederholt angewendet werden.Referenzen: #4270
sql¶
[sql] [bug] ¶
Regression in 1.2 behoben, die durch #4147 verursacht wurde, bei der eine
Table, deren indizierte Spalten mit neuen Spalten neu definiert wurden (wie es bei der Überschreibung von Spalten während der Reflexion oder bei der Verwendung vonTable.extend_existinggeschieht), sodass die MethodeTable.tometadata()beim Versuch, diese Indizes zu kopieren, fehlschlug, da sie sich noch auf die ersetzte Spalte bezogen. Die Kopierlogik berücksichtigt nun diese Bedingung.Referenzen: #4279
mysql¶
[mysql] [bug] ¶
Prozentzeichen-Verdoppelung im mysql-connector-python-Dialekt behoben, der keine Entfernung von Prozentzeichen erfordert. Darüber hinaus ist der mysql-connector-python-Treiber inkonsistent in der Art und Weise, wie er die Spaltennamen in cursor.description übergibt, daher wurde ein Workaround-Decoder hinzugefügt, um diese zufälligen Bytes-Werte bedingt nur dann in Unicode zu dekodieren, wenn nötig. Die Testunterstützung für mysql-connector-python wurde ebenfalls verbessert. Es ist jedoch anzumerken, dass dieser Treiber immer noch Probleme mit Unicode hat, die bisher ungelöst sind.
[mysql] [bug] ¶
Fehler bei der Indexreflexion behoben, bei dem unter MySQL 8.0 ein Index, der ASC oder DESC in einer indizierten Spaltenspezifikation enthielt, nicht korrekt reflektiert wurde, da MySQL 8.0 die Unterstützung für die Rückgabe dieser Informationen in einer Tabellendefinitionszeichenkette einführt.
Referenzen: #4293
[mysql] [bug] ¶
Fehler im MySQLdb-Dialekt und Varianten wie PyMySQL behoben, bei dem eine zusätzliche Prüfung auf „unicode returns“ bei der Verbindung explizit die Verwendung der „utf8“-Zeichenkodierung erzwingt, was in MySQL 8.0 eine Warnung ausgibt, dass utf8mb4 verwendet werden sollte. Dies wurde nun durch ein utf8mb4-Äquivalent ersetzt. Die Dokumentation wurde auch für den MySQL-Dialekt aktualisiert, um utf8mb4 in allen Beispielen anzugeben. Zusätzliche Änderungen wurden an der Testsuite vorgenommen, um utf8mb3-Zeichenkodierungen und -Datenbanken zu verwenden (es scheint Probleme mit Kollisionen in einigen Randfällen mit utf8mb4 zu geben) und um Standardänderungen an der Konfiguration von MySQL 8.0 zu unterstützen, wie z. B. explicit_defaults_for_timestamp sowie neue Fehler für ungültige MyISAM-Indizes.
Referenzen: #4283
[mysql] [bug] ¶
Der
Update-Konstrukt berücksichtigt nun einJoin-Objekt, wie es von MySQL für UPDATE..FROM unterstützt wird. Da das Konstrukt bereits ein Aliasobjekt für einen ähnlichen Zweck akzeptierte, war die Funktion von UPDATE gegen eine Nicht-Tabelle bereits impliziert, sodass sie nun hinzugefügt wurde.Referenzen: #3645
sqlite¶
[sqlite] [bug] ¶
Problem in der Testsuite behoben, bei dem SQLite 3.24 ein neues reserviertes Wort hinzugefügt hat, das mit einer Verwendung in TypeReflectionTest kollidierte. Pull Request von Nils Philippsen.
mssql¶
[mssql] [bug] ¶
Fehler bei der MSSQL-Reflexion behoben, bei dem, wenn zwei Tabellen mit demselben Namen in verschiedenen Schemata Primärschlüssel mit demselben Namen hatten, Fremdschlüssel, die auf eine der Tabellen verwiesen, ihre Spalten verdoppelten, was zu Fehlern führte. Pull Request von Sean Dunn.
Referenzen: #4288
[mssql] [bug] [py3k] ¶
Problem im SQL Server-Dialekt unter Python 3 behoben, bei dem beim Ausführen auf einer nicht standardmäßigen SQL Server-Datenbank, die weder die Ansichten „sys.dm_exec_sessions“ noch „sys.dm_pdw_nodes_exec_sessions“ enthielt, was zu einem Fehler beim Abrufen des Isolationslevels führte, der Fehler aufgrund eines UnboundLocalError ausgelöst wurde.
Referenzen: #4273
oracle¶
[oracle] [feature] ¶
Ein neues Ereignis wurde hinzugefügt, das derzeit nur vom cx_Oracle-Dialekt verwendet wird:
DialectEvents.setiputsizes(). Das Ereignis übergibt ein Wörterbuch vonBindParameter-Objekten an DBAPI-spezifische Objekttypen, die nach der Konvertierung in Parameternamen an die Methodecursor.setinputsizes()von cx_Oracle übergeben werden. Dies ermöglicht sowohl die Sichtbarkeit des setinputsizes-Prozesses als auch die Möglichkeit, das Verhalten der an diese Methode übergebenen Datentypen zu ändern.Siehe auch
Feingranulare Kontrolle über die Performance der cx_Oracle-Datenbindung mit setinputsizes
Referenzen: #4290
[oracle] [bug] [mysql] ¶
INSERT FROM SELECT mit CTEs für die Oracle- und MySQL-Dialekte behoben, bei denen die CTE über der gesamten Anweisung platziert wurde, wie es bei anderen Datenbanken üblich ist. Oracle und MariaDB 10.2 möchten die CTE jedoch unter dem „INSERT“-Segment haben. Beachten Sie, dass die Oracle- und MySQL-Dialekte noch nicht funktionieren, wenn eine CTE auf eine Unterabfrage innerhalb einer UPDATE- oder DELETE-Anweisung angewendet wird, da die CTE immer noch oben und nicht innerhalb der Unterabfrage angewendet wird.
Referenzen: #4275
misc¶
[feature] [ext] ¶
Neues Attribut
Query.lazy_loaded_fromhinzugefügt, das mit einemInstanceStategefüllt wird, der dieseQueryzum Lazy-Laden einer Beziehung verwendet. Der Grund dafür ist, dass es als Hinweis für die Horizontal-Sharding-Funktion dient, so dass die Identität des Zustands als Standardidentität für die Abfrage innerhalb von id_chooser() verwendet werden kann.Referenzen: #4243
[bug] [py3k] ¶
Die Verwendung von inspect.formatargspec() wurde durch eine eigenständige Version ersetzt, die aus der Python-Standardbibliothek kopiert wurde, da inspect.formatargspec() veraltet ist und ab Python 3.7.0 eine Warnung ausgibt.
Referenzen: #4291
1.2.8¶
Veröffentlicht: 28. Mai 2018orm¶
[orm] [bug] ¶
Regression in 1.2.7, verursacht durch #4228 (die selbst eine Regression auf 1.2-Ebene behob), wurde behoben. Dabei wurde angenommen, dass der an eine
Sessionübergebene Aufrufquery_clseine Unterklasse vonQuerymit Klassenmethodenverfügbarkeit ist, anstatt ein beliebiger Callable. Insbesondere das Dogpile-Caching-Beispiel illustriertquery_clsals Funktion und nicht alsQuery-Unterklasse.Referenzen: #4256
[orm] [bug] ¶
Ein langjähriger Fehler, der in Version 1.0 auftrat, wurde behoben. Dieser verhinderte die Verwendung eines benutzerdefinierten
MapperOption, das die _params einesQuery-Objekts für einen Lazy Load ändert, da der Lazy Loader diese Parameter selbst überschreiben würde. Dies gilt für das „temporal range“-Beispiel auf der Wiki. Beachten Sie jedoch, dass die MethodeQuery.populate_existing()nun erforderlich ist, um die Mapper-Optionen für ein Objekt, das bereits in der Identity Map geladen wurde, neu zu schreiben.Als Teil dieser Änderung bewirkt eine benutzerdefinierte
MapperOptionnun, dass Lazy-Loader, die sich auf das Zielobjekt beziehen, standardmäßig eine nicht-gebackene Abfrage verwenden, es sei denn, die MethodeMapperOption._generate_cache_key()wird implementiert. Insbesondere behebt dies eine Regression, die bei der Verwendung des „erweiterten“ Beispiels von dogpile.cache auftrat, welches keine gecachten Ergebnisse zurückgab und stattdessen SQL ausgab, aufgrund einer Inkompatibilität mit dem gebackenen Query-Loader; mit der Änderung deaktiviert dieRelationshipCacheOption, die seit vielen Releases im dogpile-Beispiel enthalten ist, die „gebackene“ Abfrage gänzlich. Beachten Sie, dass das dogpile-Beispiel ebenfalls modernisiert wurde, um beide Probleme im Rahmen von Ticket #4258 zu vermeiden.Referenzen: #4128
[orm] [bug] ¶
Behobener Fehler, bei dem die neue Methode
Result.with_post_criteria()nicht korrekt mit einem Subquery-Eager-Loader interagierte, sodass die „Post-Kriterien“ nicht auf eingebettete Subquery-Eager-Loader angewendet wurden. Dies steht im Zusammenhang mit #4128, da die Post-Kriterien-Funktion nun vom Lazy-Loader verwendet wird.[orm] [bug] ¶
Das dogpile.caching-Beispiel wurde aktualisiert, um neue Strukturen aufzunehmen, die dem „gebackenen“ Abfragesystem Rechnung tragen, das standardmäßig in Lazy-Loadern und einigen Eager-Relationship-Loadern verwendet wird. Die Beispiele „relationship_caching“ und „advanced“ von dogpile.caching waren aufgrund von #4256 ebenfalls fehlerhaft. Das Problem wird auch durch die Behebung in #4128 umgangen.
Referenzen: #4258
engine¶
[engine] [bug] ¶
Behobenes Problem mit dem Connection Pool, bei dem eine Trennungsfehlermeldung während der „Reset on Return“-Sequenz des Connection Pools in Verbindung mit einer expliziten Transaktion, die gegen das umschließende
Connection-Objekt geöffnet wurde (z. B. durch Aufruf vonSession.close()ohne Rollback oder Commit, oder durch Aufruf vonConnection.close(), ohne zuerst eine mitConnection.begin()deklarierte Transaktion zu schließen), zu einem doppelten Check-in führte, was dann zu gleichzeitigen Check-outs derselben Verbindung führen konnte. Die Bedingung des doppelten Check-ins wird nun durch eine Assertion verhindert und das spezifische Szenario des doppelten Check-ins wurde behoben.Referenzen: #4252
[engine] [bug] ¶
Behobenes Problem mit Referenzlecks, bei dem die Werte des Parameterwörterbuchs, das bei der Ausführung einer Anweisung verwendet wird, durch den „Compiled Cache“ referenziert blieben, infolge der Speicherung der vom Schlüssel-View für Python 3 Dictionary Keys() verwendeten Ansicht. Pull-Request von Olivier Grisel.
sql¶
[sql] [bug] ¶
Behobenes Problem, bei dem die Fehlermeldung „ambiguous literal“ (mehrdeutiges Literal), die beim Interpretieren von Literalwerten als SQL-Ausdruckswerte verwendet wird, auf einen Tupelwert stieß und die Nachricht nicht korrekt formatieren konnte. Pull-Request von Miguel Ventura.
mssql¶
[mssql] [bug] ¶
Behobene Regression in 1.2, verursacht durch #4061, bei der der SQL Server „BIT“-Typ als „natives Boolean“ betrachtet wurde. Ziel war es, die Erstellung einer CHECK-Constraint für die Spalte zu vermeiden. Das größere Problem ist jedoch, dass der BIT-Wert nicht wie eine reine Wahr/Falsch-Konstante funktioniert und nicht als eigenständiger Ausdruck interpretiert werden kann, z. B. „WHERE <column>“. Das SQL Server-Dialekt ist nun wieder nicht-nativ-boolean, aber mit einer zusätzlichen Flagge, die die Erstellung der CHECK-Constraint weiterhin vermeidet.
Referenzen: #4250
oracle¶
[oracle] [bug] ¶
Die Oracle BINARY_FLOAT- und BINARY_DOUBLE-Datentypen nehmen nun an cx_Oracle.setinputsizes() teil und übergeben NATIVE_FLOAT, um den NaN-Wert zu unterstützen. Zusätzlich erben
BINARY_FLOAT,BINARY_DOUBLEundDOUBLE_PRECISIONnun vonFloat, da es sich hierbei um Gleitkomma-Datentypen und nicht um Dezimalzahlen handelt. Diese Datentypen haben bereits dieFloat.asdecimal-Flagge standardmäßig auf False gesetzt, wie es auch beiFloatder Fall ist.Referenzen: #4264
[oracle] [bug] ¶
Reflexionsfähigkeiten wurden für die Datentypen
BINARY_FLOATundBINARY_DOUBLEhinzugefügt.[oracle] [bug] ¶
Das Oracle-Dialekt wurde geändert, sodass bei Verwendung eines
Integer-Typs cx_Oracle.NUMERIC für setinputsizes() eingestellt wird. In SQLAlchemy 1.1 und früher wurde cx_Oracle.NUMERIC bedingungslos für alle numerischen Typen übergeben. In 1.2 wurde dies entfernt, um eine bessere numerische Genauigkeit zu ermöglichen. Für Ganzzahlen schlagen jedoch einige Datenbank-/Client-Konfigurationen fehl, boolesche Werte True/False in Ganzzahlen zu konvertieren, was bei der Verwendung von SQLAlchemy 1.2 zu regressiven Verhaltensweisen führt. Insgesamt scheint die setinputsizes()-Logik in Zukunft mehr Flexibilität zu benötigen, dies ist ein Anfang dafür.Referenzen: #4259
tests¶
misc¶
[bug] [ext] ¶
Die horizontale Sharding-Erweiterung nutzt nun das Identitätstoken, das ORM-Identitätsschlüsseln hinzugefügt wurde, wie in #4137 beschrieben, wenn eine Objektaktualisierung, ein spaltenbasierter verzögerter Ladevorgang oder eine Entwertungsoperation stattfindet. Da wir den „Shard“ kennen, von dem das Objekt stammt, nutzen wir diesen Wert bei der Aktualisierung und vermeiden so Abfragen an andere Shards, die nicht mit der Identität dieses Objekts übereinstimmen.
Referenzen: #4247
[bug] [ext] ¶
Behobene Race-Condition, die auftreten konnte, wenn
AutomapBase.prepare()im Kontext von Multithreading gegen andere Threads verwendet wurde, dieconfigure_mappers()aufrufen könnten, infolge der Verwendung anderer Mapper. Die unvollständige Mapping-Arbeit von Automap ist besonders anfällig dafür, durch einenconfigure_mappers()-Schritt herangezogen zu werden, was zu Fehlern führt.Referenzen: #4266
1.2.7¶
Veröffentlicht: 20. April 2018orm¶
[orm] [bug] ¶
Behobene Regression in 1.2 im Sharded Query-Feature, bei der das neue „identity_token“-Element im Geltungsbereich einer Lazy-Load-Operation nicht korrekt berücksichtigt wurde, wenn die Identitätszuordnung nach einem Many-to-One-Element durchsucht wurde. Das neue Verhalten ermöglicht die Verwendung des „id_chooser“, um den besten Identitätsschlüssel zum Abrufen aus der Identitätszuordnung zu bestimmen. Um dies zu erreichen, wurden einige Umstrukturierungen des „identity_token“-Ansatzes von 1.2 vorgenommen, die geringfügige Änderungen an der Implementierung von
ShardedQuerymit sich bringen, was für andere Ableitungen dieser Klasse beachtet werden sollte.Referenzen: #4228
[orm] [bug] ¶
Behobenes Problem bei der Single-Inheritance-Ladung, bei dem die Verwendung einer Aliased-Entität für eine Single-Inheritance-Unterklasse in Verbindung mit der Methode
Query.select_from()dazu führte, dass die SQL mit der nicht-aliasierten Tabelle in die Abfrage eingefügt wurde, was zu einem kartesischen Produkt führte. Insbesondere beeinträchtigte dies den neuen „selectin“-Loader bei Verwendung mit einer Single-Inheritance-Unterklasse.Referenzen: #4241
sql¶
[sql] [bug] ¶
Behobenes Problem, bei dem die Kompilierung einer INSERT-Anweisung mit der Option „literal_binds“, die auch eine explizite Sequenz und „inline“-Generierung verwendet, wie bei PostgreSQL und Oracle, das zusätzliche Schlüsselwortargument nicht im Sequenzverarbeitungsroutine berücksichtigen konnte.
Referenzen: #4231
postgresql¶
[postgresql] [feature] ¶
Neuer PG-Typ
REGCLASShinzugefügt, der beim Umwandeln von Tabellennamen in OID-Werte hilft. Pull-Request von Sebastian Bank.Referenzen: #4160
[postgresql] [bug] ¶
Behobener Fehler, bei dem der spezielle „nicht gleich“-Operator für PostgreSQL-„Range“-Datentypen wie DATERANGE „IS NOT NULL“ nicht rendern konnte, wenn er mit dem Python
None-Wert verglichen wurde.Referenzen: #4229
mssql¶
oracle¶
[oracle] [bug] ¶
Der Oracle NUMBER-Datentyp wird als INTEGER reflektiert, wenn die Präzision NULL und die Skala null ist, da dies die Art und Weise ist, wie INTEGER-Werte von Oracle-Tabellen zurückgegeben werden. Pull-Request von Kent Bower.
1.2.6¶
Veröffentlicht: 30. März 2018orm¶
[orm] [bug] ¶
Behobener Fehler, bei dem die Verwendung von
Mutable.associate_with()oderMutable.as_mutable()in Verbindung mit einer Klasse, für die nicht primäre Mapper mit alternativ benannten Attributen eingerichtet sind, einen Attributfehler verursachte. Da nicht primäre Mapper nicht für die Persistenz verwendet werden, schließt die mutable Erweiterung nun nicht primäre Mapper von ihren Instrumentierungsschritten aus.Referenzen: #4215
engine¶
[engine] [bug] ¶
Behobener Fehler im Connection Pool, bei dem eine Verbindung im Pool vorhanden sein konnte, ohne dass alle ihre „Connect“-Ereignisbehandler aufgerufen wurden, wenn ein vorheriger „Connect“-Handler eine Ausnahme auslöste; beachten Sie, dass die Dialekte selbst Connect-Handler haben, die SQL ausgeben, wie z. B. diejenigen, die die Transaktionsisolation festlegen, was fehlschlagen kann, wenn die Datenbank in einem nicht verfügbaren Zustand ist, aber dennoch eine Verbindung zulässt. Die Verbindung wird nun zuerst ungültig gemacht, wenn einer der Connect-Handler fehlschlägt.
Referenzen: #4225
sql¶
[sql] [bug] ¶
Behobene Regression, die aus der vorherigen Korrektur von #4204 in Version 1.2.5 resultierte, bei der eine CTE, die auf sich selbst verweist, nachdem die Methode
CTE.alias()aufgerufen wurde, nicht korrekt auf sich selbst verwies.Referenzen: #4204
postgresql¶
[postgresql] [feature] ¶
Unterstützung für „PARTITION BY“ in PostgreSQL-Tabellendefinitionen hinzugefügt, unter Verwendung von „postgresql_partition_by“. Pull-Request von Vsevolod Solovyov.
mssql¶
[mssql] [bug] ¶
Die Versionserkennung von SQL Server für pyodbc wurde angepasst, um nur numerische Tokens zuzulassen und Nicht-Integer herauszufiltern, da das Dialekt damit numerische Tupelvergleiche durchführt. Dies ist normalerweise bei allen bekannten SQL Server / pyodbc-Treibern der Fall.
Referenzen: #4227
oracle¶
misc¶
[bug] [declarative] ¶
Eine Warnung wurde entfernt, die ausgegeben wurde, wenn
__table_args__oder__mapper_args__, benannt mit einer@declared_attr-Methode, von einem nicht-gemappten deklarativen Mixin aufgerufen wurde. Der direkte Aufruf dieser Methoden ist dokumentiert als der zu verwendende Ansatz, wenn eine dieser Methoden auf einer gemappten Klasse überschrieben wird. Die Warnung wird weiterhin für reguläre Attributnamen ausgegeben.Referenzen: #4221
1.2.5¶
Veröffentlicht: 6. März 2018orm¶
[orm] [feature] ¶
Neue Funktion
Query.only_return_tuples()hinzugefügt. Veranlasst dasQuery-Objekt, bedingungslos benannte Tupelobjekte zurückzugeben, auch wenn die Abfrage gegen eine einzelne Entität gerichtet ist. Pull-Request von Eric Atkin.[orm] [bug] ¶
Behobenes Problem bei der neuen „polymorphic selectin“-Ladung, wenn eine Auswahl von polymorphen Objekten teilweise aus einem Relationship Lazy Loader geladen werden sollte, was zu einer „leeren IN“-Bedingung beim Laden führte, die einen Fehler für die „inline“-Form von „IN“ auslöste.
Referenzen: #4199
[orm] [bug] ¶
Behobene Regression in 1.2, bei der eine Mapper-Option, die ein
AliasedClass-Objekt enthielt, wie sie typischerweise bei der Verwendung der MethodeQueryableAttribute.of_type()auftritt, nicht gepickelt werden konnte. Das Verhalten von 1.1 war, die Aliased-Klassenobjekte aus dem Pfad wegzulassen, daher wird dieses Verhalten wiederhergestellt.Referenzen: #4209
sql¶
[sql] [bug] ¶
Behobenes Problem im
:.CTE-Konstrukt, ähnlich dem von #4204, bei dem eine CTE, die aliased wurde, beim Klonen nicht korrekt kopiert wurde, wie es im ORM häufig vorkommt oder bei der Verwendung der MethodeClauseElement.params().Referenzen: #4210
[sql] [bug] ¶
Behobenes Problem beim Rendern von CTEs, bei dem eine
CTE, die auch in einAliasumgewandelt wurde, die Klausel „ctename AS aliasname“ nicht ordnungsgemäß rendert, wenn mehr als eine Referenz auf die CTE in einer FROM-Klausel vorhanden war.Referenzen: #4204
[sql] [bug] ¶
Behobenes Problem in der neuen Funktion „expanding IN parameter“, bei der die Bindungs-Parameter-Prozessoren für Werte überhaupt nicht funktionierten. Die Tests deckten diesen ziemlich grundlegenden Fall nicht ab, der auch ENUM-Werte einschloss, die nicht funktionierten.
Referenzen: #4198
postgresql¶
[postgresql] [bug] [py3k] ¶
Behobener Fehler in der PostgreSQL COLLATE / ARRAY-Anpassung, die zuerst in #4006 eingeführt wurde, bei der neue Verhaltensweisen in Python 3.7-Regulären Ausdrücken dazu führten, dass die Korrektur fehlschlug.
Diese Änderung wird auch **zurückportiert** nach: 1.1.18
Referenzen: #4208
mysql¶
[mysql] [bug] ¶
MySQL-Dialekte fragen nun explizit die Serverversion mit
SELECT @@versionab, um sicherzustellen, dass die korrekten Versionsinformationen zurückgegeben werden. Proxy-Server wie MaxScale beeinträchtigen den Wert, der an den dbapi-Wert connection.server_version übergeben wird, sodass dieser nicht mehr zuverlässig ist.Diese Änderung wird auch **zurückportiert** nach: 1.1.18
Referenzen: #4205
1.2.4¶
Veröffentlicht: 22. Februar 2018orm¶
engine¶
[engine] [bug] ¶
Behobene Regression, die in 1.2.3 durch die Korrektur von #4181 verursacht wurde, bei der die Änderungen am Ereignissystem, die
EngineundOptionEnginebetrafen, keine Ereignisentfernungen berücksichtigten, was zu einerAttributeErrorführte, wenn sie auf Klassenebene aufgerufen wurden.Referenzen: #4190
sql¶
1.2.3¶
Veröffentlicht: 16. Februar 2018orm¶
[orm] [feature] ¶
Neues Argument
set_attribute.inititatorzur Funktionset_attribute()hinzugefügt, das es ermöglicht, ein Ereignis-Token, das von einer Listener-Funktion empfangen wird, an nachfolgende Set-Ereignisse weiterzugeben.[orm] [bug] ¶
Behobenes Problem im `post_update`-Feature, bei dem ein UPDATE ausgegeben wird, wenn das übergeordnete Objekt gelöscht wurde, das abhängige Objekt jedoch nicht. Dieses Problem bestand zwar lange Zeit, führte aber seit 1.2, das nun Zeilenübereinstimmungen für `post_update` prüft, zu einem Fehler.
Diese Änderung wird auch **zurückportiert** nach: 1.1.16
Referenzen: #4187
[orm] [bug] ¶
Behobene Regression, die durch die Korrektur von Ticket #4116 in den Versionen 1.2.2 sowie 1.1.15 verursacht wurde. Dies führte zu einer Fehlkalkulation der „besitzenden Klasse“ eines
AssociationProxyals KlasseNoneTypein bestimmten deklarativen Mixin/Vererbungssituationen sowie wenn der Association Proxy von einer nicht zugeordneten Klasse aufgerufen wurde. Die Logik zur Ermittlung des Besitzers wurde durch eine detaillierte Routine ersetzt, die die vollständige Mapper-Hierarchie durchsucht, die der Klasse oder Unterklasse zugewiesen ist, um die korrekte (hoffentlich) Übereinstimmung zu ermitteln; der Besitzer wird nicht zugewiesen, wenn keine Übereinstimmung gefunden wird. Eine Ausnahme wird nun ausgelöst, wenn der Proxy auf einer nicht zugeordneten Instanz verwendet wird.Diese Änderung wird auch **zurückportiert** nach: 1.1.16
Referenzen: #4185
[orm] [bug] ¶
Behobenes Problem, bei dem das
Bundle-Objekt den primärenMapper, den es repräsentierte, nicht korrekt meldete, falls vorhanden. Eine unmittelbare Folge dieses Problems war, dass die neue Selectinload-Loader-Strategie mit der horizontalen Sharding-Erweiterung nicht funktionierte.Referenzen: #4175
[orm] [bug] ¶
Behobener Fehler bei der Zuordnung von Beton-Erbschaft, bei der benutzerdefinierte Attribute wie Hybrid-Eigenschaften, die die Namen von zugeordneten Attributen von Geschwisterklassen spiegeln, vom Mapper als nicht zugänglich auf Instanzebene überschrieben wurden. Zusätzlich wurde sichergestellt, dass benutzergebundene Deskriptoren während der Mapper-Konfigurationsphase nicht implizit auf Klassenebene aufgerufen werden.
Referenzen: #4188
[orm] [bug] ¶
Fehler behoben, bei dem der Ereignishilfscode
reconstructor()nicht erkannt wurde, wenn er auf die Methode__init__()der zugeordneten Klasse angewendet wurde.Referenzen: #4178
engine¶
[engine] [bug] ¶
Behobener Fehler, bei dem Ereignisse, die einer
Engineauf Klassenebene zugeordnet waren, bei Verwendung der MethodeEngine.execution_options()verdoppelt wurden. Zu diesem Zweck akzeptiert die halb-private KlasseOptionEnginekeine Ereignisse mehr direkt auf Klassenebene mehr und löst einen Fehler aus; die Klasse leitet nur klassenweite Ereignisse von ihrer übergeordnetenEngineweiter. Ereignisse auf Instanzenebene funktionieren weiterhin wie bisher.Referenzen: #4181
[engine] [bug] ¶
Das
URL-Objekt erlaubt nun, Abfrageschlüssel mehrmals anzugeben, wobei ihre Werte zu einer Liste zusammengefügt werden. Dies dient zur Unterstützung der unterCreateEnginePlugindokumentierten Plugin-Funktion, die besagt, dass „plugin“ mehrmals übergeben werden kann. Zusätzlich können die Plugin-Namen außerhalb der URL mit dem neuen Parametercreate_engine.pluginsancreate_engine()übergeben werden.Referenzen: #4170
sql¶
[sql] [feature] ¶
Unterstützung für
Enumhinzugefügt, um die Werte der Enumeration anstelle der Schlüssel zu speichern, wenn ein Python PEP-435-konformes Enumerationsobjekt verwendet wird. Der Benutzer übergibt eine aufrufbare Funktion, die die zu speichernden Zeichenfolgenwerte zurückgibt. Dies ermöglicht auch, dass Enumerationen mit Nicht-Zeichenfolgenwerten wertespeicherbar sind. Pull-Request von Jon Snyder.Referenzen: #3906
[sql] [bug] ¶
Fehler behoben, bei dem der
Enum-Typ Enum-„Aliase“ nicht korrekt verarbeitete, wenn mehr als ein Schlüssel auf denselben Wert verwies. Pull-Request von Daniel Knell.Referenzen: #4180
postgresql¶
[postgresql] [bug] ¶
„SSL SYSCALL error: Operation timed out“ zur Liste der Nachrichten hinzugefügt, die bei Verwendung des psycopg2-Treibers ein „disconnect“-Szenario auslösen. Pull-Request von André Cruz.
Diese Änderung wird auch **zurückportiert** nach: 1.1.16
[postgresql] [bug] ¶
„TRUNCATE“ zur Liste der Schlüsselwörter hinzugefügt, die vom PostgreSQL-Dialekt als Schlüsselwörter zum Auslösen von „autocommit“ akzeptiert werden. Pull-Request von Jacob Hayes.
Diese Änderung wird auch **zurückportiert** nach: 1.1.16
sqlite¶
[sqlite] [bug] ¶
Behobener Importfehler, der auftrat, wenn auf einer Plattform weder pysqlite2 noch sqlite3 installiert waren, sodass der sqlite3-bezogene Importfehler ausgelöst wurde und nicht der pysqlite2-Fehler, der nicht das tatsächliche Fehlerverhalten darstellt. Pull-Request von Robin.
oracle¶
[oracle] [feature] ¶
Die ON DELETE-Optionen für Fremdschlüssel sind nun Teil der Oracle-Reflexion. Oracle unterstützt ON UPDATE-Kaskadierungen nicht. Pull-Request von Miroslav Shubernetskiy.
[oracle] [bug] ¶
Behobener Fehler bei der Erkennung von cx_Oracle-Trennungen, die von pre_ping und anderen Funktionen verwendet wird, bei dem ein Fehler als DatabaseError ausgelöst werden konnte, der einen numerischen Fehlercode enthält; zuvor wurde in diesem Fall nicht auf eine Trennung geprüft.
Referenzen: #4182
tests¶
[tests] [bug] ¶
Ein in Version 1.2 hinzugefügter Test, der das Verhalten von Python 2.7 bestätigen sollte, bestätigt tatsächlich nur das Verhalten ab Python 2.7.8. Python-Fehler #8743 beeinträchtigt weiterhin den Mengenvergleich in Python 2.7.7 und früheren Versionen. Daher wird der betreffende Test mit AssociationSet nicht mehr für diese älteren Python 2.7-Versionen ausgeführt.
Referenzen: #3265
misc¶
[bug] [pool] ¶
Behobener ein ziemlich schwerwiegender Fehler im Connection-Pool, bei dem eine Verbindung, die nach einer Aktualisierung als Ergebnis eines benutzerdefinierten
DisconnectionErroroder aufgrund der mit Version 1.2 veröffentlichten Funktion „pre_ping“ erworben wurde, nicht korrekt zurückgesetzt wurde, wenn die Verbindung durch Weakref-Bereinigung an den Pool zurückgegeben wurde (z. B. das Frontend-Objekt wurde garbage collected); die Weakref würde immer noch auf die zuvor invalidierte DBAPI-Verbindung verweisen, auf der die Reset-Operation fälschlicherweise aufgerufen wurde. Dies führte zu Stack-Trace-Meldungen in den Protokollen und einer Verbindung, die ohne Zurücksetzung in den Pool eingecheckt wurde, was zu Sperrproblemen führen kann.Diese Änderung wird auch **zurückportiert** nach: 1.1.16
Referenzen: #4184
1.2.2¶
Veröffentlicht: 24. Januar 2018orm¶
mysql¶
[mysql] [bug] ¶
Weitere MySQL 8.0-Reservierte Wörter wurden dem MySQL-Dialekt für die Anführungszeichen hinzugefügt. Pull-Request von Riccardo Magliocchetti.
mssql¶
oracle¶
[oracle] [bug] ¶
Der cx_Oracle-Dialekt ruft nun setinputsizes() bedingungslos mit cx_Oracle.NCHAR auf, wenn der NVARCHAR2-Datentyp, der in SQLAlchemy sqltypes.Unicode() entspricht, verwendet wird. Laut dem Autor von cx_Oracle ermöglicht dies die korrekten Konvertierungen innerhalb des Oracle-Clients, unabhängig von der Einstellung für NLS_NCHAR_CHARACTERSET.
Referenzen: #4163
1.2.1¶
Veröffentlicht: 15. Januar 2018orm¶
[orm] [bug] ¶
Behobener Fehler, bei dem ein Objekt, das während eines Rollbacks einer verschachtelten oder Untertransaktion, die auch seine Primärschlüssel mutiert hatte, gelöscht wurde, nicht korrekt aus der Sitzung entfernt wurde, was zu nachfolgenden Problemen bei der Verwendung der Sitzung führte.
Diese Änderung wird auch **zurückportiert** nach: 1.1.16
Referenzen: #4151
[orm] [bug] ¶
Behobene Regression, bei der sich das Pickle-Format eines Load / _UnboundLoad-Objekts (z. B. loader options) änderte und
__setstate__()einen UnboundLocalError auslöste, wenn ein Objekt im alten Format empfangen wurde, obwohl versucht wurde, dies zu tun. Tests wurden nun hinzugefügt, um sicherzustellen, dass dies funktioniert.Referenzen: #4159
[orm] [bug] ¶
Behobene Regression, die durch das neue Lazyload-Caching-Schema in #3954 verursacht wurde, bei der eine Abfrage, die Loader-Optionen mit of_type verwendete, dazu führte, dass Lazyloads von nicht verwandten Pfaden mit einem TypeError fehlschlugen.
Referenzen: #4153
[orm] [bug] ¶
Behobener Fehler im neuen „selectin“-Beziehungs-Loader, bei dem der Loader beim Laden einer Sammlung von polymorphen Objekten eine nicht existierende Beziehung laden konnte, wenn nur einige der Mapper diese Beziehung enthielten, typischerweise wenn
PropComparator.of_type()verwendet wurde.Referenzen: #4156
sql¶
[sql] [bug] ¶
Behobener Fehler in
Insert.values(), bei dem die Verwendung des „Multi-Values“-Formats in Kombination mitColumn-Objekten als Schlüssel anstelle von Zeichenfolgen fehlschlug. Pull-Request von Aubrey Stark-Toller.Diese Änderung wird auch **zurückportiert** nach: 1.1.16
Referenzen: #4162
mssql¶
[mssql] [bug] ¶
Behobene Regression in 1.2, bei der die neu reparierte Anführungszeichen von Kollationsnamen in #3785 SQL Server beschädigte, der explizit keine Anführungszeichen für Kollationsnamen versteht. Ob gemischt-großgeschriebene Kollationsnamen mit Anführungszeichen versehen werden oder nicht, wird nun auf eine Dialekt-spezifische Entscheidung verschoben, damit jeder Dialekt diese Bezeichner direkt vorbereiten kann.
Referenzen: #4154
oracle¶
[oracle] [bug] ¶
Behobene Regression, bei der die Entfernung der meisten setinputsizes-Regeln aus dem cx_Oracle-Dialekt die Fähigkeit des TIMESTAMP-Datentyps beeinträchtigte, Nachkommastellen abzurufen.
Referenzen: #4157
[oracle] [bug] ¶
Behobene Regression bei Oracle-Importen, bei der ein fehlendes Komma ein undefiniertes Symbol enthielt. Pull-Request von Miroslav Shubernetskiy.
tests¶
[tests] [bug] ¶
Eine Oracle-spezifische Anforderungsregel aus der öffentlichen Testsuite wurde entfernt, die die Testsuiten von Drittanbietern beeinträchtigte.
[tests] [bug] ¶
Eine neue Ausschlussregel group_by_complex_expression wurde hinzugefügt, die Tests deaktiviert, die „GROUP BY <expr>“ verwenden, was für mindestens zwei Drittanbieter-Dialekte nicht praktikabel zu sein scheint.
misc¶
[bug] [ext] ¶
Behobene Regression im Association Proxy aufgrund von #3769 (Unterstützung für verkettete any() / has()), bei der contains() auf einen Association Proxy, der in der Form (o2m Beziehung, associationproxy(m2o Beziehung, m2o Beziehung)) verkettet war, einen Fehler bezüglich der erneuten Anwendung von contains() auf das letzte Glied der Kette auslöste.
Referenzen: #4150
1.2.0¶
Veröffentlicht: 27. Dezember 2017orm¶
[orm] [feature] ¶
Ein neues Datenfeld wurde zum Tupel des Identitätsschlüssels hinzugefügt, das von der Identitätskarte des ORM verwendet wird und als „identity_token“ bezeichnet wird. Dieses Token ist standardmäßig None, kann aber von Datenbank-Sharding-Schemata verwendet werden, um Objekte im Speicher mit demselben Primärschlüssel zu unterscheiden, die aus verschiedenen Datenbanken stammen. Die Horizontale Sharding-Erweiterung integriert dieses Token, indem sie den Shard-Identifier darauf anwendet, wodurch Primärschlüssel über horizontal geshardete Backends hinweg dupliziert werden können.
Referenzen: #4137
[orm] [bug] [ext] ¶
Behobener Fehler, bei dem der Association Proxy versehentlich eine Verbindung zu einem
AliasedClass-Objekt herstellte, wenn er zuerst mit derAliasedClassals Elternteil aufgerufen wurde, was zu Fehlern bei der nachfolgenden Verwendung führte.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4116
[orm] [bug] ¶
Behobener Fehler in der Abfrageoption
contains_eager(), bei der die Verwendung eines Pfads, derPropComparator.of_type()verwendete, um auf eine Unterklasse über mehr als eine Join-Ebene zu verweisen, ebenfalls erforderte, dass das „alias“-Argument mit derselben Unterklasse bereitgestellt wurde, um unerwünschte FROM-Klauseln zur Abfrage hinzuzufügen; zusätzlich wird die Verwendung voncontains_eager()über Unterklassen hinweg, diealiased()-Objekte von Unterklassen alsPropComparator.of_type()-Argument verwenden, ebenfalls korrekt gerendert.Referenzen: #4130
[orm] [bug] ¶
Die Methode
Query.exists()deaktiviert nun Eager Loader, wenn die Abfrage gerendert wird. Zuvor wurden Joined-Eager-Load-Joins unnötigerweise gerendert und Subquery-Eager-Load-Abfragen unnötigerweise generiert. Das neue Verhalten entspricht dem der MethodeQuery.subquery().Referenzen: #4032
orm declarative¶
[orm] [declarative] [bug] ¶
Behobener Fehler, bei dem ein Deskriptor, der eine zugeordnete Spalte oder eine Beziehung an anderer Stelle in einer Hierarchie, die auf
AbstractConcreteBasebasiert, während eines Refresh-Vorgangs referenziert wurde, was zu einem Fehler führte, da das Attribut nicht als Mapper-Eigenschaft zugeordnet war. Ein ähnliches Problem kann bei anderen Attributen wie der Spalte „type“ auftreten, die vonAbstractConcreteBasehinzugefügt wurde, wenn die Klasse „concrete=True“ in ihrem Mapper nicht enthält. Die hier durchgeführte Prüfung sollte jedoch auch dieses Szenario verhindern.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4124
engine¶
[engine] [feature] ¶
Das Attribut „password“ des
URL-Objekts kann nun jedes benutzerdefinierte oder benutzerdefinierte abgeleitete Zeichenfolgenobjekt sein, das auf die integrierte Python-Funktionstr()reagiert. Das übergebene Objekt wird als DatenmemberURL.password_originalbeibehalten und beim Lesen des AttributsURL.passwordkonsultiert, um den Zeichenfolgenwert zu erzeugen.Referenzen: #4089
sql¶
[sql] [bug] ¶
Behobener Fehler, bei dem der
__repr__vonColumnDefaultfehlschlug, wenn das Argument ein Tupel war. Pull-Request von Nicolas Caniart.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4126
[sql] [bug] ¶
Die in Version 1.2.0b2 eingeführte neue Funktion „autoescape“ für startswith(), endswith() wurde überarbeitet, um vollständig automatisch zu sein; das Escape-Zeichen ist nun standardmäßig ein Schrägstrich
"/"und wird auf Prozent, Unterstrich sowie das Escape-Zeichen selbst angewendet, für vollständig automatische Escapierung. Das Zeichen kann auch über den Parameter „escape“ geändert werden.Referenzen: #2694
[sql] [bug] ¶
Behobener Fehler, bei dem die Methode
Table.tometadata()keineIndex-Objekte ordnungsgemäß berücksichtigte, die keine einfachen Spaltenausdrücke enthielten, wie z. B. Indizes gegen einentext()-Konstrukt, Indizes, die SQL-Ausdrücke oderfuncverwendeten usw. Die Routine kopiert nun Ausdrücke vollständig in ein neuesIndex-Objekt, während tabellengebundeneColumn-Objekte durch diejenigen der Zieltabelle ersetzt werden.Referenzen: #4147
[sql] [bug] ¶
Der „visit name“ von
ColumnElementwurde von „column“ in „column_element“ geändert, sodass, wenn dieses Element als Grundlage für ein benutzerdefiniertes SQL-Element verwendet wird, nicht angenommen wird, dass es sich wie eine tabellengebundeneColumnClauseverhält, wenn es von verschiedenen SQL-Traversaldienstprogrammen verarbeitet wird, wie sie häufig vom ORM verwendet werden.Referenzen: #4142
[sql] [bug] [ext] ¶
Behobenes Problem im Datentyp
ARRAY, das im Wesentlichen dasselbe Problem wie #3832 darstellt, jedoch keine Regression ist, bei der Spaltenanfügungsereignisse aufARRAYnicht korrekt ausgelöst wurden, was Systeme beeinträchtigte, die darauf angewiesen sind. Ein wichtiger Anwendungsfall, der dadurch kaputt ging, war die Verwendung von Mixins zur Deklaration von Spalten, dieMutableList.as_mutable()verwenden.Referenzen: #4141
[sql] [bug] ¶
Behobener Fehler in der neuen Funktion „expanding bind parameter“, bei der bei Verwendung mehrerer Parameter in einer Anweisung der reguläre Ausdruck den Parameternamen nicht korrekt übereinstimmte.
Referenzen: #4140
[sql] [enhancement] ¶
„DELETE..FROM“-Syntax für PostgreSQL, MySQL, MS SQL Server (sowie im nicht unterstützten Sybase-Dialekt) implementiert, ähnlich wie „UPDATE..FROM“ funktioniert. Eine DELETE-Anweisung, die auf mehr als eine Tabelle verweist, wechselt in den „Multi-Table“-Modus und rendert die entsprechende „USING“- oder Multi-Table-„FROM“-Klausel, wie sie von der Datenbank verstanden wird. Pull-Request von Pieter Mulder.
Referenzen: #959
postgresql¶
mysql¶
[mysql] [bug] ¶
MySQL 5.7.20 gibt nun Warnungen aus für die Verwendung der Variablen @tx_isolation; eine Versionsprüfung wird nun durchgeführt und stattdessen @transaction_isolation verwendet, um diese Warnung zu vermeiden.
Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4120
[mysql] [bug] ¶
Behobene Regression aus Issue 1.2.0b3, bei der die Versionsvergleichung für „MariaDB“ bei einigen spezifischen MariaDB-Versionszeichenfolgen unter Python 3 fehlschlagen konnte.
Referenzen: #4115
mssql¶
oracle¶
misc¶
[misc] [feature] ¶
Ein neuer Abschnitt „Errors“ wurde zur Dokumentation hinzugefügt, der Hintergrundinformationen zu häufigen Fehlermeldungen liefert. Ausgewählte Ausnahmen innerhalb von SQLAlchemy enthalten in ihrer String-Ausgabe einen Link zum entsprechenden Abschnitt dieser Seite.
[enhancement] [ext] ¶
Neue Methode
Result.with_post_criteria()zum Baked Query-System hinzugefügt, die nicht-SQL-modifizierende Transformationen ermöglicht, nachdem die Abfrage aus dem Cache geholt wurde. Unter anderem kann diese Methode mitShardedQueryverwendet werden, um den Shard-Identifier zu setzen.ShardedQuerywurde ebenfalls so modifiziert, dass seine MethodeShardedQuery.get()korrekt mit der vonResultinteragiert.Referenzen: #4135
1.2.0b3¶
Veröffentlicht: 13. Oktober 2017orm¶
[orm] [bug] ¶
Behobener Fehler, bei dem die ORM-Beziehung vor widersprüchlichen Sync-Zielen warnte (z. B. zwei Beziehungen würden beide in dieselbe Spalte schreiben) für Geschwisterklassen in einer Vererbungshierarchie, bei der die beiden Beziehungen während des Schreibens tatsächlich niemals kollidieren würden.
Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4078
[orm] [bug] ¶
Behobener Fehler, bei dem eine korrelierte Auswahl für eine Single-Table-Inheritance-Entität fehlschlägt, die in der äußeren Abfrage korrekt gerendert wird, aufgrund einer Anpassung für Single-Inheritance-Diskriminatorkriterien, die die Kriterien unangemessen auf die äußere Abfrage wieder anwendet.
Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4103
[orm] [bug] ¶
Behobener Fehler in
Session.merge(), der ähnliche Linien wie #4030 verfolgt, bei dem eine interne Prüfung auf ein Zielobjekt in der Identitätskarte zu einem Fehler führen konnte, wenn es unmittelbar vor der tatsächlichen Abfrage des Objekts durch die Merge-Routine garbage collected wurde.Diese Änderung wird auch zurückportiert auf: 1.1.14
Referenzen: #4069
[orm] [bug] ¶
behob bug, wo eine
undefer_group()Option nicht erkannt wurde, wenn sie von einer Beziehung erweitert wurde, die mit joined eager loading geladen wurde. Zusätzlich, da der Bug zu übermäßiger Arbeit führte, wurden die Python-Funktionsaufrufanzahlen im ersten Schritt der Berechnung von Ergebnisspalten um 20 % verbessert, was die Verbesserungen des joined eager loading unter #3915 ergänzt.Diese Änderung wird auch zurückportiert auf: 1.1.14
Referenzen: #4048
[orm] [bug] ¶
behob bug in
Session.merge(), wo Objekte in einer Sammlung, deren Primärschlüsselattribut aufNonefür einen Schlüssel gesetzt war, der normalerweise automatisch inkrementiert, für einen Teil des internen Deduplizierungsprozesses als datenbankpersistent betrachtet wurden, was dazu führte, dass nur ein Objekt tatsächlich in die Datenbank eingefügt wurde.Diese Änderung wird auch zurückportiert auf: 1.1.14
Referenzen: #4056
[orm] [bug] ¶
Ein
InvalidRequestErrorwird ausgelöst, wenn einsynonym()auf ein Attribut angewendet wird, das keineMapperPropertyist, wie z.B. ein association proxy. Zuvor trat ein Rekursionsüberlauf auf, wenn versucht wurde, nicht vorhandene Attribute zu finden.Diese Änderung wird auch zurückportiert auf: 1.1.14
Referenzen: #4067
[orm] [bug] ¶
behob Regression, eingeführt in 1.2.0b1 durch #3934, bei der die
Sessiondie Transaktion nicht "deaktivieren" konnte, wenn ein Rollback fehlschlug (das Zielproblem ist, wenn MySQL den Überblick über einen SAVEPOINT verliert). Dies würde dazu führen, dass ein nachfolgender Aufruf vonSession.rollback()zum zweiten Mal einen Fehler auslöst, anstatt abzuschließen und dieSessionzurück in den Status ACTIVE zu bringen.Referenzen: #4050
[orm] [bug] ¶
behob Problem, bei dem die Funktion
make_transient_to_detached()alle Attribute des Zielobjekts ablaufen ließ, einschließlich "deferred" Attribute, was dazu führte, dass das Attribut beim nächsten Aktualisieren "undeferred" wurde und ein unerwartetes Laden des Attributs verursachte.Referenzen: #4084
[orm] [bug] ¶
behob bug bei dem delete-orphan Cascade, bei dem ein verbundenes Element, das zu einer Waise wird, bevor das Elternobjekt Teil einer Sitzung ist, immer noch als zum Waise werdend verfolgt wird, was dazu führt, dass es aus der Sitzung entfernt (expunged) und nicht gespült (flushed) wird.
Hinweis
Diese Korrektur wurde unbeabsichtigt während der Veröffentlichung von 1.2.0b3 zusammengeführt und **damals nicht zum Changelog hinzugefügt**. Dieser Changelog-Eintrag wurde rückwirkend mit Version 1.2.13 hinzugefügt.
Referenzen: #4040
[orm] [bug] ¶
behob bug in "selectin"-polymorphe Laden, lädt Unterklassen mittels separater IN-Abfragen, der verhinderte, dass "selectin"- und "inline"-Einstellungen in einer mehrstufigen Klassenhierarchie wie erwartet miteinander interagierten.
Referenzen: #4026
[orm] [bug] ¶
Entfernte Warnungen, die ausgegeben wurden, wenn die vom Mapper und den Loader-Strategien verwendeten LRU-Caches ihre Schwelle erreichten; der Zweck dieser Warnung war zunächst ein Schutz gegen übermäßige Cache-Schlüsselgenerierung, wurde aber im Grunde zu einer Überprüfung des Antipatterns "Erzeugen vieler Engines". Obwohl dies immer noch ein Antipattern ist, stellt die Existenz von Testsuiten, die sowohl pro Test eine Engine erstellen als auch bei allen Warnungen fehlschlagen, eine Unannehmlichkeit dar; es sollte nicht kritisch sein, dass solche Testsuiten ihre Architektur nur wegen dieser Warnung ändern (obwohl eine Engine pro Test-Suite immer besser ist).
Referenzen: #4071
[orm] [bug] ¶
behob Regression, bei der die Verwendung einer
undefer_group()Option in Verbindung mit einer lazy loaded Beziehung Option einen AttributeError verursachte, aufgrund eines Bugs in der SQL-Cache-Schlüsselgenerierung, die in 1.2 als Teil von #3954 hinzugefügt wurde.Referenzen: #4049
[orm] [bug] ¶
Die Änderung am ORM-Update/Delete-Evaluator in #3366 wurde so modifiziert, dass, wenn eine nicht zugeordnete Spaltenausdruck im Update oder Delete vorhanden ist, und der Evaluator seinen Namen mit den zugeordneten Spalten der Zielklasse abgleichen kann, eine Warnung ausgegeben wird, anstatt UnevaluatableError auszulösen. Dies ist im Wesentlichen das Verhalten vor Version 1.2 und dient der Migration von Anwendungen, die sich derzeit auf dieses Muster verlassen. Kann der gegebene Attributname jedoch nicht mit den Spalten des Mappers abgeglichen werden, wird weiterhin UnevaluatableError ausgelöst, was in #3366 behoben wurde.
Referenzen: #4073
orm deklarativ¶
[orm] [declarative] [bug] ¶
Es wird eine Warnung ausgegeben, wenn eine Unterklasse versucht, ein Attribut zu überschreiben, das auf einer Oberklasse mit
@declared_attr.cascadingdeklariert wurde, und zwar, dass das überschriebene Attribut ignoriert wird. Dieser Anwendungsfall kann nicht ohne komplexere Entwicklungsarbeiten vollständig bis zu weiteren Unterklassen unterstützt werden, daher wird der "cascading" der Konsistenz halber unabhängig von überschriebenen Attributen bis nach unten berücksichtigt.Referenzen: #4091
[orm] [declarative] [bug] ¶
Es wird eine Warnung ausgegeben, wenn das Attribut
@declared_attr.cascadingmit einem speziellen deklarativen Namen wie__tablename__verwendet wird, da dies keine Auswirkung hat.Referenzen: #4092
engine¶
[engine] [feature] ¶
Hinzugefügte Methoden
__next__()undnext()zuResultProxy, damit die eingebaute Funktionnext()direkt auf dem Objekt funktioniert.ResultProxyhatte schon lange eine__iter__()-Methode, die es bereits ermöglichte, auf die eingebaute Funktioniter()zu reagieren. Die Implementierung für__iter__()ist unverändert, da Performance-Tests gezeigt haben, dass die Iteration mittels einer__next__()-Methode mitStopIterationin Python 2.7 und 3.6 etwa 20 % langsamer ist.Referenzen: #4077
[engine] [bug] ¶
Einige Anpassungen an
PoolundConnectionvorgenommen, damit die Wiederherstellung logic nicht unter Ausnahme-Fängen fürpool.Empty,AttributeErrorausgeführt wird, da, wenn die Wiederherstellungsoperation selbst fehlschlägt, Python 3 eine irreführende Stack-Trace erstellt, die sich auf dieEmpty/AttributeErrorals Ursache bezieht, obwohl diese Ausnahme-Fänge Teil des Kontrollflusses sind.Referenzen: #4028
sql¶
[sql] [bug] ¶
behob bug, bei dem die kürzlich hinzugefügten Methoden
ColumnOperators.any_()undColumnOperators.all_()nicht als Methoden funktionierten, im Gegensatz zur Verwendung der eigenständigen Funktionenany_()undall_(). Außerdem wurden Dokumentationsbeispiele für diese relativ unintuitiven SQL-Operatoren hinzugefügt.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4093
[sql] [bug] ¶
Hinzugefügte eine neue Methode
DefaultExecutionContext.get_current_parameters(), die innerhalb eines funktionsbasierten Standardwertgenerators verwendet wird, um die aktuellen Parameter abzurufen, die an die Anweisung übergeben werden. Die neue Funktion unterscheidet sich vom AttributDefaultExecutionContext.current_parametersdarin, dass sie auch die optionale Gruppierung von Parametern für ein mehrwertiges "INSERT"-Konstrukt ermöglicht. Zuvor war es nicht möglich, die Teilmenge der für den Funktionsaufruf relevanten Parameter zu identifizieren.Referenzen: #4075
[sql] [bug] ¶
behob bug in neuer SQL-Kommentarfunktion, bei der Tabellen- und Spaltenkommentare nicht kopiert wurden, wenn
Table.tometadata()verwendet wurde.Referenzen: #4087
[sql] [bug] ¶
In Version 1.1 war der
Boolean-Typ fehlerhaft, da die boolesche Konvertierung überbool()für Backends, die "native boolean" nicht unterstützten, durchgeführt wurde, aber nicht für native boolean Backends, was bedeutete, dass der String"0"sich nun inkonsistent verhielt. Nach einer Umfrage wurde ein Konsens erreicht, dass Nicht-Boolean-Werte einen Fehler auslösen sollten, insbesondere im mehrdeutigen Fall des Strings"0"; daher wird derBoolean-Datentyp nunValueErrorauslösen, wenn ein eingehender Wert nicht im Bereich vonNone, True, False, 1, 0liegt.Referenzen: #4102
[sql] [bug] ¶
Das Verhalten von
Operators.op()wurde verfeinert, so dass in allen Fällen, wenn das FlagOperators.op.is_comparisonauf True gesetzt ist, der Rückgabetyp des resultierenden AusdrucksBooleanist, und wenn das Flag False ist, der Rückgabetyp des resultierenden Ausdrucks derselbe Typ wie der Ausdruck auf der linken Seite ist, was das typische Standardverhalten anderer Operatoren ist. Es wurde auch ein neuer ParameterOperators.op.return_typesowie eine HilfsmethodeOperators.bool_op()hinzugefügt.Referenzen: #4063
[sql] [bug] ¶
Interne Verfeinerungen der Typen
Enum,IntervalundBoolean, die nun einen gemeinsamen MixinEmulatederweitern, der einen Typ anzeigt, der eine Python-seitige Emulation eines DB-nativen Typs bietet und bei Verwendung eines unterstützenden Backends zum DB-nativen Typ wechselt. Der PostgreSQL-TypINTERVALwird beim direkten Gebrauch nun die korrekten Typumrechnungsregeln für SQL-Ausdrücke enthalten, die auch fürIntervalgelten (wie z.B. das Hinzufügen eines Datums zu einem Intervall ergibt ein Datum/Uhrzeit).Referenzen: #4088
postgresql¶
[postgresql] [feature] ¶
Hinzugefügte ein neues Flag
use_batch_modezum psycopg2-Dialekt. Dieses Flag ermöglicht die Verwendung der Erweiterungpsycopg2.extras.execute_batchvon psycopg2, wenn dieEnginecursor.executemany()aufruft. Diese Erweiterung bietet eine kritische Leistungssteigerung um mehr als eine Größenordnung beim Ausführen von INSERT-Anweisungen im Stapelbetrieb. Das Flag ist standardmäßig False, da es derzeit als experimentell gilt.Referenzen: #4109
[postgresql] [bug] ¶
Weitere Korrekturen an der Klasse
ARRAYin Verbindung mit COLLATE vorgenommen, da die in #4006 vorgenommene Korrektur keine mehrdimensionalen Arrays berücksichtigte.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4006
[postgresql] [bug] ¶
behob bug in der Funktion
array_agg, bei der die Übergabe eines Arguments, das bereits vom TypARRAYist, wie z.B. ein PostgreSQLarray-Konstrukt, zu einemValueErrorführte, da die Funktion versuchte, die Arrays zu verschachteln.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4107
[postgresql] [bug] ¶
behob bug in PostgreSQL
Insert.on_conflict_do_update(), der verhinderte, dass die INSERT-Anweisung als CTE verwendet wurde, z.B. überInsert.cte(), innerhalb einer anderen Anweisung.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4074
[postgresql] [bug] ¶
behob bug, bei dem der pg8000-Treiber fehlschlug, wenn
MetaData.reflect()mit einem Schemanamen verwendet wurde, da der Schemaname als "quoted_name"-Objekt, das eine String-Unterklasse ist, gesendet wurde, was pg8000 nicht erkennt. Der quoted_name-Typ wird beim Verbinden zur py_types-Sammlung von pg8000 hinzugefügt.Referenzen: #4041
[postgresql] [bug] ¶
UUID-Unterstützung für den pg8000-Treiber aktiviert, der native Python-UUID-Roundtrips für diesen Datentyp unterstützt. Arrays von UUIDs werden jedoch weiterhin nicht unterstützt.
Referenzen: #4016
mysql¶
[mysql] [bug] ¶
Warnung ausgegeben, wenn MariaDB 10.2.8 oder früher der Serie 10.2 erkannt wird, da es erhebliche Probleme mit CHECK-Constraints in diesen Versionen gibt, die ab 10.2.9 behoben wurden.
Beachten Sie, dass diese Changelog-Meldung NICHT mit SQLAlchemy 1.2.0b3 veröffentlicht wurde und rückwirkend hinzugefügt wurde.
Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4097
[mysql] [bug] ¶
behob Problem, bei dem CURRENT_TIMESTAMP in der MariaDB 10.2-Serie aufgrund einer Syntaxänderung nicht korrekt reflektiert wurde, wobei die Funktion nun als
current_timestamp()dargestellt wird.Diese Änderung wird auch zurückportiert auf: 1.1.15
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 TABLEvorhanden sind.Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4098
[mysql] [bug] ¶
Der Name des Attributs
.valuesdes neuen MySQL INSERT..ON DUPLICATE KEY UPDATE-Konstrukts wurde in.insertedgeändert, daInsertbereits eine Methode namensInsert.values()hat. Das Attribut.insertedrendert letztendlich die MySQL-FunktionVALUES().Referenzen: #4072
sqlite¶
mssql¶
[mssql] [feature] ¶
Hinzugefügte ein neuer Datentyp
TIMESTAMP, der sich für SQL Server korrekt wie ein Binärdatentyp verhält, anstatt wie ein Datum/Uhrzeit-Typ, da SQL Server hier vom SQL-Standard abweicht. Außerdem wurdeROWVERSIONhinzugefügt, da der "TIMESTAMP"-Typ in SQL Server zugunsten von ROWVERSION veraltet ist.Referenzen: #4086
[mssql] [feature] ¶
Unterstützung für das Isolationslevel "AUTOCOMMIT", wie es über
Connection.execution_options()festgelegt wird, für die PyODBC- und pymssql-Dialekte hinzugefügt. Dieses Isolationslevel setzt die entsprechenden DBAPI-spezifischen Flags für das zugrunde liegende Verbindungsobjekt.Referenzen: #4058
[mssql] [bug] ¶
Eine vollständige Palette von "Verbindung geschlossen"-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.
Diese Änderung wird auch zurückportiert auf: 1.1.15
Referenzen: #4095
[mssql] [bug] ¶
SQL Server unterstützt, was SQLAlchemy als "native boolean" bezeichnet, mit seinem BIT-Typ, da dieser Typ nur 0 oder 1 akzeptiert und die DBAPIs seinen Wert als True/False zurückgeben. Daher aktivieren die SQL Server-Dialekte nun die Unterstützung für "native boolean", in dem Sinne, dass kein CHECK-Constraint für einen
Boolean-Datentyp generiert wird. Der einzige Unterschied zu anderen nativen Booleans ist, dass es keine "true" / "false" Konstanten gibt, so dass hier immer noch "1" und "0" gerendert werden.Referenzen: #4061
[mssql] [bug] ¶
Der pymssql-Dialekt wurde korrigiert, sodass Prozentzeichen in SQL-Texten, wie sie in Modulo-Ausdrücken oder literalen Textwerten verwendet werden, **nicht** verdoppelt werden, was anscheinend von pymssql erwartet wird. Dies geschieht, obwohl die pymssql DBAPI den "pyformat"-Parameterstil verwendet, der selbst das Prozentzeichen als signifikant betrachtet.
Referenzen: #4057
[mssql] [bug] ¶
behob bug, bei dem der SQL Server-Dialekt Spalten aus mehreren Schemata beim Reflektieren einer selbst-referenziellen Fremdschlüssel-Constraint abrufen konnte, wenn mehrere Schemata eine Constraint mit demselben Namen gegen eine Tabelle mit demselben Namen enthielten.
Referenzen: #4060
[mssql] [bug] [orm] ¶
Eine neue Klasse von "Rowcount-Unterstützung" für Dialekte wurde hinzugefügt, die spezifisch für die Verwendung von "RETURNING" ist, was bei SQL Server wie "OUTPUT inserted" aussieht, da das PyODBC-Backend keinen Rowcount für eine UPDATE- oder DELETE-Anweisung liefern kann, wenn OUTPUT aktiv ist. Dies betrifft hauptsächlich das ORM, wenn ein Flush eine Zeile aktualisiert, die serverberechnete Werte enthält, und einen Fehler auslöst, wenn das Backend nicht den erwarteten Rowcount zurückgibt. PyODBC gibt nun an, dass es Rowcount unterstützt, außer wenn OUTPUT.inserted vorhanden ist, was vom ORM während eines Flushes berücksichtigt wird, um festzustellen, ob ein Rowcount gesucht werden soll.
Referenzen: #4062
[mssql] [bug] [orm] ¶
Das Flag "sane_rowcount" wurde für den pymssql-Dialekt aktiviert, was bedeutet, dass die DBAPI nun die korrekte Anzahl der betroffenen Zeilen einer UPDATE- oder DELETE-Anweisung meldet. Dies wirkt sich hauptsächlich auf die ORM-Versioning-Funktion aus, da diese nun die Anzahl der betroffenen Zeilen eines Ziels überprüfen kann.
[mssql] [bug] ¶
Eine Regel für die SQL Server-Index-Reflexion wurde hinzugefügt, um den sogenannten "Heap"-Index zu ignorieren, der implizit auf einer Tabelle vorhanden ist, die keinen Clustered Index angibt.
Referenzen: #4059
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
.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 wird auch zurückportiert auf: 1.1.13, 1.0.19
Referenzen: #4035
[oracle] [bug] ¶
Teilweise Unterstützung für das Persistieren und Abrufen des Oracle-Wertes „infinity“ wurde mit cx_Oracle implementiert, wobei nur Python-Float-Werte verwendet wurden, z. B.
float("inf"). Die Unterstützung für Decimal ist noch nicht durch den cx_Oracle DBAPI-Treiber erfüllt.Referenzen: #4064
[oracle] [bug] ¶
Die cx_Oracle-Dialektdaten wurden überarbeitet und modernisiert, um neue Muster zu nutzen, die in der alten 4.x-Serie von cx_Oracle nicht vorhanden waren. Dies beinhaltet, dass die Mindestversion von cx_Oracle die 5.x-Serie ist und dass cx_Oracle 6.x jetzt vollständig getestet ist. Die bedeutendste Änderung betrifft Typkonvertierungen, hauptsächlich in Bezug auf numerische / Gleitkomma- und LOB-Datentypen, wodurch die Hooks zur Typenbehandlung von cx_Oracle effektiver genutzt werden, um die Verarbeitung von Bindungsparametern und Ergebnisdaten zu vereinfachen.
[oracle] [bug] ¶
Die Zwei-Phasen-Unterstützung für cx_Oracle wurde für alle Versionen von cx_Oracle vollständig entfernt, während sie in 1.2.0b1 nur für die 6.x-Serie von cx_Oracle wirksam war. Dieses Feature funktionierte nie korrekt in irgendeiner Version von cx_Oracle und in cx_Oracle 6.x wurde die von SQLAlchemy verwendete API entfernt.
Referenzen: #3997
[oracle] [bug] ¶
Die Spaltenschlüssel in einem Ergebnisdatensatz bei Verwendung von
Insert.returning()mit dem cx_Oracle-Backend verwenden nun die korrekten Spalten-/Bezeichnungsnamen, wie bei allen anderen Dialekten. Zuvor kamen diese alsret_nnnheraus.[oracle] [bug] ¶
Mehrere Parameter für die cx_Oracle-Dialektdaten sind nun veraltet und haben keine Auswirkungen mehr:
auto_setinputsizes,exclude_setinputsizes,allow_twophase.[oracle] [bug] ¶
Behebung eines Fehlers, bei dem ein Index, der unter Oracle mit einem Ausdruck wie „column DESC“ reflektiert wurde, nicht zurückgegeben wurde, wenn die Tabelle auch keinen Primärschlüssel hatte. Dies lag an einer Logik, die versuchte, den Index zu filtern, der implizit von Oracle auf die Primärschlüsselspalten angewendet wurde.
Referenzen: #4042
[oracle] [bug] ¶
Weitere Rückschritte, verursacht durch cx_Oracle 6.0, behoben. Derzeit ist die einzige Verhaltensänderung für Benutzer, dass die Trennungserkennung nun für cx_Oracle.DatabaseError zusätzlich zu cx_Oracle.InterfaceError erkennt, da sich dieses Verhalten anscheinend geändert hat. Andere Probleme bezüglich numerischer Präzision und nicht schließbarer Verbindungen sind beim Upstream-cx_Oracle-Issue-Tracker anhängig.
Referenzen: #4045
[oracle] [bug] ¶
Fehler behoben, bei dem der „nicht-ansi“-Join-Modus von Oracle 8 den Operator
(+)nicht zu Ausdrücken hinzufügte, die einen anderen Operator als den=-Operator verwendeten. Der(+)muss auf allen Spalten stehen, die Teil der rechten Seite sind.Referenzen: #4076
1.2.0b2¶
Veröffentlicht: 24. Juli 2017orm¶
[orm] [bug] ¶
Behebung eines Fehlers aus 1.1.11, bei dem das Hinzufügen zusätzlicher Nicht-Entitäts-Spalten zu einer Abfrage, die Entitäts-Subquery-Load-Beziehungen enthielt, fehlschlug. Dies lag an einer Inspektion, die in 1.1.11 als Ergebnis von #4011 hinzugefügt wurde.
Diese Änderung wird auch zurückportiert auf: 1.1.12
Referenzen: #4033
[orm] [bug] ¶
Fehler behoben, der die JSON-NULL-Auswertungslogik betraf, die in Version 1.1 als Teil von #3514 hinzugefügt wurde. Die Logik berücksichtigte keine ORM-zugeordneten Attribute, die anders benannt waren als die zugeordnete
Column.Diese Änderung wird auch zurückportiert auf: 1.1.12
Referenzen: #4031
[orm] [bug] ¶
Es wurden
KeyError-Prüfungen zu allen Methoden innerhalb vonWeakInstanceDicthinzugefügt, bei denen eine Prüfung aufkey in dictvon einem indizierten Zugriff auf diesen Schlüssel gefolgt wird. Dies dient zum Schutz vor einem Wettlauf mit der Garbage Collection, der unter Last den Schlüssel aus dem Dictionary entfernen kann, nachdem der Code davon ausgeht, dass er vorhanden ist, was zu sehr seltenenKeyError-Auslösungen führt.Diese Änderung wird auch zurückportiert auf: 1.1.12
Referenzen: #4030
tests¶
1.2.0b1¶
Veröffentlicht: 10. Juli 2017orm¶
[orm] [feature] ¶
Ein
aliased()-Konstrukt kann nun an die MethodeQuery.select_entity_from()übergeben werden. Entitäten werden aus dem durch dasaliased()-Konstrukt dargestellten wählbaren Element extrahiert. Dies ermöglicht die Verwendung spezieller Optionen füraliased()wiealiased.adapt_on_namesin Verbindung mitQuery.select_entity_from().Diese Änderung wird auch zurückportiert auf: 1.1.7
Referenzen: #3933
[orm] [feature] ¶
Das Attribut
.autocommitwurde zuscoped_sessionhinzugefügt und leitet das Attribut.autocommitder zugrunde liegendenSession, die aktuell dem Thread zugeordnet ist, weiter. Pull-Request von Ben Fagin.[orm] [feature] ¶
Es wurde eine neue Funktion
with_expression()hinzugefügt, die es ermöglicht, einen Ad-hoc-SQL-Ausdruck einer bestimmten Entität in einer Abfrage zum Zeitpunkt der Ergebnisausgabe hinzuzufügen. Dies ist eine Alternative dazu, dass der SQL-Ausdruck als separates Element im Ergebnis-Tuple geliefert wird.Referenzen: #3058
[orm] [feature] ¶
Ein neuer Stil der Vererbungsladung auf Mapper-Ebene, „polymorphic selectin“, wurde hinzugefügt. Dieser Ladungsstil gibt Abfragen für jede Unterklasse in einer Vererbungshierarchie aus, nachdem der Basistyp geladen wurde, und verwendet IN, um die gewünschten Primärschlüsselwerte anzugeben.
Referenzen: #3948
[orm] [feature] ¶
Eine neue Art des Eager-Loadings namens „selectin“-Loading wurde hinzugefügt. Dieser Ladungsstil ähnelt stark dem „subquery“-Eager-Loading, mit dem Unterschied, dass er einen IN-Ausdruck mit einer Liste von Primärschlüsselwerten aus den geladenen Elternobjekten verwendet, anstatt die ursprüngliche Abfrage neu zu formulieren. Dies ergibt eine effizientere Abfrage, die „baked“ (d. h. die SQL-Zeichenkette ist zwischengespeichert) ist und auch im Kontext von
Query.yield_per()funktioniert.Referenzen: #3944
[orm] [feature] ¶
Die Loader-Strategie
lazy="select"nutzt nun in allen Fällen das Abfrage-Caching-SystemBakedQuery. Dies eliminiert den Großteil des Aufwands für die Generierung einesQuery-Objekts und dessen Ausführung in einselect()und dann eine SQL-Anweisung aus dem Prozess des Lazy-Loadings von verwandten Sammlungen und Objekten. Der „baked“-Lazy-Loader wurde ebenfalls verbessert, sodass er nun in den meisten Fällen, in denen Abfrage-Load-Optionen verwendet werden, cachen kann.Referenzen: #3954
[orm] [feature] [ext] ¶
Die Methode
Query.update()kann nun sowohl Hybrid-Attribute als auch zusammengesetzte Attribute als Quelle für den Schlüssel in der SET-Klausel verarbeiten. Für Hybride wird ein zusätzlicher Dekoratorhybrid_property.update_expression()bereitgestellt, für den der Benutzer eine Tupel-zurückgebende Funktion bereitstellt.Referenzen: #3229
[orm] [feature] ¶
Ein neues Attribut-Ereignis
AttributeEvents.bulk_replace()wurde hinzugefügt. Dieses Ereignis wird ausgelöst, wenn eine Sammlung einer Beziehung zugewiesen wird, bevor die eingehende Sammlung mit der vorhandenen verglichen wird. Dieses frühe Ereignis ermöglicht auch die Konvertierung eingehender Nicht-ORM-Objekte. Das Ereignis ist in den@validates-Dekorator integriert.Siehe auch
Referenzen: #3896
[orm] [feature] ¶
Ein neuer Ereignishandler
AttributeEvents.modified()wurde hinzugefügt. Dieser wird ausgelöst, wenn die Funktion func:.attributes.flag_modified aufgerufen wird, was häufig bei Verwendung der Erweiterungsqlalchemy.ext.mutablevorkommt.Referenzen: #3303
[orm] [bug] ¶
Fehler bei der Subquery-Eager-Ladung behoben, der sich aus einer Reihe von Fehlern fortsetzt, die in #2699, #3106, #3893 behoben wurden. Es ging darum, dass die „Subquery“ die korrekte FROM-Klausel enthält, wenn sie von einer verbundenen Vererbungsklasse ausgeht und dann eine Subquery auf eine Beziehung von der Basisklasse lädt, 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 von der ersten Ebene laden, daher wurde die Korrektur weiter verallgemeinert.
Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #4011
[orm] [bug] ¶
Fehler behoben, bei dem ein Cascade wie „delete-orphan“ (aber auch andere) ein Objekt, das mit einer Beziehung verknüpft war, die selbst zu einer Unterklasse in einer Vererbung gehört, nicht finden konnte, was dazu führte, dass die Operation nicht durchgeführt wurde.
Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3986
[orm] [bug] ¶
Behebung eines Race Conditions, die in Threading-Umgebungen auftreten konnte, infolge des durch #3915 hinzugefügten Caching. 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 vorab generiert, bevor das Alias-Objekt zwischengespeichert und zwischen Threads geteilt wird.Diese Änderung wird auch zurückportiert auf: 1.1.7
Referenzen: #3947
[orm] [bug] ¶
Ein UPDATE, das als Ergebnis des
relationship.post_update-Features generiert wurde, integriert nun die Versionierungsfunktion, um sowohl die Versions-ID der Zeile zu erhöhen als auch zu überprüfen, ob die vorhandene Versionsnummer übereinstimmt.Referenzen: #3496
[orm] [bug] ¶
Mehrere Anwendungsfälle im Zusammenhang mit der
relationship.post_update-Funktion in Verbindung mit einer Spalte mit einem „onupdate“-Wert wurden repariert. Wenn das UPDATE ausgeführt wird, wird das entsprechende Objektattribut nun abgewertet oder aktualisiert, sodass der neu generierte „onupdate“-Wert das Objekt füllen kann; zuvor blieb der veraltete Wert bestehen. Zusätzlich, wenn das Zielattribut für die INSERT des Objekts in Python gesetzt ist, wird der Wert nun während des UPDATE erneut gesendet, damit „onupdate“ ihn nicht überschreibt (beachten Sie, dass dies auch für serverseitig generierte Onupdates funktioniert). Schließlich wird dasSessionEvents.refresh_flush()-Ereignis nun für diese Attribute ausgelöst, wenn sie innerhalb des Flush aktualisiert werden.[orm] [bug] ¶
Fehler behoben, bei dem ein programmatischer Version-ID-Zähler in Verbindung mit Joined-Table-Vererbung fehlschlug, wenn der Version-ID-Zähler nicht tatsächlich inkrementiert wurde und keine anderen Werte in der Basis-Tabelle geändert wurden, da das UPDATE eine leere SET-Klausel gehabt hätte. Da programmatische Version-IDs, bei denen der Zähler nicht inkrementiert wird, ein dokumentierter Anwendungsfall sind, wird dieser spezifische Zustand nun erkannt und das UPDATE setzt den Version-ID-Wert auf sich selbst, damit weiterhin Konkurrenzprüfungen stattfinden.
Referenzen: #3996
[orm] [bug] ¶
Das Versionierungs-Feature unterstützt kein NULL für den Versionszähler. Es wird nun eine Ausnahme ausgelöst, wenn die Version-ID programmatisch ist und für ein UPDATE auf NULL gesetzt wurde. Pull-Request von Diana Clarke.
Referenzen: #3673
[orm] [bug] ¶
Ein sehr altes Keyword-Argument namens
scopewurde ausscoped_sessionentfernt. Dieses Keyword wurde nie dokumentiert und war ein früher Versuch, variable Scopes zu ermöglichen.Siehe auch
Referenzen: #3796
[orm] [bug] ¶
Fehler behoben, bei dem die Kombination einer „with_polymorphic“-Ladung mit unterklassengebundenen Beziehungen, die joinedload mit innerjoin=True spezifizieren, fehlschlug, diese „innerjoins“ nicht zu „outerjoins“ herunterzustufen, um den anderen polymorphen Klassen, die diese Beziehung nicht unterstützen, zu entsprechen. Dies gilt sowohl für eine einzelne als auch für eine joined-inheritance-polymorphe Ladung.
Referenzen: #3988
[orm] [bug] ¶
Ein neues Argument
with_for_updatewurde zur MethodeSession.refresh()hinzugefügt. Als die MethodeQuery.with_lockmode()zugunsten vonQuery.with_for_update()veraltet wurde, wurde die MethodeSession.refresh()nie aktualisiert, um die neue Option widerzuspiegeln.Referenzen: #3991
[orm] [bug] ¶
Fehler behoben, bei dem eine
column_property(), die auch als „deferred“ markiert war, während eines Flush als „expired“ markiert wurde, was dazu führte, dass sie zusammen mit der Aufhebung der Gültigkeit regulärer Attribute geladen wurde, obwohl dieses Attribut nie aufgerufen wurde.Referenzen: #3984
[orm] [bug] ¶
Fehler bei der Subquery-Eager-Ladung behoben, bei dem der Parameter „join_depth“ für selbstverweisende Beziehungen nicht korrekt beachtet wurde und alle verfügbaren Ebenen tief geladen wurden, anstatt die angegebene Anzahl von Ebenen für das Eager-Loading korrekt zu zählen.
Referenzen: #3967
[orm] [bug] ¶
Es wurden Warnungen zum LRU „compiled cache“ hinzugefügt, der vom
Mapper(und letztendlich für andere ORM-basierte LRU-Caches) verwendet wird, sodass die Anwendung eine Warnung ausgibt, wenn der Cache seine Größengrenzen erreicht. Dies ist eine leistungsmindernde Situation, die möglicherweise Aufmerksamkeit erfordert. Die LRU-Caches können ihre Größengrenzen hauptsächlich erreichen, wenn eine Anwendung eine unbegrenzte Anzahl vonEngine-Objekten verwendet, was ein Antipattern ist. Andernfalls könnte dies auf ein Problem hindeuten, das der SQLAlchemy-Entwicklungsabteilung gemeldet werden sollte.[orm] [bug] ¶
Fehler behoben, um die Spezifität von Loader-Optionen zu verbessern, die nach dem Lazy-Load einer verwandten Entität wirksam werden, sodass die Loader-Optionen spezifischer für eine aliasierte oder nicht-aliasierte Entität übereinstimmen, wenn diese Optionen Entitätsinformationen enthalten.
Referenzen: #3963
[orm] [bug] ¶
Die Funktion
flag_modified()löst nunInvalidRequestErroraus, wenn der benannte Attributschlüssel nicht im Objekt vorhanden ist, da dies im Flush-Prozess angenommen wird. Um ein Objekt für einen Flush als „dirty“ zu markieren, ohne sich auf ein bestimmtes Attribut zu beziehen, kann die Funktionflag_dirty()verwendet werden.Referenzen: #3753
[orm] [bug] ¶
Die Strategie „evaluate“, die von
Query.update()undQuery.delete()verwendet wird, kann nun eine einfache Objektvergleichung von einer Many-to-One-Beziehung zu einer Instanz verarbeiten, wenn die Attributnamen der Primärschlüssel-/Fremdschlüsselspalten nicht mit den tatsächlichen Spaltennamen übereinstimmen. Zuvor erfolgte ein einfacher namensbasierter Abgleich und es kam zu einem AttributeError.Referenzen: #3366
[orm] [bug] ¶
Der
@validates-Dekorator erlaubt es der dekorierten Methode nun, Objekte aus einer „Bulk Collection Set“-Operation zu empfangen, die noch nicht mit der bestehenden Sammlung verglichen wurden. Dies ermöglicht die Konvertierung eingehender Werte in kompatible ORM-Objekte, wie es bereits bei einem „append“-Ereignis möglich ist. Beachten Sie, dass dies bedeutet, dass die@validates-Methode für **alle** Werte bei einer Sammlungszuweisung aufgerufen wird, anstatt nur für die neuen.Siehe auch
Eine @validates-Methode empfängt alle Werte bei einem Bulk-Collection-Set vor dem Vergleich
Referenzen: #3896
[orm] [bug] ¶
Fehler bei der Single-Table-Vererbung behoben, bei dem das Argument select_from() nicht berücksichtigt wurde, wenn die Zeilen auf eine Unterklasse beschränkt wurden. Zuvor wurden nur Ausdrücke in den angeforderten Spalten berücksichtigt.
Referenzen: #3891
[orm] [bug] ¶
Beim Zuweisen einer Sammlung zu einem Attribut, das durch eine Beziehung abgebildet ist, wird die vorherige Sammlung nicht mehr mutiert. Zuvor wurde die alte Sammlung im Zusammenhang mit den ausgelösten „item remove“-Ereignissen geleert; die Ereignisse werden nun ausgelöst, ohne die alte Sammlung zu beeinträchtigen.
Referenzen: #3913
[orm] [bug] ¶
Der Zustand der
Sessionist nun vorhanden, wenn das EreignisSessionEvents.after_rollback()ausgelöst wird, d. h. der Attributzustand der Objekte vor deren Ablaufen. Dies stimmt nun mit dem Verhalten des EreignissesSessionEvents.after_commit()überein, das ebenfalls vor dem Ablaufen des Attributzustands von Objekten ausgelöst wird.Referenzen: #3934
[orm] [bug] ¶
Fehler behoben, bei dem
Query.with_parent()nicht funktionierte, wenn die Abfrage für einaliased()-Konstrukt und nicht für eine reguläre zugeordnete Klasse galt. Fügt auch einen neuen Parameterwith_parent.from_entityzur eigenständigen Funktionwith_parent()sowie zuQuery.with_parent()hinzu.Referenzen: #3607
orm declarative¶
[orm] [declarative] [bug] ¶
Behobener Fehler, bei dem die Verwendung von
declared_attrauf einerAbstractConcreteBase, bei der ein bestimmter Rückgabewert ein nicht zugeordnetes Symbol, einschließlichNone, war, dazu führte, dass das Attribut nur einmal hart ausgewertet wurde und der Wert im Objektverzeichnis gespeichert wurde, was seine Ausführung für Unterklassen nicht zuließ. Dieses Verhalten ist normal, wenndeclared_attrauf einer zugeordneten Klasse liegt und tritt nicht auf einer Mixin- oder abstrakten Klasse auf. DaAbstractConcreteBasesowohl „abstrakt“ als auch tatsächlich „zugeordnet“ ist, wird hier eine spezielle Ausnahmeregelung getroffen, so dass das „abstrakte“ Verhalten fürdeclared_attrVorrang hat.Referenzen: #3848
engine¶
[engine] [feature] ¶
Native „pessimistic disconnection“ Behandlung zum
PoolObjekt hinzugefügt. Der neue ParameterPool.pre_ping, der von der Engine alscreate_engine.pool_pre_pingverfügbar ist, wendet eine effiziente Form des im Pooling-Dokumentation vorgestellten „pre-ping“-Rezepts an, die bei jeder Verbindungsprüfung eine einfache Anweisung, typischerweise „SELECT 1“, ausgibt, um die Verbindung auf Lebensfähigkeit zu testen. Wenn die bestehende Verbindung keine Befehle mehr beantworten kann, wird die Verbindung transparent recycelt und alle anderen Verbindungen, die vor dem aktuellen Zeitstempel hergestellt wurden, werden ungültig gemacht.Siehe auch
Disconnect Handling - Pessimistisch
Pessimistische Trennungsdetektion zum Verbindungspool hinzugefügt
Referenzen: #3919
[engine] [bug] ¶
Ein Ausnahmehandler wurde hinzugefügt, der bei Py2K vor der „cause“-Ausnahme warnt, wenn die „autorollback“-Funktion von
Connectionselbst eine Ausnahme auslöst. In 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 behandelt wurden.Diese Änderung wird auch zurückportiert auf: 1.1.7
Referenzen: #3946
[engine] [bug] ¶
Behobener Fehler, bei dem in dem ungewöhnlichen Fall, dass ein
Compiled-Objekt direkt anConnection.execute()übergeben wurde, das Dialekt, mit dem dasCompiled-Objekt generiert wurde, nicht für den Paramstyle der Zeichenkette abgefragt wurde und stattdessen angenommen wurde, dass er mit dem Dialekt-Paramstyle übereinstimmt, was zu Abweichungen führte.Referenzen: #3938
sql¶
[sql] [feature] ¶
Eine neue Art von
bindparam()namens „expanding“ wurde hinzugefügt. Diese ist für die Verwendung inIN-Ausdrücken gedacht, bei denen die Liste der Elemente zum Zeitpunkt der Ausführung der Anweisung anstelle des Zeitpunkts der Kompilierung der Anweisung in einzelne gebundene Parameter gerendert wird. Dies ermöglicht es sowohl, einen einzelnen gebundenen Parameternamen mit einem IN-Ausdruck von mehreren Elementen zu verknüpfen, als auch die Abfrage-Cache-Nutzung mit IN-Ausdrücken zu ermöglichen. Die neue Funktion ermöglicht es den verwandten Funktionen „select in“ und „polymorphic in“ Ladefunktionen, die Baked Query Extension zu nutzen, um den Overhead zu reduzieren. Diese Funktion sollte für 1.2 als **experimentell** betrachtet werden.Siehe auch
Spät expandierende IN-Parametermengen ermöglichen IN-Ausdrücke mit zwischengespeicherten Anweisungen
Referenzen: #3953
[sql] [feature] [mysql] [oracle] [postgresql] ¶
Unterstützung für SQL-Kommentare zu
TableundColumn-Objekten hinzugefügt, über die neuen ArgumenteTable.commentundColumn.comment. Die Kommentare werden als Teil der DDL bei Tabellenerstellung, entweder inline oder über eine entsprechende ALTER-Anweisung, aufgenommen und auch innerhalb der Tabellenreflexion sowie über denInspectorzurückreflektiert. Unterstützte Backends umfassen derzeit MySQL, PostgreSQL und Oracle. Vielen Dank an Frazer McLean für seine großen Anstrengungen in diesem Bereich.Referenzen: #1546
[sql] [feature] ¶
Das langjährige Verhalten der Operatoren
ColumnOperators.in_()undColumnOperators.notin_(), die eine Warnung ausgeben, wenn die rechte Bedingung eine leere Sequenz ist, wurde überarbeitet; stattdessen wird standardmäßig ein einfacher „statischer“ Ausdruck „1 != 1“ oder „1 = 1“ gerendert, anstatt den ursprünglichen linken Ausdruck einzubeziehen. Dies bewirkt, dass sich das Ergebnis eines NULL-Spaltenvergleichs mit einer leeren Menge von NULL zu wahr/falsch ändert. Das Verhalten ist konfigurierbar und das alte Verhalten kann über den Parametercreate_engine.empty_in_strategyzucreate_engine()aktiviert werden.Referenzen: #3907
[sql] [feature] ¶
Eine neue Option
autoescapewurde zu den „startswith“- und „endswith“-Klassen von Vergleichsobjekten hinzugefügt; diese liefert ein Escape-Zeichen und wendet es auch automatisch auf alle Vorkommen der Wildcard-Zeichen „%“ und „_“ an. Pull-Request von Diana Clarke.Hinweis
Dieses Feature wurde seit 1.2.0 aus seiner ursprünglichen Implementierung in 1.2.0b2 geändert, so dass autoescape nun als boolescher Wert übergeben wird und nicht als spezifisches Zeichen, das als Escape-Zeichen verwendet werden soll.
Referenzen: #2694
[sql] [bug] ¶
Behobener AttributeError, der in der
WithinGroup-Konstruktion während einer Iteration der Struktur aufgetreten wäre.Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #4012
[sql] [bug] ¶
Behobene Regression, veröffentlicht in 1.1.5 aufgrund von #3859, bei der Anpassungen an der Auswertung der „rechten Seite“ eines Ausdrucks, der auf
Variantbasierte, um die Regeln der rechten Seite des zugrunde liegenden Typs zu berücksichtigen, dazu führten, dass derVariant-Typ unangemessen verloren ging, in den Fällen, in denen wir wollen, dass der Typ der linken Seite direkt an die rechte Seite übertragen wird, damit die Regeln auf Bindungsebene auf das Argument des Ausdrucks angewendet werden können.Diese Änderung wurde auch auf Folgendes **zurückportiert**: 1.1.9
Referenzen: #3952
[sql] [bug] [postgresql] ¶
Die Mechanik von
ResultProxywurde geändert, um den „autoclose“-Schritt bedingungslos zu verzögern, bis dieConnectiondas Objekt nicht mehr benötigt. In dem Fall, dass PostgreSQL ON CONFLICT mit RETURNING keine Zeilen zurückgibt, fand autoclose in diesem zuvor nicht existierenden Anwendungsfall statt, was dazu führte, dass das übliche Autocommit-Verhalten, das bedingungslos bei INSERT/UPDATE/DELETE auftritt, fehlschlug.Diese Änderung wurde auch auf Folgendes **zurückportiert**: 1.1.9
Referenzen: #3955
[sql] [bug] ¶
Die Regeln für die Typumwandlung zwischen
Numeric,Integerund datumsbezogenen Typen beinhalten nun zusätzliche Logik, die versucht, die Einstellungen des eingehenden Typs für den „aufgelösten“ Typ beizubehalten. Derzeit ist das Ziel hierfür dasasdecimal-Flag, sodass eine mathematische Operation zwischenNumericoderFloatundIntegerdas „asdecimal“-Flag sowie die Information, ob der Typ dieFloat-Unterklasse sein soll, beibehält.Referenzen: #4018
[sql] [bug] [mysql] ¶
Der Ergebnisprozessor für den
Float-Typ durchläuft die Werte nun bedingungslos denfloat()-Prozessor, wenn das Dialekt angibt, dass es auch den „native decimal“-Modus unterstützt. Während die meisten Backends Pythonfloat-Objekte für einen Fließkomma-Datentyp liefern, mangelt es den MySQL-Backends in einigen Fällen an den Typinformationen, um dies zu ermöglichen undDecimalzurückzugeben, es sei denn, die Float-Konvertierung wird durchgeführt.Referenzen: #4020
[sql] [bug] ¶
Es wurde zusätzliche Strenge bei der Behandlung von Python „float“-Werten, die an SQL-Anweisungen übergeben werden, hinzugefügt. Ein „float“-Wert wird dem
Float-Datentyp zugeordnet und nicht dem Decimal-kozierendenNumeric-Datentyp, wie es zuvor der Fall war. Dadurch wird eine verwirrende Warnung auf SQLite sowie eine unnötige Konvertierung zu Decimal eliminiert.Referenzen: #4017
[sql] [bug] ¶
Die Operatorrangfolge für alle Vergleichsoperatoren wie LIKE, IS, IN, MATCH, gleich, größer als, kleiner als usw. wurde auf eine Ebene zusammengeführt, sodass Ausdrücke, die diese gegeneinander verwenden, Klammern zwischen ihnen erzeugen. Dies entspricht der angegebenen Operatorrangfolge von Datenbanken wie Oracle, MySQL und anderen, die all diese Operatoren mit gleicher Rangfolge behandeln, sowie PostgreSQL ab 9.5, das seine Operatorrangfolge ebenfalls abgeflacht hat.
Referenzen: #3999
[sql] [bug] ¶
Behobenes Problem, bei dem der Typ eines Ausdrucks, der
ColumnOperators.is_()oder Ähnliches verwendete, kein „boolean“-Typ war, sondern stattdessen der Typ „nulltype“, auch bei der Verwendung benutzerdefinierter Vergleichsoperatoren gegen einen untypisierten Ausdruck. Diese Typisierung kann beeinflussen, wie der Ausdruck in größeren Kontexten sowie bei der Verarbeitung von Ergebniszeilen verhält.Referenzen: #3873
[sql] [bug] ¶
Die Negation eines
Label-Konstrukts wurde behoben, so dass das innere Element korrekt negiert wird, wenn dernot_()-Modifikator auf den beschrifteten Ausdruck angewendet wird.Referenzen: #3969
[sql] [bug] ¶
Das System, mit dem Prozentzeichen in SQL-Anweisungen zum Escaping-Zwecke „verdoppelt“ werden, wurde verfeinert. Das „Verdoppeln“ von Prozentzeichen, das hauptsächlich mit dem
literal_column-Konstrukt sowie mit Operatoren wieColumnOperators.contains()verbunden ist, erfolgt nun basierend auf dem angegebenen Paramstyle des verwendeten DBAPI; für prozent-sensible Paramstyles, wie sie bei PostgreSQL und MySQL-Treibern üblich sind, erfolgt die Verdopplung, bei anderen wie bei SQLite nicht. Dies ermöglicht eine datenbank-agnostischere Nutzung desliteral_column-Konstrukts.Referenzen: #3740
[sql] [bug] ¶
Behobener Fehler, bei dem eine spaltenbezogene
CheckConstraintdas SQL-Ausdruck mit dem zugrunde liegenden Dialekt-Compiler nicht kompilieren und keine korrekten Flags zum Generieren von Literalwerten als Inline anwenden konnte, wenn der sqltext ein Core-Ausdruck und keine einfache Zeichenkette war. Dies wurde bereits 0.9 für tabellenbezogene Check-Constraints als Teil von #2742 behoben, die häufiger Core SQL-Ausdrücke anstelle von reinen Zeichenkettenausdrücken aufweisen.Referenzen: #3957
[sql] [bug] ¶
Behobener Fehler, bei dem eine SQL-orientierte Python-seitige Spaltendefault-Wertdefinition bei INSERT im „pre-execute“-Codepfad nicht korrekt ausgeführt werden konnte, wenn die SQL selbst ein untypisierter Ausdruck, wie z. B. einfacher Text, war. Der „pre-execute“-Codepfad ist ziemlich ungewöhnlich, kann aber für nicht-ganzzahlige Primärschlüssel-Spalten mit SQL-Defaults gelten, wenn RETURNING nicht verwendet wird.
Referenzen: #3923
[sql] [bug] ¶
Der Ausdruck, der für COLLATE wie vom spaltenbezogenen
collate()undColumnOperators.collate()gerendert wird, wird nun als Bezeichner zitiert, wenn der Name Groß-/Kleinschreibung-sensitiv ist, z. B. Großbuchstaben enthält. Beachten Sie, dass dies die typbezogene Sortierung nicht beeinträchtigt, die bereits zitiert wird.Referenzen: #3785
[sql] [bug] ¶
Behobener Fehler, bei dem die Verwendung eines
Alias-Objekts im Spaltenkontext einen Argumentfehler auslösen würde, wenn versucht wurde, es in einen geklammerten Ausdruck zu gruppieren. Die Verwendung vonAliasauf diese Weise ist noch keine vollständig unterstützte API, sie gilt jedoch für einige Endbenutzerrezepte und könnte eine wichtigere Rolle bei der Unterstützung zukünftiger PostgreSQL-Funktionen spielen.Referenzen: #3939
schema¶
[schema] [bug] ¶
Eine
ArgumentErrorwird nun ausgelöst, wenn einForeignKeyConstraint-Objekt mit einer inkonsistenten Anzahl von „lokalen“ und „entfernten“ Spalten erstellt wird, was andernfalls dazu führt, dass der interne Zustand der Einschränkung falsch ist. Beachten Sie, dass dies auch die Bedingung beeinflusst, bei der der Reflexionsprozess eines Dialekts einen inkonsistenten Satz von Spalten für eine Fremdschlüsseleinschränkung erzeugt.Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3949
postgresql¶
[postgresql] [bug] ¶
Fortsetzung der Korrektur, die die PostgreSQL-Versionszeichenkette „10devel“ aus 1.1.8 korrekt behandelt, ein zusätzlicher Regex-Bump zur Behandlung von Versionszeichenketten der Form „10beta1“. Während PostgreSQL nun bessere Möglichkeiten zur Erfassung dieser Informationen bietet, bleiben wir mindestens bis 1.1.x bei der Regex, um das geringste Risiko für Kompatibilität mit älteren oder alternativen PostgreSQL-Datenbanken zu haben.
Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #4005
[postgresql] [bug] ¶
Behobener Fehler, bei dem die Verwendung von
ARRAYmit einem String-Typ, der eine Sortierung aufweist, die falsche Syntax innerhalb von CREATE TABLE erzeugt hätte.Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #4006
[postgresql] [bug] ¶
Unterstützung für „autocommit“ für GRANT, REVOKE-Schlüsselwörter hinzugefügt. Pull-Request von Jacob Hayes.
Diese Änderung wird auch zurückportiert auf: 1.1.10
[postgresql] [bug] ¶
Unterstützung für das Parsen der PostgreSQL-Versionszeichenkette für eine Entwicklungsversion wie „PostgreSQL 10devel“ hinzugefügt. Pull-Request von Sean McCully.
Diese Änderung wurde auch auf Folgendes **zurückportiert**: 1.1.8
[postgresql] [bug] ¶
Behobener Fehler, bei dem der Basisdatentyp
ARRAYdie Bindungs-/Ergebnisprozessoren vonARRAYnicht aufgerufen hätte.Referenzen: #3964
[postgresql] [bug] ¶
Unterstützung für alle möglichen „fields“-Identifikatoren bei der Reflexion des PostgreSQL-Datentyps
INTERVALhinzugefügt, z. B. „YEAR“, „MONTH“, „DAY TO MINUTE“ usw. Darüber hinaus enthält der DatentypINTERVALselbst einen neuen ParameterINTERVAL.fields, wo diese Qualifizierer angegeben werden können; der Qualifizierer wird auch bei der Reflexion / Inspektion in den resultierenden Datentyp zurückreflektiert.Referenzen: #3959
mysql¶
[mysql] [feature] ¶
Unterstützung für MySQLs ON DUPLICATE KEY UPDATE MySQL-spezifisches
Insert-Objekt hinzugefügt. Pull-Request von Michael Doronin.Referenzen: #4009
[mysql] [bug] ¶
MySQL 5.7 hat eine Berechtigungsbeschränkung für den Befehl „SHOW VARIABLES“ eingeführt; das MySQL-Dialekt behandelt nun, wenn SHOW keine Zeile zurückgibt, insbesondere für den anfänglichen Abruf von SQL_MODE, und gibt eine Warnung aus, dass Benutzerberechtigungen geändert werden sollten, um die Anwesenheit der Zeile zu ermöglichen.
Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #4007
[mysql] [bug] ¶
Ein alter und unnötiger Abfang der UTC_TIMESTAMP MySQL-Funktion wurde entfernt, der die Verwendung mit einem Parameter verhinderte.
Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3966
[mysql] [bug] ¶
Behobener Fehler im MySQL-Dialekt bezüglich des Renderns von Tabellenoptionen in Verbindung mit PARTITION-Optionen beim Rendern von CREATE TABLE. Die PARTITION-bezogenen Optionen müssen den Tabellenoptionen folgen, während zuvor diese Reihenfolge nicht erzwungen wurde.
Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3961
[mysql] [bug] ¶
Unterstützung für Ansichten, die aufgrund veralteter Tabellendefinitionen nicht reflektierbar sind, beim Aufruf von
MetaData.reflect()hinzugefügt; eine Warnung wird für die Tabelle ausgegeben, die nicht aufDESCRIBEreagieren kann, aber die Operation wird erfolgreich durchgeführt.Referenzen: #3871
mssql¶
[mssql] [bug] ¶
Behobener Fehler, bei dem die Transaktionsisolierung von SQL Server aus einer anderen Ansicht abgerufen werden muss, wenn Azure Data Warehouse verwendet wird. Die Abfrage wird nun gegen beide Ansichten versucht und dann wird bedingungslos ein NotImplemented ausgelöst, wenn Fehler weiterhin auftreten, um die beste Ausfallsicherheit gegen zukünftige willkürliche API-Änderungen in neuen SQL Server-Versionen zu bieten.
Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #3994
[mssql] [bug] ¶
Ein Platzhaltertyp
XMLwurde 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.Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #3973
[mssql] [bug] ¶
Das SQL Server-Dialekt erlaubt nun Datenbank- und/oder Besitzernamen mit einem Punkt darin, indem eckige Klammern explizit in der Zeichenkette um den Besitzer und optional auch den Datenbanknamen verwendet werden. Darüber hinaus wird durch das Senden des
quoted_name-Konstrukts für den Schemanamen nicht auf den Punkt aufgeteilt und die gesamte Zeichenkette als „owner“ geliefert.quoted_nameist nun auch aus dem Importraumsqlalchemy.sqlverfügbar.Referenzen: #2626
oracle¶
[oracle] [feature] [postgresql] ¶
Neue Schlüsselwörter
Sequence.cacheundSequence.orderwurden zuSequencehinzugefügt, um das Rendern des CACHE-Parameters, der von Oracle und PostgreSQL verstanden wird, und des ORDER-Parameters, der von Oracle verstanden wird, zu ermöglichen. Pull-Request von David Moore.Diese Änderung wird auch zurückportiert auf: 1.1.12
[oracle] [feature] ¶
Der Oracle-Dialekt inspiziert jetzt eindeutige und Prüfeinschränkungen, wenn
Inspector.get_unique_constraints()undInspector.get_check_constraints()verwendet werden. Da Oracle keine eindeutigen Einschränkungen hat, die von einem eindeutigenIndexgetrennt sind, wird eine reflektierteTableweiterhin keineUniqueConstraint-Objekte zugeordnet haben. Pull-Anfragen mit freundlicher Genehmigung von Eloy Felix.Referenzen: #4003
[oracle] [bug] ¶
Die Unterstützung für Zwei-Phasen-Transaktionen wurde für cx_Oracle vollständig entfernt, wenn Version 6.0b1 oder höher der DBAPI verwendet wird. Das Zwei-Phasen-Feature war historisch gesehen ohnehin nie unter cx_Oracle 5.x nutzbar, und cx_Oracle 6.x hat das Connection-Level-Flag „twophase“ entfernt, auf dem dieses Feature basierte.
Diese Änderung wird auch zurückportiert auf: 1.1.11
Referenzen: #3997
[oracle] [bug] ¶
Fehler im cx_Oracle-Dialekt behoben, bei dem die Versionszeichenkettenanalyse für cx_Oracle Version 6.0b1 aufgrund des Zeichens „b“ fehlschlug. Die Versionszeichenkettenanalyse erfolgt jetzt über einen regulären Ausdruck anstelle eines einfachen Splits.
Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3975
[oracle] [bug] ¶
Der cx_Oracle-Dialekt unterstützt jetzt „sane multi rowcount“, d. h. wenn eine Reihe von Parametersätzen über
cursor.executemany()der DBAPI ausgeführt werden, können wircursor.rowcountverwenden, um die Anzahl der übereinstimmenden Zeilen zu überprüfen. Dies hat Auswirkungen innerhalb des ORM bei der Erkennung von Szenarien mit gleichzeitiger Modifikation, da einige einfache Bedingungen jetzt erkannt werden können, auch wenn das ORM Anweisungen stapelt, sowie wenn die strengere Versionierungsfunktion verwendet wird, kann das ORM weiterhin Anweisungsstapelung verwenden. Das Flag ist für cx_Oracle aktiviert, vorausgesetzt mindestens Version 5.0, was mittlerweile üblich ist.Referenzen: #3932
[oracle] [bug] ¶
Die Oracle-Reflektion „normalisiert“ jetzt den Namen einer Fremdschlüsselbeschränkung, d. h. gibt ihn als Kleinbuchstaben für einen nicht fallenden Namen zurück. Dies war bereits das Verhalten für Indizes und Primärschlüsselbeschränkungen sowie für alle Tabellen- und Spaltennamen. Dies ermöglicht Alembic-Autogenerierungsskripten, Fremdschlüsselbeschränkungsnamen korrekt zu vergleichen und zu rendern, wenn sie ursprünglich als nicht fallend angegeben wurden.
Referenzen: #3276
Diverses¶
[feature] [ext] ¶
Es wurde ein neues Flag
Session.enable_baked_querieszurSessionhinzugefügt, um das Deaktivieren von gebackenen Abfragen sitzungsweit zu ermöglichen und so den Speicherverbrauch zu reduzieren. Es wurde auch ein neuerBakery-Wrapper hinzugefügt, damit die vonBakedQuery.bakeryzurückgegebene Bäckerei inspiziert werden kann.[bug] [ext] ¶
Schutz vor dem Testen von „None“ als Klasse im Falle, dass Deklarative Klassen gesammelt werden und neue Automap-prepare()-Operationen gleichzeitig stattfinden, sehr selten wird ein WeakRef getroffen, der nach GC noch nicht vollständig verarbeitet wurde.
Diese Änderung wird auch zurückportiert auf: 1.1.10
Referenzen: #3980
[bug] [ext] ¶
Fehler in
sqlalchemy.ext.mutablebehoben, bei dem die MethodeMutable.as_mutable()einen Typ, der mitTypeEngine.copy()kopiert wurde, nicht verfolgen würde. Dies wurde in 1.1 im Vergleich zu 1.0 zu einer stärkeren Regression, da die KlasseTypeDecoratorjetzt eine Unterklasse vonSchemaEventTargetist, was unter anderem der übergeordnetenColumnanzeigt, dass der Typ kopiert werden soll, wenn dieColumndies tut. Diese Kopien sind üblich, wenn man Deklaratives mit Mixins oder abstrakten Klassen verwendet.Diese Änderung wurde auch auf Folgendes **zurückportiert**: 1.1.8
Referenzen: #3950
[bug] [ext] ¶
Unterstützung für gebundene Parameter, z. B. solche, die normalerweise über
Query.params()eingerichtet werden, wurde zur MethodeResult.count()hinzugefügt. Zuvor wurde die Unterstützung für Parameter ausgelassen. Pull-Anfrage mit freundlicher Genehmigung von Pat Deegan.Diese Änderung wurde auch auf Folgendes **zurückportiert**: 1.1.8
[bug] [ext] ¶
Die Vergleichsmethoden
AssociationProxy.any(),AssociationProxy.has()undAssociationProxy.contains()unterstützen jetzt die Verknüpfung mit einem Attribut, das selbst ebenfalls einAssociationProxyist, rekursiv.Referenzen: #3769
[bug] [ext] ¶
In-Place-Mutationsoperatoren
__ior__,__iand__,__ixor__und__isub__fürMutableSetund__iadd__fürMutableListimplementiert, sodass Änderungsereignisse ausgelöst werden, wenn diese Mutator-Methoden zum Ändern der Sammlung verwendet werden.Referenzen: #3853
[bug] [declarative] ¶
Eine Warnung wird ausgegeben, wenn der Modifier
declared_attr.cascadingmit einem deklarierten Attribut verwendet wird, das selbst auf einer Klasse deklariert ist, die zugeordnet werden soll, im Gegensatz zu einer deklarierten Mixin-Klasse oder einer__abstract__-Klasse. Der Modifierdeclared_attr.cascadinggilt derzeit nur für Mixin/abstrakte Klassen.Referenzen: #3847
[bug] [ext] ¶
Die Assoziationsproxy-Listen-Sammlung wurde verbessert, um eine vorzeitige Autoflush gegen ein neu erstelltes Assoziationsobjekt zu verhindern, falls
list.append()verwendet wird und ein Lazy-Load aufgerufen würde, wenn der Assoziationsproxy auf die Endpunktsammlung zugreift. Die Endpunktsammlung wird jetzt zuerst aufgerufen, bevor der Erzeuger aufgerufen wird, um das Assoziationsobjekt zu erzeugen.Referenzen: #3941
[bug] [ext] ¶
Die Klasse
sqlalchemy.ext.hybrid.hybrid_propertyunterstützt jetzt das mehrfache Aufrufen von Mutatoren wie@setter,@expressionusw. über Unterklassen hinweg und bietet jetzt einen@getter-Mutator, sodass ein bestimmter Hybrid über Unterklassen oder andere Klassen wiederverwendet werden kann. Dies entspricht nun dem Verhalten von@propertyin Standard-Python.[bug] [ext] ¶
Fehler in der Erweiterung
sqlalchemy.ext.serializerbehoben, bei dem ein „annotierter“ SQL-Teil (wie vom ORM für viele Arten von SQL-Ausdrücken erzeugt) nicht zuverlässig serialisiert werden konnte. Außerdem wurde das Standard-Pickle-Level für den Serializer auf „HIGHEST_PROTOCOL“ erhöht.Referenzen: #3918
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