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
- Vorherige: 0.6 Changelog
- Nächste: 0.4 Changelog
- Nach oben: Startseite
- Auf dieser Seite
0.5 Changelog¶
0.5.9¶
kein Veröffentlichungsdatumsql¶
0.5.8¶
Veröffentlicht: Sa 16. Jan 2010sql¶
[sql] ¶
Die copy()-Methode von Column unterstützt nun uninitialisierte, unbenannte Column-Objekte. Dies ermöglicht die einfache Erstellung von deklarativen Helfern, die gemeinsame Spalten auf mehreren Unterklassen platzieren.
[sql] ¶
Standardgeneratoren wie Sequence() werden korrekt über eine copy()-Operation kopiert.
[sql] ¶
Sequence() und andere DefaultGenerator-Objekte werden als Wert für die Schlüsselwörter „default“ und „onupdate“ von Column akzeptiert, zusätzlich zur positionellen Übergabe.
[sql] ¶
Behobener Fehler bei der Spaltenarithmetik, der die Spaltenkorrespondenz für geklonte Selektierbare betraf, die freistehende Spaltenausdrücke enthalten. Dieser Fehler ist im Allgemeinen nur bei der Nutzung neuer ORM-Verhaltensweisen bemerkbar, die nur in 0.6 verfügbar sind, ist aber auch auf SQL-Ausdrucksebene korrekter.
postgresql¶
[postgresql] ¶
Die Funktion extract(), die in 0.5.7 leicht verbessert wurde, benötigte deutlich mehr Arbeit, um den korrekten Typ-Cast zu generieren (Typ-Casts scheinen bei PG's EXTRACT oft notwendig zu sein). Der Typ-Cast wird nun mithilfe eines Regel-Wörterbuchs basierend auf PG's Dokumentation für Datums-/Zeit-/Intervallarithmetik generiert. Sie akzeptiert auch text()-Konstrukte wieder, was in 0.5.7 fehlerhaft war.
Referenzen: #1647
misc¶
0.5.7¶
Veröffentlicht: Sa 26. Dez 2009orm¶
[orm] ¶
contains_eager() funktioniert nun mit der automatisch generierten Unterabfrage, die entsteht, wenn man „query(Parent).join(Parent.somejoinedsubclass)“ sagt, d.h. wenn Parent mit einer Joined-Table-Inheritance-Unterklasse verknüpft ist. Zuvor fügte contains_eager() fälschlicherweise die Unterklassen-Tabelle separat zur Abfrage hinzu, was ein kartesisches Produkt erzeugte. Ein Beispiel findet sich in der Ticketbeschreibung.
Referenzen: #1543
[orm] ¶
query.options() werden nun nur für geladene Objekte weitergegeben, um weitere Unterladungen zu ermöglichen, und nur für Optionen, bei denen ein solches Verhalten relevant ist, wobei verschiedene nicht serialisierbare Optionen wie die von contains_eager() generierten aus einzelnen Instanzzuständen herausgehalten werden.
Referenzen: #1553
[orm] ¶
Session.execute() lokalisiert nun Tabellen- und Mapper-spezifische Bindungen basierend auf einem übergebenen Ausdruck, der eine insert()/update()/delete()-Konstruktion ist.
Referenzen: #1054
[orm] ¶
Session.merge() überschreibt nun ordnungsgemäß ein many-to-one- oder uselist=False-Attribut mit None, wenn das Attribut im zu mergenden Objekt ebenfalls None ist.
[orm] ¶
Behobene unnötige Abfrage, die auftrat, wenn transiente Objekte mit einem Null-Primärschlüssel-Identifikator gemerged wurden.
Referenzen: #1618
[orm] ¶
Mutable Sammlungen, die an das „extension“-Attribut von relation(), column_property() usw. übergeben werden, werden nicht verändert oder zwischen mehreren Instrumentierungsaufrufen geteilt, wodurch doppelte Erweiterungen, wie z.B. Backref-Populaten, vermieden werden.
Referenzen: #1585
[orm] ¶
Behobener Aufruf von get_committed_value() bei CompositeProperty.
Referenzen: #1504
[orm] ¶
Behobener Fehler, bei dem Query abstürzte, wenn ein join() ohne klare „linke“ Seite aufgerufen wurde, während eine nicht gemappte Spaltenentität in der Spaltenliste erschien.
Referenzen: #1602
[orm] ¶
Behobener Fehler, bei dem zusammengesetzte Spalten bei Joined-Table-Vererbung nicht richtig geladen wurden, eingeführt in Version 0.5.6 als Ergebnis der Korrektur für. Danke an Scott Torborg.
[orm] ¶
Das „use get“-Verhalten von many-to-one-Beziehungen, d.h. dass ein Lazy Load auf den möglicherweise zwischengespeicherten query.get()-Wert zurückfällt, funktioniert nun über Join-Bedingungen hinweg, bei denen die beiden verglichenen Typen nicht exakt dieselbe Klasse sind, aber die gleiche „Affinität“ teilen – d.h. Integer und SmallInteger. Ermöglicht auch Kombinationen von reflektierten und nicht reflektierten Typen, um mit dem 0.5er-Stil der Typ-Reflexion zu arbeiten, wie PGText/Text (Hinweis: 0.6 reflektiert Typen als ihre generischen Versionen).
Referenzen: #1556
[orm] ¶
Behobener Fehler in query.update(), wenn Cls.attribute als Schlüssel im Werte-Dictionary übergeben und synchronize_session='expire' verwendet wurde ('fetch' in 0.6).
Referenzen: #1436
sql¶
[sql] ¶
Behobener Fehler in der Zwei-Phasen-Transaktion, bei der die commit()-Methode nicht den vollständigen Status setzte, der einen anschließenden close()-Aufruf ermöglichte.
Referenzen: #1603
[sql] ¶
Korrigiert den „numeric“-ParamStyle, der anscheinend der Standard-ParamStyle von Informixdb ist.
[sql] ¶
Wiederholte Ausdrücke in der Spaltenklausel einer select()-Anweisung werden basierend auf der Identität jedes Klausel-Elements und nicht auf der tatsächlichen Zeichenkette dedupliziert. Dies ermöglicht die korrekte Darstellung von positionellen Elementen, selbst wenn sie identisch gerendert werden, wie z.B. „qmark“-Bindungsparameter.
Referenzen: #1574
[sql] ¶
Der Cursor, der mit Connection-Pool-Verbindungen assoziiert ist (d.h. _CursorFairy), leitet nun __iter__() korrekt an den zugrunde liegenden Cursor weiter.
Referenzen: #1632
[sql] ¶
Typen unterstützen nun eine „Affinitätsvergleichsoperation“, d.h. dass Integer/SmallInteger „kompatibel“ sind, oder Text/String, PickleType/Binary, etc. Teil von.
Referenzen: #1556
[sql] ¶
Behobener Fehler, der das Klonen oder Anpassen von alias() eines alias() verhinderte (tritt häufig bei ORM-Operationen auf).
Referenzen: #1641
postgresql¶
[postgresql] ¶
Unterstützung für die Reflexion des DOUBLE PRECISION-Typs hinzugefügt, über ein neues postgres.PGDoublePrecision-Objekt. Dies ist postgresql.DOUBLE_PRECISION in 0.6.
Referenzen: #1085
[postgresql] ¶
Unterstützung für die Reflexion der INTERVAL YEAR TO MONTH und INTERVAL DAY TO SECOND Syntax des INTERVAL-Typs hinzugefügt.
Referenzen: #460
[postgresql] ¶
Korrigierte die „has_sequence“-Abfrage, um das aktuelle Schema oder ein explizit definiertes Sequenz-Schema zu berücksichtigen.
Referenzen: #1576
[postgresql] ¶
Behobenes Verhalten von extract(), um Operatorpräzedenzregeln auf den „::“-Operator anzuwenden, wenn der „timestamp“-Cast angewendet wird – sorgt für korrekte Klammerung.
Referenzen: #1611
sqlite¶
mssql¶
oracle¶
[oracle] ¶
Die Dialektfunktion „table_names“, die von MetaData.reflect() verwendet wird, lässt „index overflow tables“ aus, eine Systemtabelle, die von Oracle generiert wird, wenn „index only tables“ mit Overflow verwendet werden. Diese Tabellen sind nicht per SQL zugänglich und können nicht reflektiert werden.
Referenzen: #1637
misc¶
[ext] ¶
Einer Joined-Table-Deklarations-Superklasse kann eine Spalte hinzugefügt werden, nachdem die Klasse konstruiert wurde (d.h. durch Zuweisung eines Klassenattributs), und die Spalte wird an die Unterklassen weitergegeben. Dies ist die umgekehrte Situation wie bei der in 0.5.6 behobenen Korrektur.
[ext] ¶
Eine kleine Ungenauigkeit im Sharding-Beispiel wurde behoben. Der Vergleich der Gleichheit von Spalten im ORM wird am besten mit col1.shares_lineage(col2) durchgeführt.
Referenzen: #1491
[ext] ¶
Entfernte ungenutzte load()-Methode von ShardedQuery.
Referenzen: #1606
0.5.6¶
Veröffentlicht: Sa 12. Sep 2009orm¶
[orm] ¶
Behobener Fehler, bei dem der Verweis-Diskriminator von Vererbung bei zusammengesetzten Primärschlüsseln bei Updates fehlschlug. Fortsetzung von.
Referenzen: #1300
[orm] ¶
Behobener Fehler, der es einer Seite einer bidirektionalen Many-to-Many-Beziehung nicht erlaubte, sich als „viewonly“ zu deklarieren.
Referenzen: #1507
[orm] ¶
Eine Assertion wurde hinzugefügt, die verhindert, dass eine @validates-Funktion oder eine andere AttributeExtension eine nicht geladene Sammlung lädt, so dass interne Zustände beschädigt werden könnten.
Referenzen: #1526
[orm] ¶
Behobener Fehler, der verhinderte, dass zwei Entitäten ihre Primärschlüsselwerte innerhalb eines einzigen flush() bei bestimmten Betriebsreihenfolgen gegenseitig ersetzten.
Referenzen: #1519
[orm] ¶
Behobenes obskures Problem, bei dem eine Joined-Table-Unterklasse mit einer selbstbezüglichen Eager-Ladung auf der Basisklasse das „Subclass“-Tabellendaten aus der „Subclass“-Tabelle des Elternteils füllte.
Referenzen: #1485
[orm] ¶
relations() haben nun größere Möglichkeiten, „überschrieben“ zu werden, d.h. eine Unterklasse, die explizit eine relation() überschreibt, die der Elternklasse gehört, wird während eines flush() berücksichtigt. Dies dient derzeit der Unterstützung von Many-to-Many-Beziehungen aus Concrete-Inheritance-Setups. Außerhalb dieses Anwendungsfalls, YMMV.
Referenzen: #1477
[orm] ¶
Es wurden einige unnötige „lazy loads“ aus relation() entfernt. Wenn eine Sammlung mutiert wird, lösen Many-to-One-Backrefs auf der anderen Seite keinen Ladevorgang des „alten“ Werts aus, es sei denn, „single_parent=True“ ist gesetzt. Eine direkte Zuweisung eines Many-to-One lädt immer noch den „alten“ Wert, um Backref-Sammlungen dieses Werts zu aktualisieren, die bereits in der Session vorhanden sein können, wodurch der Verhaltensvertrag von 0.5 beibehalten wird.
Referenzen: #1483
[orm] ¶
Behobener Fehler, bei dem ein Lade-/Aktualisierungsvorgang von Joined-Table-Inheritance-Attributen, die auf column_property() oder ähnlichem basierten, fehlschlug.
Referenzen: #1480
[orm] ¶
Verbesserte Unterstützung für MapperProperty-Objekte, die die einer geerbten Mapper für nicht-konkrete Vererbungskonfigurationen überschreiben – Attributerweiterungen kollidieren nicht zufällig miteinander.
Referenzen: #1488
[orm] ¶
UPDATE und DELETE unterstützen ORDER BY, LIMIT, OFFSET usw. in Standard-SQL nicht. Query.update() und Query.delete() lösen nun eine Ausnahme aus, wenn limit(), offset(), order_by(), group_by() oder distinct() aufgerufen wurden.
Referenzen: #1487
[orm] ¶
AttributeExtension zu sqlalchemy.orm.__all__ hinzugefügt
[orm] ¶
Verbesserte Fehlermeldung, wenn query() mit einem Nicht-SQL-/Entitätsausdruck aufgerufen wird.
Referenzen: #1476
[orm] ¶
Die Verwendung von False oder 0 als polymorpher Diskriminator funktioniert nun auf der Basisklasse sowie auf einer Unterklasse.
Referenzen: #1440
[orm] ¶
enable_assertions(False) zu Query hinzugefügt, das die üblichen Assertionen für erwartete Zustände deaktiviert – wird von Query-Unterklassen verwendet, um benutzerdefinierte Zustände zu entwickeln. Siehe https://sqlalchemy.de/trac/wiki/UsageRecipes/PreFilteredQuery für ein Beispiel.
Referenzen: #1424
[orm] ¶
Behobenes Rekurrensproblem, das auftrat, wenn die __len__() oder __nonzero__() Methode eines gemappten Objekts Zustandsänderungen zur Folge hatte.
Referenzen: #1501
[orm] ¶
Behobene fehlerhafte Ausnahmeauslösung in Weak/StrongIdentityMap.add()
Referenzen: #1506
[orm] ¶
Behobene Fehlermeldung für „could not find a FROM clause“ in query.join(), die fälschlicherweise ausgegeben wurde, wenn die Abfrage gegen eine reine SQL-Konstruktion gerichtet war.
Referenzen: #1522
[orm] ¶
Behobenes, wenn auch hypothetisches Problem, das dazu führte, dass der falsche Primärschlüssel für einen Mapper mit der alten polymorphic_union-Funktion berechnet wurde – das ist aber alter Kram.
Referenzen: #1486
sql¶
[sql] ¶
Behobener column.copy(), um defaults und onupdates zu kopieren.
Referenzen: #1373
[sql] ¶
Behobener Fehler in extract(), der in 0.5.4 eingeführt wurde und bei dem das Zeichenkettenargument „field“ als ClauseElement behandelt wurde, was verschiedene Fehler bei komplexeren SQL-Transformationen verursachte.
[sql] ¶
Unäre Ausdrücke wie DISTINCT propagieren ihre Typbehandlung zu Ergebnissets, wodurch Konvertierungen wie Unicode usw. stattfinden können.
Referenzen: #1420
[sql] ¶
Behobener Fehler in Table und Column, bei dem die Übergabe eines leeren Dictionaries für das „info“-Argument eine Ausnahme auslöste.
Referenzen: #1482
oracle¶
misc¶
[ext] ¶
Die von associationproxy erzeugten Proxy-Objekte sind nun pickelbar. Ein benutzerdefinierter proxy_factory ist jedoch weiterhin nicht pickelbar, es sei denn, er definiert __getstate__ und __setstate__.
Referenzen: #1446
[ext] ¶
Deklarativ wird eine informative Ausnahme auslösen, wenn __table_args__ als Tupel ohne dict-Argument übergeben wird. Verbesserte Dokumentation.
Referenzen: #1468
[ext] ¶
Tabellenobjekte, die in MetaData deklariert sind, können nun in Zeichenkettenausdrücken verwendet werden, die an primaryjoin/secondaryjoin/secondary gesendet werden – der Name wird aus der MetaData der deklarativen Basis gezogen.
Referenzen: #1527
[ext] ¶
Einer Joined-Table-Unterklasse kann eine Spalte hinzugefügt werden, nachdem die Klasse konstruiert wurde (d.h. durch Zuweisung eines Klassenattributs). Die Spalte wird wie immer zur zugrunde liegenden Tabelle hinzugefügt, aber nun wird der Mapper seinen „Join“ neu aufbauen, um die neue Spalte einzuschließen, anstatt eine Fehlermeldung wegen „no such column, use column_property() instead“ auszugeben.
Referenzen: #1523
[test] ¶
Beispiele wurden zur Testsuite hinzugefügt, damit sie regelmäßig ausgeführt und ein paar Deprecation Warnings aufgeräumt werden.
0.5.5¶
Veröffentlicht: Mo 13. Juli 2009general¶
orm¶
[orm] ¶
Das Argument „foreign_keys“ von relation() wird nun automatisch an die Backref weitergegeben, genauso wie primaryjoin und secondaryjoin. Für den extrem seltenen Anwendungsfall, bei dem die Backref einer relation() absichtlich unterschiedliche „foreign_keys“ konfiguriert hat, müssen nun beide Seiten explizit konfiguriert werden (wenn sie diese Einstellung tatsächlich benötigen, siehe nächste Anmerkung...).
[orm] ¶
...der einzige bekannte (und wirklich, wirklich seltene) Anwendungsfall, bei dem eine unterschiedliche foreign_keys-Einstellung auf der Vorwärts-/Rückwärtsseite verwendet wurde, ein zusammengesetzter Fremdschlüssel, der teilweise auf seine eigenen Spalten zeigt, wurde so erweitert, dass der fk->itself-Aspekt der Beziehung nicht zur Bestimmung der Beziehungsrichtung verwendet wird.
[orm] ¶
Session.mapper ist nun veraltet.
Rufen Sie session.add() auf, wenn Sie ein eigenständiges Objekt zu Ihrer Session hinzufügen möchten. Andernfalls wird nun eine DIY-Version von Session.mapper unter https://sqlalchemy.de/trac/wiki/UsageRecipes/SessionAwareMapper dokumentiert. Die Methode bleibt während 0.6 veraltet.
[orm] ¶
Behobener Fehler, bei dem Query() mit einem einzelnen Spalten einer Joined-Table-Unterklassen-Entität join() konnte, d.h. query(SubClass.foo, SubClass.bar).join(<anything>). In den meisten Fällen wurde die Fehlermeldung „Could not find a FROM clause to join from“ ausgegeben. In einigen anderen Fällen wurde das Ergebnis als Basisklasse anstelle der Unterklasse zurückgegeben – daher müssen Anwendungen, die sich auf dieses fehlerhafte Ergebnis verlassen haben, angepasst werden.
Referenzen: #1431
[orm] ¶
Behobener Fehler mit contains_eager(), der sich in einem bestimmten seltenen Fall auf einen sekundären (d.h. lazy) Ladevorgang anwendete und kartesische Produkte erzeugte. Die Zielgenauigkeit von query.options() bei sekundären Ladevorgängen wurde insgesamt verbessert.
Referenzen: #1461
[orm] ¶
Behobener Fehler in 0.5.4, bei dem Composite-Typen fehlschlugen, wenn Standard-Spalten geflusht wurden.
[orm] ¶
Behobener weiterer Fehler in 0.5.4, bei dem mutable Attribute (d.h. PickleType) nicht korrekt deserialisiert wurden, wenn das gesamte Objekt serialisiert wurde.
Referenzen: #1426
[orm] ¶
Behobener Fehler, bei dem session.is_modified() eine Ausnahme auslöste, wenn Synonyme verwendet wurden.
[orm] ¶
Behobenes potenzielles Speicherleck, bei dem zuvor gepickelte Objekte, die wieder in eine Session gelegt wurden, nicht vollständig garbage collected wurden, es sei denn, die Session wurde explizit geschlossen.
[orm] ¶
Behobener Fehler, bei dem Listen-basierte Attribute wie pickletype und PGArray nicht ordnungsgemäß gemergt() wurden.
[orm] ¶
Reparierte nicht funktionierende Attribute.set_committed_value Funktion.
[orm] ¶
Das Pickle-Format für InstanceState wurde komprimiert, was den Speicherbedarf von gepickelten Instanzen weiter reduziert. Das Format sollte abwärtskompatibel mit dem von 0.5.4 und früheren Versionen sein.
[orm] ¶
sqlalchemy.orm.join und sqlalchemy.orm.outerjoin werden nun zu __all__ in sqlalchemy.orm.* hinzugefügt.
Referenzen: #1463
[orm] ¶
Behobener Fehler, bei dem die Query-Ausnahmeauslösung fehlschlug, wenn ein zu kurzer zusammengesetzter Primärschlüsselwert an get() übergeben wurde.
Referenzen: #1458
sql¶
[sql] ¶
Entfernte eine obskure Funktion von execute() (einschließlich connection, engine, Session), bei der eine bindparam()-Konstruktion als Schlüssel im params-Dictionary übergeben werden konnte. Diese Verwendung ist undokumentiert und liegt im Kern eines Problems, bei dem das von einer text()-Konstruktion implizit erstellte bindparam()-Objekt denselben Hash-Wert wie eine im params-Dictionary platzierte Zeichenkette haben kann und zu einer unangemessenen Übereinstimmung bei der Berechnung der endgültigen Bindungsparameter führen kann. Interne Prüfungen auf diesen Zustand würden die kritische Aufgabe des Parameter-Rendering erheblich verlangsamen, daher wird das Verhalten entfernt. Dies ist eine rückwärtskompatible Änderung für jede Anwendung, die diese Funktion möglicherweise verwendet hat, jedoch wurde die Funktion nie dokumentiert.
misc¶
[engine/pool] ¶
Implementierte recreate() für StaticPool.
0.5.4p2¶
Veröffentlicht: Di 26. Mai 2009sql¶
[sql] ¶
Reparierte die Ausgabe von SQL-Ausnahmen, die nicht auf Parametern basieren oder keine executemany()-Stil sind.
postgresql¶
[postgresql] ¶
Die hartkodierte TIMESTAMP-Funktion wurde als veraltet markiert, die bei Verwendung als func.TIMESTAMP(value) „TIMESTAMP value“ rendert. Dies bricht auf einigen Plattformen, da PostgreSQL keine Bindungsparameter in diesem Kontext erlaubt. Die hartkodierte Großschreibung ist auch ungeeignet und es gibt viele andere PG-Casts, die wir unterstützen müssten. Verwenden Sie stattdessen Textkonstrukte, z.B. select([„timestamp ‚12/05/09‘“]).
0.5.4p1¶
Veröffentlicht: Mo 18. Mai 2009orm¶
[orm] ¶
Behobener Attributfehler, der in 0.5.4 eingeführt wurde und auftrat, wenn merge() mit einem unvollständigen Objekt verwendet wurde.
0.5.4¶
Veröffentlicht: So 17. Mai 2009orm¶
[orm] ¶
Signifikante Leistungsverbesserungen bei Sessions/flush() in Verbindung mit großen Mapper-Graphen, großen Objektmengen.
Alle* O(N)-Scanning-Verhalten aus dem flush()-Prozess entfernt, d.h. Operationen, die die gesamte Session gescannt haben, einschließlich einer extrem kostspieligen Operation, die fälschlicherweise annahm, dass Primärschlüsselwerte geändert wurden, obwohl dies nicht der Fall war.
Ein Randfall bleibt bestehen, der einen vollständigen Scan auslösen kann, wenn ein vorhandenes Primärschlüsselattribut auf einen neuen Wert geändert wird.
Das „Schwache Referenzierung“-Verhalten der Session ist nun vollständig – es werden keinerlei starke Referenzen auf ein gemapptes Objekt oder verwandte Elemente/Sammlungen in seinem __dict__ gemacht. Backrefs und andere Zyklen in Objekten beeinträchtigen nicht mehr die Fähigkeit der Session, alle Referenzen auf unveränderte Objekte zu verlieren. Objekte mit ausstehenden Änderungen werden bis zum flush weiterhin stark gehalten.
Die Implementierung verbessert auch die Leistung, indem der „Wiederbelebungsprozess“ von garbage collected Items nur noch für Mappings relevant ist, die „mutable“ Attribute abbilden (d.h. PickleType, zusammengesetzte Attribute). Dies entfernt Overhead aus dem GC-Prozess und vereinfacht das interne Verhalten.
Wenn eine „mutable“ Attributänderung die einzige Änderung an einem Objekt ist, das dann dereferenziert wird, hat der Mapper keinen Zugriff auf andere Attributzustände, wenn das UPDATE ausgegeben wird. Dies kann sich für einige MapperExtensions anders auswirken.
Die Änderung betrifft auch die interne Attribut-API, nicht aber die AttributeExtension-Schnittstelle oder irgendeine der öffentlich dokumentierten Attributfunktionen.
Die Einheit der Arbeit generiert nun keinen Graphen von „Abhängigkeits“-Prozessoren für den gesamten Graphen von Mappern während flush(), sondern erstellt solche Prozessoren nur für die Maper, die Objekte mit ausstehenden Änderungen repräsentieren. Dies spart eine gewaltige Anzahl von Methodenaufrufen im Kontext eines großen verbundenen Mapper-Graphen.
Zwischengespeicherte eine verschwenderische „Tabellensortierungs“-Operation, die zuvor mehrmals pro flush stattfand, und entfernte auch eine erhebliche Anzahl von Methodenaufrufen aus flush().
Andere redundante Verhaltensweisen wurden in mapper._save_obj() vereinfacht.
Referenzen: #1398
[orm] ¶
Query_cls auf DynamicAttributeImpl wurde modifiziert, um eine vollständige Mixin-Version von AppenderQuery zu akzeptieren, was die Unterklassifizierung von AppenderMixin ermöglicht.
[orm] ¶
Die Spalte „polymorphic discriminator“ kann Teil eines Primärschlüssels sein und wird mit dem korrekten Diskriminatorwert gefüllt.
Referenzen: #1300
[orm] ¶
Der Evaluator, der IS NULL-Klauseln nicht auswerten konnte, wurde behoben.
[orm] ¶
Die Funktion „set collection“ bei „dynamic“ Beziehungen wurde korrigiert, um Ereignisse korrekt zu initiieren. Zuvor konnte eine Sammlung nur einer ausstehenden Elterninstanz zugewiesen werden, andernfalls würden geänderte Ereignisse nicht korrekt ausgelöst. Set collection ist jetzt kompatibel mit merge(), Korrekturen.
Referenzen: #1352
[orm] ¶
Pickling von PropertyOption-Objekten, die mit instrumentierten Deskriptoren konstruiert wurden, wurde ermöglicht; zuvor traten Pickle-Fehler auf, wenn ein Objekt mit einer Deskriptor-basierten Option gepickelt wurde, wie z. B. query.options(eagerload(MyClass.foo)).
[orm] ¶
Der Lazy Loader wird get() nicht verwenden, wenn die „lazy load“ SQL-Klausel mit der Klausel übereinstimmt, die von get() verwendet wird, aber einige Parameter fest kodiert enthält. Zuvor schlug die Lazy-Strategie mit get() fehl. Idealerweise würde get() mit den fest kodierten Parametern verwendet werden, aber dies würde weitere Entwicklung erfordern.
Referenzen: #1357
[orm] ¶
MapperOptions und andere mit query.options() verbundene Zustände werden nicht mehr innerhalb von Callables gebündelt, die mit jedem Lazy-/Deferred-Loading-Attribut während eines Ladevorgangs verbunden sind. Die Optionen werden nun nur einmal mit dem Zustandsobjekt der Instanz verknüpft, wenn es populär ist. Dies eliminiert in den meisten Fällen die Notwendigkeit von Ladeobjekten pro Instanz/Attribut und verbessert die Lade-Geschwindigkeit und den Speicher-Overhead für einzelne Instanzen.
Referenzen: #1391
[orm] ¶
Eine weitere Stelle, an der Autoflush mit session.merge() interferierte, wurde behoben. Autoflush ist nun für die Dauer von merge() vollständig deaktiviert.
Referenzen: #1360
[orm] ¶
Fehler behoben, der die „mutable primary key“ Abhängigkeitslogik bei einer One-to-One-Beziehung() verhinderte.
Referenzen: #1406
[orm] ¶
Fehler in relation(), eingeführt in 0.5.3, behoben, bei dem eine selbstbezügliche Beziehung von einer Basisklasse zu einer Joined-Table-Subklasse nicht korrekt konfiguriert wurde.
[orm] ¶
Ein obskurer Mapper-Kompilierungsfehler behoben, wenn vererbte Mapper verwendet wurden, was zu uninitialisierten Attributen führte.
[orm] ¶
Dokumentation für session weak_identity_map korrigiert - der Standardwert ist True, was eine schwach referenzierende Map anzeigt.
[orm] ¶
Ein Unit-of-Work-Problem behoben, bei dem das Fremdschlüsselattribut eines Elements, das sich in einer von einem zu löschenden Objekt besessenen Sammlung befindet, nicht auf None gesetzt wurde, wenn die Beziehung() selbstbezüglich war.
Referenzen: #1376
[orm] ¶
Fehler bei Query.update() und Query.delete() mit eager-geladenen Beziehungen behoben.
Referenzen: #1378
[orm] ¶
Es ist nun ein Fehler, beide Spalten einer binären primaryjoin-Bedingung in der Sammlung foreign_keys oder remote_side anzugeben. Zuvor war es nur unsinnig, aber es gelang auf nicht-deterministische Weise.
sql¶
[sql] ¶
Die „compiler“-Erweiterung von SQLA 0.6 wurde zurückportiert. Dies ist eine standardisierte Schnittstelle, die die Erstellung von benutzerdefinierten ClauseElement-Unterklassen und Compilern ermöglicht. Insbesondere ist sie nützlich als Alternative zu text(), wenn man ein Konstrukt erstellen möchte, das datenbankspezifische Kompilierungen aufweist. Details finden Sie in der Dokumentation der Erweiterung.
[sql] ¶
Ausnahmemeldungen werden abgeschnitten, wenn die Liste der gebundenen Parameter größer als 10 ist. Dies verhindert, dass riesige mehrseitige Ausnahmen Bildschirme und Logdateien für große executemany()-Anweisungen füllen.
Referenzen: #1413
[sql] ¶
sqlalchemy.extract()ist nun dialekt-abhängig und kann Komponenten von Zeitstempeln idiomisch über die unterstützten Datenbanken, einschließlich SQLite, extrahieren.[sql] ¶
Die Methoden __repr__() und andere _get_colspec() auf ForeignKey, die aus einem __clause_element__() Stil-Konstrukt (d. h. deklarative Spalten) konstruiert wurden, wurden behoben.
Referenzen: #1353
schema¶
[schema] [1341] [ticket: 594] ¶
Zur IdentifierPreparer-Klasse wurde eine Methode quote_schema() hinzugefügt, damit Dialekte überschreiben können, wie Schemata behandelt werden. Dies ermöglicht dem MSSQL-Dialekt, Schemata als mehrteilige Identifikatoren zu behandeln, wie z. B. „database.owner“.
extensions¶
mysql¶
sqlite¶
mssql¶
[mssql] ¶
Die Funktionsweise von Savepoint-Logik wurde modifiziert, um zu verhindern, dass sie mit nicht-Savepoint-orientierten Routinen in Konflikt gerät. Die Savepoint-Unterstützung ist immer noch sehr experimentell.
[mssql] ¶
Reservierte Wörter für MSSQL wurden hinzugefügt, die Version 2008 und alle früheren Versionen abdecken.
Referenzen: #1310
[mssql] ¶
Ein Problem, bei dem die Informationsschema-Datenbank nicht mit einer Binär-Kollations-basierten Datenbank funktionierte, wurde behoben. Das Informationsschema wurde bereinigt, da es jetzt nur noch von mssql verwendet wird.
Referenzen: #1343
0.5.3¶
Veröffentlicht: Di 24. März 2009orm¶
[orm] ¶
Das Argument „objects“ für session.flush() ist veraltet. Der Zustand, der die Verknüpfung zwischen einem Eltern- und einem Kindobjekt darstellt, unterstützt keinen „flushed“-Status auf einer Seite der Verknüpfung und nicht auf der anderen, daher führt die Unterstützung dieser Operation zu irreführenden Ergebnissen.
Referenzen: #1315
[orm] ¶
Query implementiert jetzt __clause_element__(), das sein wählbares Element erzeugt. Das bedeutet, dass eine Query-Instanz in vielen SQL-Ausdrücken akzeptiert werden kann, einschließlich col.in_(query), union(query1, query2), select([foo]).select_from(query) usw.
[orm] ¶
Query.join() kann nun mehrere FROM-Klauseln erstellen, falls erforderlich. Zum Beispiel kann query(A, B).join(A.x).join(B.y) SELECT A.*, B.* FROM A JOIN X, B JOIN Y sagen. Eager Loading kann seine Joins auch an diese mehreren FROM-Klauseln anhängen.
Referenzen: #1337
[orm] ¶
Fehler in dynamic_loader() behoben, bei dem Append-/Remove-Ereignisse nach der Konstruktionszeit nicht an die UOW weitergegeben wurden, um sie beim Flush() zu erfassen.
Referenzen: #1347
[orm] ¶
Fehler behoben, bei dem column_prefix nicht überprüft wurde, bevor ein Attribut nicht zugeordnet wurde, das bereits einen klassenweiten Namen hatte.
[orm] ¶
Ein session.expire() für ein bestimmtes Sammlungsattribut löscht auch alle ausstehenden Backref-Hinzufügungen, sodass der nächste Zugriff korrekt nur das zurückgibt, was in der Datenbank vorhanden war. Dies stellt eine Art Workaround dar, obwohl wir erwägen, die Funktion flush([objects]) ganz zu entfernen.
Referenzen: #1315
[orm] ¶
Session.scalar() konvertiert nun rohe SQL-Zeichenfolgen auf die gleiche Weise wie Session.execute() in text() und akzeptiert die gleichen alternativen **kw-Argumente.
[orm] ¶
Verbesserungen an der „determine direction“-Logik von relation(), sodass die Richtung von kniffligen Situationen wie mapper(A.join(B)) -> relation-> mapper(B) bestimmt werden kann.
[orm] ¶
Beim Leeren von teilweisen Objektmengen mit session.flush([somelist]) werden ausstehende Objekte, die nach der Operation ausstehend bleiben, nicht versehentlich als persistent hinzugefügt.
Referenzen: #1306
[orm] ¶
Die Methode „post_configure_attribute“ wurde zu InstrumentationManager hinzugefügt, damit das Beispiel „listen_for_events.py“ wieder funktioniert.
Referenzen: #1314
[orm] ¶
Eine vorwärts und ergänzende rückwärts gerichtete Referenz, die beide in die gleiche Richtung gehen, d. h. ONETOMANY oder MANYTOONE, wird nun erkannt und eine Fehlermeldung ausgegeben. Spart verrückte CircularDependencyErrors später.
[orm] ¶
Fehler in Query bezüglich der gleichzeitigen Auswahl mehrerer Joined-Table-Vererbungseinheiten mit gemeinsamen Basisklassen behoben
Zuvor wurde die Anpassung, die auf „B“ in „A JOIN B“ angewendet wurde, fälschlicherweise teilweise auf „A“ angewendet.
Vergleiche von Beziehungen (d. h. A.related==someb) wurden nicht angepasst, wenn sie es hätten sein sollen.
Andere Filterungen, wie query(A).join(A.bs).filter(B.foo==’bar’), haben „B.foo“ fälschlicherweise so angepasst, als wäre es ein „A“.
[orm] ¶
Anpassung von EXISTS-Klauseln über any(), has() usw. in Verbindung mit einem alias-Objekt auf der linken Seite und of_type() auf der rechten Seite behoben.
Referenzen: #1325
[orm] ¶
Eine Hilfsmethode für Attribute
set_committed_valuein sqlalchemy.orm.attributes wurde hinzugefügt. Angesichts eines Objekts, eines Attributnamens und eines Werts wird der Wert auf dem Objekt als Teil seines „committed“-Zustands gesetzt, d. h. Zustand, der bekanntermaßen aus der Datenbank geladen wurde. Hilft bei der Erstellung von selbst erstellten Sammlungs-Ladern und ähnlichem.[orm] ¶
Query schlägt nicht mit weakref-Fehler fehl, wenn ein nicht-mapper/klassen-instrumentierter Deskriptor übergeben wird, löst stattdessen „Invalid column expression“ aus.
[orm] ¶
Query.group_by() berücksichtigt nun ordnungsgemäß die Aliasing, die auf die FROM-Klausel angewendet wurde, wie z. B. bei select_from(), using with_polymorphic() oder using from_self().
sql¶
[sql] ¶
Ein Alias() eines select() wird in eine „skalare Unterabfrage“ konvertiert, wenn es in einem eindeutig skalaren Kontext verwendet wird, d. h. es wird in einer Vergleichsoperation verwendet. Dies gilt auch für das ORM bei der Verwendung von query.subquery().
[sql] ¶
Das fehlende _label-Attribut auf Function-Objekten und anderen, wenn sie in einem select() mit use_labels (wie z. B. in einem ORM column_property()) verwendet wurden, wurde behoben.
Referenzen: #1302
[sql] ¶
Anonyme Aliasnamen werden nun auf die vom Dialekt maximal zulässige Länge gekürzt. Dies ist auf Datenbanken wie Oracle mit sehr kurzen Zeichenbeschränkungen wichtiger.
Referenzen: #1309
[sql] ¶
Das __selectable__() Interface wurde vollständig durch __clause_element__() ersetzt.
[sql] ¶
Der pro-Dialekt-Cache, der von TypeEngine zum Zwischenspeichern von dialektspezifischen Typen verwendet wird, ist nun ein WeakKeyDictionary. Dies soll verhindern, dass Dialektobjekte unendlich lange referenziert werden, wenn eine Anwendung eine beliebig große Anzahl von Engines oder Dialekten erstellt. Es gibt eine geringe Leistungseinbuße, die in 0.6 behoben wird.
Referenzen: #1299
extensions¶
[extensions] ¶
Ein rekursives Pickling-Problem im Serializer, das durch eine EXISTS- oder eine andere eingebettete FROM-Konstruktion ausgelöst wurde, wurde behoben.
[extensions] ¶
Deklarativ lokalisiert die „inherits“-Klasse durch eine Suche in __bases__, um Mixins zu überspringen, die lokal zu Unterklassen sind.
[extensions] ¶
Deklarativ ermittelt die primäre Join-Bedingung für die Joined-Table-Vererbung, auch wenn das Mapper-Argument „inherits“ explizit angegeben ist.
[extensions] ¶
Deklarativ interpretiert das Argument „foreign_keys“ für backref() ordnungsgemäß, wenn es sich um eine Zeichenkette handelt.
[extensions] ¶
Deklarativ akzeptiert eine Tabellen-gebundene Spalte als Eigenschaft, wenn sie in Verbindung mit __table__ verwendet wird, sofern die Spalte bereits in __table__ vorhanden ist. Die Spalte wird unter dem gegebenen Schlüssel neu zugeordnet, genauso wie beim Hinzufügen zu den mapper()-Eigenschaften.
postgresql¶
[postgresql] ¶
Die Reflexion eines Index schlägt nicht fehl, wenn ein Index mit mehreren Ausdrücken gefunden wird.
[postgresql] ¶
Die Typen PGUuid und PGBit wurden zu sqlalchemy.databases.postgres hinzugefügt.
Referenzen: #1327
[postgresql] ¶
Die Reflexion unbekannter PG-Typen stürzt nicht ab, wenn diese Typen innerhalb einer Domäne angegeben sind.
Referenzen: #1327
sqlite¶
[sqlite] ¶
SQLite-Reflexionsmethoden wurden korrigiert, sodass nicht vorhandenes cursor.description, das einen automatischen Cursor-Schluss auslöst, erkannt wird, damit keine Ergebnisse auf neueren Versionen von pysqlite fehlschlagen, die einen Fehler auslösen, wenn fetchone() mit keinen vorhandenen Zeilen aufgerufen wird.
mssql¶
0.5.2¶
Veröffentlicht: Sa 24. Jan 2009orm¶
[orm] ¶
Die Warnung von 0.5.1 bezüglich delete-orphan cascade auf einer Many-to-Many-Beziehung wurde weiter verfeinert. Zuerst die schlechte Nachricht: Die Warnung gilt sowohl für Many-to-Many- als auch für Many-to-One-Beziehungen. Dies ist notwendig, da SQLA in beiden Fällen nicht den vollständigen Satz potenzieller Eltern scannt, um den „Waisen“-Status zu ermitteln – für ein persistentes Objekt erkennt es nur ein De-Assoziationsereignis in Python, um das Objekt als „Waise“ zu etablieren. Nun die gute Nachricht: Um One-to-One über einen Fremdschlüssel oder eine Assoziationstabelle oder Many-to-One über eine Assoziationstabelle zu unterstützen, kann ein neues Flag single_parent=True gesetzt werden, das angibt, dass Objekte, die mit der Beziehung verknüpft sind, nur einen einzigen Elternteil haben sollen. Die Beziehung löst einen Fehler aus, wenn mehrere Eltern-Assoziationsereignisse innerhalb von Python auftreten.
[orm] ¶
Die Attribut-Instrumentierungsänderung von 0.5.1 wurde angepasst, um die Instrumentierung für Unterklassen vollständig zu etablieren, wenn der Mapper nach der vollständigen Instrumentierung der Oberklasse erstellt wurde.
Referenzen: #1292
[orm] ¶
Fehler in der delete-orphan-Kaskade behoben, bei dem zwei One-to-One-Beziehungen von zwei verschiedenen Elternklassen zur selben Zielklasse die Instanz vorzeitig aus dem Cache entfernt hätten.
[orm] ¶
Ein Fehler bei der Eager-Ladung wurde behoben, bei dem die selbstbezügliche Eager-Ladung andere Eager-Ladungen, selbstbezüglich oder nicht, daran hinderte, korrekt an den übergeordneten JOIN anzuschließen. Dank Alex K für die Erstellung eines großartigen Testfalls.
[orm] ¶
session.expire() und verwandte Methoden werden keine ungeladenen, verzögerten Attribute auslaufen lassen. Dies verhindert, dass sie unnötigerweise geladen werden, wenn die Instanz aktualisiert wird.
[orm] ¶
query.join()/outerjoin() werden nun einen alias-Konstrukt ordnungsgemäß mit der vorhandenen linken Seite verbinden, auch wenn query.from_self() oder query.select_from(someselectable) aufgerufen wurde.
Referenzen: #1293
sql¶
mssql¶
[mssql] ¶
Die Behandlung von convert_unicode wurde wiederhergestellt. Ergebnisse wurden ohne Konvertierung weitergegeben.
Referenzen: #1291
[mssql] ¶
Die Dezimalbehandlung wurde diesmal wirklich behoben..
Referenzen: #1282
[mssql] [Ticket:1289] ¶
Der Code zur Tabellenreflexion wurde modifiziert, um beim Erstellen von Tabellen nur Keywords zu verwenden.
0.5.1¶
Veröffentlicht: Sa 17. Jan 2009orm¶
[orm] ¶
Ein interner Join-Cache, der potenziell Speicherlecks verursachen konnte, wenn query.join() wiederholt für Ad-hoc-Selectables aufgerufen wurde, wurde entfernt.
[orm] ¶
Die Session-Methoden „clear()“, „save()“, „update()“, „save_or_update()“ sind veraltet und wurden durch „expunge_all()“ und „add()“ ersetzt. „expunge_all()“ wurde auch zu ScopedSession hinzugefügt.
[orm] ¶
Der „no mapped table“-Ausnahmefehler wurde modernisiert und ein expliziterer __table__/__tablename__-Ausnahmefehler für deklarative Konstrukte hinzugefügt.
[orm] ¶
Konkrete erbende Mapper instrumentieren nun Attribute, die von der Oberklasse geerbt wurden, aber nicht für den konkreten Mapper selbst definiert sind, mit einem InstrumentedAttribute, das bei Zugriff einen beschreibenden Fehler ausgibt.
Referenzen: #1237
[orm] ¶
Ein neues relation() Schlüsselwort back_populates wurde hinzugefügt. Dies ermöglicht die Konfiguration von Backreferences über explizite Beziehungen. Dies ist erforderlich, wenn bidirektionale Beziehungen zwischen einer Hierarchie von konkreten Mappern und einer anderen Klasse erstellt werden.
[orm] ¶
Testabdeckung für relation()-Objekte, die auf konkreten Mappern angegeben sind, wurde hinzugefügt.
Referenzen: #1237
[orm] ¶
Query.from_self() sowie query.subquery() deaktivieren beide das Rendern von Eager-Joins innerhalb der erzeugten Unterabfrage. Die Funktion „alle Eager-Joins deaktivieren“ ist öffentlich über ein neues generatives query.enable_eagerloads() verfügbar.
Referenzen: #1276
[orm] ¶
Eine rudimentäre Reihe von Mengenoperationen für Query wurde hinzugefügt, die Query-Objekte als Argumente empfangen, einschließlich union(), union_all(), intersect(), except_(), intersect_all(), except_all(). Beispiele finden Sie in der API-Dokumentation für Query.union().
[orm] ¶
Fehler behoben, der verhinderte, dass Query.join() und eagerloads an eine Abfrage angehängt wurden, die aus einer Union oder einer alias-Union auswählte.
[orm] ¶
Ein kurzes Dokumentationsbeispiel für bidirektionale Beziehungen, die auf konkreten Mappern angegeben sind, wurde hinzugefügt.
Referenzen: #1237
[orm] ¶
Mapper instrumentieren nun Klassenattribute bei der Konstruktion mit dem endgültigen InstrumentedAttribute-Objekt, das persistent bleibt. Die Methodik _CompileOnAttr/__getattribute__() wurde entfernt. Nettoeffekt ist, dass Spalten-basierte zugeordnete Klassenattribute nun vollständig auf Klassenebene verwendet werden können, ohne eine Mapper-Kompilierungsoperation auszulösen, was typische Nutzungsmuster innerhalb von deklarativen Konstrukten erheblich vereinfacht.
Referenzen: #1269
[orm] ¶
ColumnProperty (und Front-End-Helfer wie
deferred) ignoriert nicht mehr unbekannte **Keyword-Argumente.[orm] ¶
Ein Fehler beim „Zeilenumschalt“-Mechanismus des Unit of Work, d. h. der Umwandlung von INSERT/DELETE in ein UPDATE, wurde behoben, wenn er mit Joined-Table-Vererbung und einem Objekt kombiniert wurde, das keine definierten Werte für die Kind-Tabelle enthielt, wo ein UPDATE ohne SET-Klausel gerendert worden wäre.
[orm] ¶
Die Verwendung von delete-orphan bei einer Many-to-Many-Beziehung ist veraltet. Dies führt zu irreführenden oder fehlerhaften Ergebnissen, da SQLA nicht die vollständige Liste der „Eltern“ für m2m abruft. Um das delete-orphan-Verhalten mit einer m2m-Tabelle zu erhalten, verwenden Sie eine explizite Assoziationsklasse, sodass die einzelne Assoziationszeile als Elternteil behandelt wird.
Referenzen: #1281
[orm] ¶
Die delete-orphan-Kaskade erfordert immer eine delete-Kaskade. Das angeben von delete-orphan ohne delete löst nun eine Veraltungswarnung aus.
Referenzen: #1281
sql¶
schema¶
[schema] ¶
Index akzeptiert nun spaltenorientierte InstrumentedAttributes (d. h. spaltenbasierte zugeordnete Klassenattribute) als Spaltenargumente.
Referenzen: #1214
[schema] ¶
Eine Spalte ohne Namen (wie in deklarativen Konstrukten) löst keinen NoneType-Fehler aus, wenn ihre String-Ausgabe angefordert wird (z. B. in einem Stack-Trace).
[schema] ¶
Fehler behoben, wenn eine Column mit einem ForeignKey auf einer reflektierten Tabelle überschrieben wurde, wobei abgeleitete Spalten (d. h. die „virtuellen“ Spalten eines select usw.) versehentlich Schema-Level-Bereinigungslogik aufriefen, die nur für die ursprüngliche Spalte bestimmt war.
Referenzen: #1278
mysql¶
[mysql] ¶
Die fehlenden Schlüsselwörter von MySQL 4.1 wurden hinzugefügt, damit sie ordnungsgemäß escaped werden.
mssql¶
[mssql] ¶
Die Handhabung großer Dezimalwerte mit robusteren Tests wurde korrigiert. String-Manipulationen bei Floats wurden entfernt.
Referenzen: #1280
[mssql] ¶
Die do_begin-Handhabung in mssql wurde modifiziert, um den Cursor anstelle der Verbindung zu verwenden, damit sie DBAPI-kompatibel ist.
[mssql] ¶
Die SAVEPOINT-Unterstützung für adodbapi wurde korrigiert, indem die Handhabung von savepoint_release geändert wurde, die unter mssql nicht unterstützt wird.
misc¶
[declarative] ¶
Es können nun Column-Objekte auf Unterklassen angegeben werden, die keine eigene Tabelle haben (d. h. Single-Table-Vererbung verwenden). Die Spalten werden an die Basis-Tabelle angehängt, aber nur von der Unterklasse zugeordnet.
[declarative] ¶
Sowohl für Joined- als auch für Single-Inheriting-Unterklassen ordnet die Unterklasse nur die Spalten zu, die bereits in der Oberklasse zugeordnet sind und die explizit in der Unterklasse definiert sind. Andere Spalten, die in der Table vorhanden sind, werden standardmäßig aus der Zuordnung ausgeschlossen, was durch Übergabe einer leeren exclude_properties-Sammlung an die __mapper_args__ deaktiviert werden kann. Dies liegt daran, dass Single-Inheriting-Klassen, die ihre eigenen Spalten definieren, die einzigen Klassen sind, die diese Spalten zuordnen. Die Auswirkung ist tatsächlich eine organisiertere Zuordnung, als man sie normalerweise mit expliziten mapper()-Aufrufen erhalten würde, es sei denn, man setzt die exclude_properties-Argumente explizit.
[declarative] ¶
Es ist ein Fehler, neue Column-Objekte zu einer deklarativen Klasse hinzuzufügen, die eine vorhandene Tabelle mit __table__ angegeben hat.
0.5.0¶
Veröffentlicht: Di 06. Jan 2009general¶
[general] ¶
Die Dokumentation wurde in Sphinx konvertiert. Insbesondere wurde die generierte API-Dokumentation zu einem vollwertigen „API-Referenz“-Abschnitt zusammengefasst, der redaktionelle Dokumentation mit generierten Docstrings kombiniert. Querverweise zwischen Abschnitten und API-Dokumentation sind erheblich verbessert, eine JavaScript-gestützte Suchfunktion ist vorhanden und ein vollständiger Index aller Klassen, Funktionen und Member wird bereitgestellt.
[allgemein] ¶
setup.py importiert setuptools jetzt nur noch optional. Wenn es nicht vorhanden ist, wird distutils verwendet. Der neue Installer „pip“ wird gegenüber easy_install empfohlen, da er auf eine vereinfachte Weise installiert.
[allgemein] ¶
Fügt eine extrem einfache Illustration einer PostGIS-Integration zum Beispieleordner hinzu.
orm¶
[orm] ¶
Query.with_polymorphic() akzeptiert jetzt ein drittes Argument „discriminator“, das den Wert von mapper.polymorphic_on für diese Abfrage ersetzt. Mapper selbst erfordern nicht mehr, dass polymorphic_on gesetzt ist, auch wenn der Mapper eine polymorphic_identity hat. Wenn nicht gesetzt, lädt der Mapper standardmäßig nicht-polymorph. Zusammen ermöglichen diese beiden Funktionen eine nicht-polymorphe konkrete Vererbungsstruktur, um polymorphes Laden pro Abfrage zu verwenden, da konkrete Strukturen bei durchgängiger polymorpher Verwendung anfällig für viele Probleme sind.
[orm] ¶
dynamic_loader akzeptiert query_class=, um die Query-Klassen anzupassen, die sowohl für die dynamische Sammlung als auch für daraus erstellte Abfragen verwendet werden.
[orm] ¶
query.order_by() akzeptiert None, was alle ausstehenden Order-By-Status aus der Abfrage entfernt und jegliche Mapper/Relation-konfigurierte Sortierung aufhebt. Dies ist hauptsächlich nützlich, um die auf einem dynamic_loader() angegebene Sortierung zu überschreiben.
Referenzen: #1079
[orm] ¶
Beim Kompilieren von Mappern ausgelöste Ausnahmen werden jetzt beibehalten, um ein „klebriges Verhalten“ zu gewährleisten – wenn ein hasattr()-Aufruf auf einem vorab kompilierten gemappten Attribut eine fehlschlagende Kompilierung auslöst und die Ausnahme unterdrückt, wird die nachfolgende Kompilierung blockiert und die Ausnahme wird beim nächsten compile()-Aufruf wiederholt. Dieses Problem tritt häufig bei der Verwendung von Deklarativ auf.
[orm] ¶
property.of_type() wird jetzt auf einem Single-Table-Inheriting-Ziel erkannt, wenn es im Kontext von prop.of_type(..).any()/has() sowie query.join(prop.of_type(…)) verwendet wird.
[orm] ¶
query.join() löst einen Fehler aus, wenn das Ziel des Joins nicht mit dem eigenschaftenbasierten Attribut übereinstimmt – während es unwahrscheinlich ist, dass jemand dies tut, war der SQLAlchemy-Autor selbst schuldig an diesem besonderen laschen Verhalten.
[orm] ¶
Fehler behoben, bei dem bei Verwendung von weak_instance_map=False modifizierte Ereignisse für einen Flush() nicht abgefangen wurden.
Referenzen: #1272
[orm] ¶
Einige tiefgreifende Probleme mit der „Spaltenkorrespondenz“ wurden behoben, die eine Abfrage auf einem auswählbaren Element mit mehreren Versionen derselben Tabelle sowie Vereinigungen und ähnlichem, die dieselben Tabellenspalten an unterschiedlichen Spaltenpositionen auf verschiedenen Ebenen enthielten, beeinflussen konnten.
Referenzen: #1268
[orm] ¶
Benutzerdefinierte Comparator-Klassen, die in Verbindung mit column_property(), relation() usw. verwendet werden, können neue Vergleichsmethoden auf dem Comparator definieren, die über __getattr__() auf dem InstrumentedAttribute verfügbar werden. Im Falle von synonym() oder comparable_property() werden Attribute zuerst auf dem benutzerdefinierten Deskriptor und dann auf dem benutzerdefinierten Comparator aufgelöst.
[orm] ¶
Der Accessor ScopedSession.is_active wurde hinzugefügt.
Referenzen: #976
[orm] ¶
Gemappte Attribute und Spaltenobjekte können als Schlüssel für query.update({}) übergeben werden.
Referenzen: #1262
[orm] ¶
Gemappte Attribute, die an die values() eines expression-level insert() oder update() übergeben werden, verwenden die Schlüssel der gemappten Spalten und nicht die des gemappten Attributs.
[orm] ¶
Problem behoben, bei dem Query.delete() und Query.update() mit Bindungsparametern nicht korrekt funktionierten.
Referenzen: #1242
[orm] ¶
Query.select_from(), from_statement() stellen sicher, dass das angegebene Argument eine FromClause bzw. Text/Select/Union ist.
[orm] ¶
Query() kann ein „zusammengesetztes“ Attribut als Spaltenausdruck übergeben werden, und es wird erweitert. Dies steht in losem Zusammenhang mit.
Referenzen: #1253
[orm] ¶
Query() ist etwas robuster, wenn verschiedene Spaltenausdrücke wie Strings, Klausellisten, Text()-Konstrukte übergeben werden (was bedeutet, dass es jetzt einfach besser formatierte Fehler auslöst).
[orm] ¶
first() funktioniert wie erwartet mit Query.from_statement().
[orm] ¶
Fehler behoben, der in 0.5rc4 eingeführt wurde und bei dem das Eager Loading für Eigenschaften, die einem Mapper nach der Kompilierung über add_property() oder Ähnliches hinzugefügt wurden, nicht funktionierte.
[orm] ¶
Fehler behoben, bei dem eine Many-to-Many-Relation() mit viewonly=True die Verbindung zwischen secondary->remote nicht korrekt referenzierte.
[orm] ¶
Doppelte Einträge in einer Listen-basierten Sammlung bleiben erhalten, wenn INSERTs an eine „sekundäre“ Tabelle in einer Many-to-Many-Relation ausgegeben werden. Unter der Annahme, dass die m2m-Tabelle eine eindeutige oder primäre Schlüsselbeschränkung hat, löst dies die erwartete Beschränkungsverletzung aus, anstatt die doppelten Einträge stillschweigend fallen zu lassen. Beachten Sie, dass das alte Verhalten für eine One-to-Many-Relation beibehalten wird, da Sammlungs-Einträge in diesem Fall keine INSERT-Anweisungen zur Folge haben und SQLA Sammlungen nicht manuell prüft.
Referenzen: #1232
[orm] ¶
Query.add_column() kann FromClause-Objekte auf dieselbe Weise akzeptieren wie session.query().
[orm] ¶
Der Vergleich einer Many-to-One-Relation mit NULL wird korrekt in IS NOT NULL basierend auf not_() umgewandelt.
[orm] ¶
Zusätzliche Prüfungen wurden hinzugefügt, um sicherzustellen, dass explizite primaryjoin/secondaryjoin ClauseElement-Instanzen sind, um spätere verwirrendere Fehler zu vermeiden.
Referenzen: #1087
[orm] ¶
Verbesserte Mapper()-Prüfung auf Nicht-Klassen-Klassen.
Referenzen: #1236
[orm] ¶
Das Argument comparator_factory ist jetzt dokumentiert und wird von allen MapperProperty-Typen unterstützt, einschließlich column_property(), relation(), backref() und synonym().
Referenzen: #5051
[orm] ¶
Der Name von PropertyLoader wurde in RelationProperty geändert, um mit allen anderen Namen übereinzustimmen. PropertyLoader ist weiterhin als Synonym vorhanden.
[orm] ¶
Fehler behoben bei doppeltem iter()-Aufruf, der Bus-Fehler in der Shard-API verursachte, fehlerhaftes result.close() entfernt, das aus der Version 0.4 übrig geblieben war.
[orm] ¶
Session.merge-Kaskaden lösen kein Autoflush mehr aus. Behebt Probleme mit vorzeitig eingefügten zusammengeführten Instanzen mit fehlenden Werten.
[orm] ¶
Zwei Korrekturen, um zu verhindern, dass externe Spalten in polymorphen Union-Vererbungsszenarien gerendert werden (was dann zusätzliche Tabellen in der FROM-Klausel rendert und kartesische Produkte verursacht).
Verbesserungen der „Spaltenanpassung“ für a->b->c Vererbungssituationen, um Spalten besser zu lokalisieren, die über mehrere Indirektionsstufen miteinander verbunden sind, anstatt die nicht angepasste Spalte zu rendern.
Die Spalte „polymorpher Diskriminator“ wird nur für den Mapper gerendert, gegen den gerade abgefragt wird. Die Spalte wird nicht von einem Unterklassen- oder Oberklassen-Mapper „gezogen“, da sie nicht benötigt wird.
[orm] ¶
Shard_id-Argument für ShardedSession.execute() behoben.
Referenzen: #1072
sql¶
[sql] ¶
RowProxy-Objekte können anstelle von Dictionary-Argumenten verwendet werden, die an connection.execute() und ähnliche übergeben werden.
Referenzen: #935
[sql] ¶
Spalten können wieder Prozentzeichen in ihren Namen enthalten.
Referenzen: #1256
[sql] ¶
sqlalchemy.sql.expression.Function ist jetzt eine öffentliche Klasse. Sie kann abgeleitet werden, um benutzerdefinierte SQL-Funktionen im imperativen Stil bereitzustellen, einschließlich vordefinierter Verhaltensweisen. Das Beispiel postgis.py veranschaulicht eine Verwendung davon.
[sql] ¶
PickleType bevorzugt standardmäßig die ==-Vergleichung, wenn das eingehende Objekt (wie ein Dict) __eq__() implementiert. Wenn das Objekt __eq__() nicht implementiert und mutable=True ist, wird eine Deprecation-Warnung ausgegeben.
[sql] ¶
Behobene Import-Eigenheiten in sqlalchemy.sql, um __names__ nicht zu exportieren.
Referenzen: #1215
[sql] ¶
Die wiederholte Verwendung desselben ForeignKey-Objekts löst einen Fehler aus, anstatt später stillschweigend zu fehlschlagen.
Referenzen: #1238
[sql] ¶
NotImplementedError für die params()-Methode bei Insert/Update/Delete-Konstrukten hinzugefügt. Diese Elemente unterstützen derzeit diese Funktionalität nicht, was im Vergleich zu values() auch etwas irreführend wäre.
[sql] ¶
Reflektierte Fremdschlüssel lokalisieren ihre referenzierte Spalte korrekt, auch wenn der Spalte ein „key“-Attribut zugewiesen wurde, das sich vom reflektierten Namen unterscheidet. Dies wird durch ein neues Flag in ForeignKey/ForeignKeyConstraint namens „link_to_name“ erreicht. Wenn True, bedeutet dies, dass der angegebene Name der Name der referenzierten Spalte ist, nicht ihr zugewiesener Schlüssel.
Referenzen: #650
[sql] ¶
select() kann eine ClauseList als Spalte auf dieselbe Weise akzeptieren wie eine Tabelle oder ein anderes auswählbares Element, und die inneren Ausdrücke werden als Spaltenelemente verwendet.
Referenzen: #1253
[sql] ¶
Das „passive“-Flag bei session.is_modified() wird korrekt an den Attribut-Manager weitergegeben.
[sql] ¶
union() und union_all() werden keine order_by()-Klauseln, die auf die darin enthaltenen select()-Anweisungen angewendet wurden, überschreiben. Wenn Sie select() mit order_by() union()-en (vermutlich zur Unterstützung von LIMIT/OFFSET), sollten Sie auch self_group() darauf anwenden, um Klammern zu setzen.
mysql¶
[mysql] ¶
„%“-Zeichen in text()-Konstrukten werden automatisch zu „%%“ escaped. Aufgrund der rückwärts inkompatiblen Natur dieser Änderung wird eine Warnung ausgegeben, wenn „%%“ in der Zeichenkette erkannt wird.
[mysql] ¶
Fehler bei der Ausnahmebehandlung behoben, wenn FK-Spalten während der Reflexion nicht vorhanden waren.
Referenzen: #1241
[mysql] ¶
Fehler behoben bei der Reflexion einer Tabelle im Remote-Schema mit einem Fremdschlüsselbezug zu einer anderen Tabelle in diesem Schema.
sqlite¶
mssql¶
[mssql] ¶
Neuer Typ MSGenericBinary hinzugefügt. Dieser bildet auf den Binary-Typ ab, sodass er das spezialisierte Verhalten implementieren kann, Längen-spezifizierte Typen als feste Binary-Typen und nicht-Längen-Typen als ungebundene variable Länge Binary-Typen zu behandeln.
[mssql] ¶
Neue Typen hinzugefügt: MSVarBinary und MSImage.
Referenzen: #1249
[mssql] ¶
Die Typen MSReal, MSNText, MSSmallDateTime, MSTime, MSDateTimeOffset und MSDateTime2 wurden hinzugefügt.
[mssql] ¶
Die Datums-/Uhrzeittypen wurden umgestaltet. Der Datentyp `smalldatetime` schneidet nicht mehr nur das Datum ab, sondern wird jetzt dem Typ MSSmallDateTime zugeordnet.
Referenzen: #1254
[mssql] ¶
Problem mit Numerics behoben, um einen Int zu akzeptieren.
[mssql] ¶
Die Zeichenlänge `char_length` wurde der Funktion `LEN()` zugeordnet.
[mssql] ¶
Wenn ein INSERT eine Subquery enthält, wird der INSERT von einem INSERT INTO VALUES-Konstrukt in ein INSERT INTO SELECT-Konstrukt umgewandelt.
[mssql] ¶
Wenn die Spalte Teil eines Primärschlüssels ist, wird sie als NOT NULL behandelt, da MSSQL NULL in Primärschlüsselspalten nicht zulässt.
[mssql] ¶
MSBinary gibt jetzt einen BINARY statt eines IMAGE zurück. Dies ist eine rückwärts inkompatible Änderung, da BINARY ein Datentyp fester Länge ist, während IMAGE ein Datentyp variabler Länge ist.
Referenzen: #1249
[mssql] ¶
`get_default_schema_name` wird jetzt aus der Datenbank basierend auf dem Standard-Schema des Benutzers reflektiert. Dies funktioniert nur mit MSSQL 2005 und höher.
Referenzen: #1258
[mssql] ¶
Unterstützung für Kollektionen wurde durch die Verwendung eines neuen Kollektionsarguments hinzugefügt. Dies wird für folgende Typen unterstützt: char, nchar, varchar, nvarchar, text, ntext.
Referenzen: #1248
[mssql] ¶
Änderungen an den Verbindungszeichenkettenparametern bevorzugen DSN als Standardangabe für pyodbc. Detaillierte Anweisungen finden Sie im Docstring von mssql.py.
[mssql] ¶
Experimentelle Unterstützung für Savepoints wurde hinzugefügt. Sie funktioniert derzeit noch nicht vollständig mit Sessions.
[mssql] ¶
Unterstützung für drei Ebenen der Spalten-Nullbarkeit: NULL, NOT NULL und der konfigurierte Standardwert der Datenbank. Die Standard-Spaltenkonfiguration (nullable=True) erzeugt nun NULL im DDL. Zuvor wurde keine Angabe gemacht und der Datenbankstandard trat in Kraft (normalerweise NULL, aber nicht immer). Um den Datenbankstandard explizit anzufordern, konfigurieren Sie Spalten mit nullable=None und es wird keine Angabe im DDL ausgegeben. Dies ist ein rückwärts inkompatibles Verhalten.
Referenzen: #1243
oracle¶
[oracle] ¶
Das Format von create_xid() wurde angepasst, um den Zwei-Phasen-Commit zu reparieren. Wir haben jetzt Feldberichte darüber, dass Oracle Zwei-Phasen-Commit mit dieser Änderung ordnungsgemäß funktioniert.
[oracle] ¶
Der Typ OracleNVarchar wurde hinzugefügt, der NVARCHAR2 erzeugt und auch Unicode unterklassifiziert, sodass convert_unicode=True standardmäßig aktiviert ist. NVARCHAR2 wird automatisch in diesen Typ reflektiert, sodass diese Spalten mit einer reflektierten Tabelle ohne explizite convert_unicode=True-Flags Unicode übergeben.
Referenzen: #1233
[oracle] ¶
Fehler behoben, der verhinderte, dass Out-Parameter bestimmter Typen empfangen wurden; vielen Dank an huddlej an wwu.edu!
Referenzen: #1265
misc¶
[dialect] ¶
Ein neues Attribut description_encoding wurde zum Dialekt hinzugefügt, das zum Kodieren des Spaltennamens beim Verarbeiten der Metadaten verwendet wird. Dies ist normalerweise auf utf-8 voreingestellt.
[engine/pool] ¶
Connection.invalidate() prüft auf den geschlossenen Status, um Attributfehler zu vermeiden.
Referenzen: #1246
[engine/pool] ¶
NullPool unterstützt das Wiederverbinden nach einem Fehler.
Referenzen: #1094
[engine/pool] ¶
Ein Mutex für die anfängliche Poolerstellung wurde hinzugefügt, wenn pool.manage(dbapi) verwendet wird. Dies verhindert ein geringfügiges „Dogpile“-Verhalten, das ansonsten beim Start unter starker Last auftreten würde.
Referenzen: #799
[engine/pool] ¶
_execute_clauseelement() ist wieder eine private Methode. Das Ableiten von Connection ist nicht mehr notwendig, da ConnectionProxy jetzt verfügbar ist.
[documentation] ¶
Tickets.
[documentation] ¶
Hinweis zu create_session()-Standardwerten hinzugefügt.
[documentation] ¶
Abschnitt über metadata.reflect() hinzugefügt.
[documentation] ¶
Abschnitt zu TypeDecorator aktualisiert.
[documentation] ¶
Den Abschnitt über die „threadlocal“-Strategie der Dokumentation neu geschrieben, da es in letzter Zeit Verwirrung über diese Funktion gab.
[documentation] ¶
Veraltete Dokumentation zu ‚polymorphic_fetch‘ und ‚select_table‘ aus der Vererbung entfernt, die zweite Hälfte von „joined table inheritance“ überarbeitet.
[documentation] ¶
Das kwarg comparator_factory wurde dokumentiert, neuer Dokumentationsabschnitt „Custom Comparators“ hinzugefügt.
[postgres] ¶
„%“-Zeichen in text()-Konstrukten werden automatisch zu „%%“ escaped. Aufgrund der rückwärts inkompatiblen Natur dieser Änderung wird eine Warnung ausgegeben, wenn „%%“ in der Zeichenkette erkannt wird.
Referenzen: #1267
[postgres] ¶
Der Aufruf von alias.execute() in Verbindung mit server_side_cursors löst keine AttributeError mehr aus.
[postgres] ¶
Unterstützung für die Indexreflexion für PostgreSQL hinzugefügt, unter Verwendung eines großartigen Patches, den wir lange vernachlässigt haben und der von Ken Kuhlman eingereicht wurde.
Referenzen: #714
[associationproxy] ¶
Die Association Proxy-Eigenschaften werden auf Klassenebene verfügbar gemacht, z. B. MyClass.aproxy. Zuvor wertete dies zu None aus.
[declarative] ¶
Die vollständige Liste der Argumente, die als String von backref() akzeptiert werden, umfasst ‚primaryjoin‘, ‚secondaryjoin‘, ‚secondary‘, ‚foreign_keys‘, ‚remote_side‘, ‚order_by‘.
0.5.0rc4¶
Veröffentlicht: Fr 14. Nov 2008general¶
[allgemein] ¶
Globale Änderung von „propigate“ zu „propagate“.
orm¶
[orm] ¶
Query.count() wurde erweitert, um in einer größeren Vielfalt von Fällen das „richtige“ zu tun. Es kann jetzt Mehrfach-Entitätsabfragen sowie Spalten-basierte Abfragen zählen. Beachten Sie, dass dies bedeutet, dass query(A, B).count() ohne ein Joining-Kriterium das kartesische Produkt von A*B zählt. Jede Abfrage, die sich gegen Spalten-basierte Entitäten richtet, gibt automatisch „SELECT count(1) FROM (SELECT…)“ aus, sodass die tatsächliche Anzahl der Zeilen zurückgegeben wird. Das bedeutet, dass eine Abfrage wie query(func.count(A.name)).count() einen Wert von eins zurückgibt, da diese Abfrage eine Zeile zurückgeben würde.
[orm] ¶
Viele Leistungsoptimierungen. Eine grobe Schätzung über verschiedene ORM-Operationen hinweg platziert es 10 % schneller als 0.5.0rc3, 25-30 % schneller als 0.4.8.
[orm] ¶
Fehlerbehebungen und Verhaltensänderungen
[orm] ¶
Anpassungen der erweiterten Garbage Collection bei InstanceState, um Fehler aufgrund verlorener Zustände besser zu vermeiden.
[orm] ¶
Query.get() gibt eine aussagekräftigere Fehlermeldung aus, wenn es gegen mehrere Entitäten ausgeführt wird.
Referenzen: #1220
[orm] ¶
NotImplementedError bei Cls.relation.in_() wiederhergestellt.
[orm] ¶
PendingDeprecationWarning im Zusammenhang mit dem Parameter order_by in relation() behoben.
Referenzen: #1226
sql¶
[sql] ¶
Das Attribut ‚properties‘ des Connection-Objekts wurde entfernt. Connection.info sollte verwendet werden.
[sql] ¶
Abrufen der „aktiven Zeilenanzahl“ vor dem automatischen Schließen des Cursors durch ResultProxy wiederhergestellt. Dies wurde in 0.5rc3 entfernt.
[sql] ¶
Die Methode `load_dialect_impl()` in `TypeDecorator` wurde neu angeordnet, sodass sie auch dann wirksam wird, wenn der benutzerdefinierte `TypeDecorator` einen anderen `TypeDecorator` als seine Implementierung verwendet.
mssql¶
[mssql] ¶
Viele Bereinigungen und Korrekturen zur Behebung von Problemen mit limit und offset.
[mssql] ¶
Situation korrigiert, in der Subqueries als Teil eines binären Ausdrucks übersetzt werden mussten, um die Syntax IN und NOT IN zu verwenden.
[mssql] ¶
Problem mit der E-Notation behoben, das die Einfügung von Dezimalwerten kleiner als 1E-6 verhinderte.
Referenzen: #1216
[mssql] ¶
Probleme bei der Reflexion behoben, wenn Schemata behandelt wurden, insbesondere wenn diese Schemata das Standard-Schema waren.
Referenzen: #1217
[mssql] ¶
Problem behoben beim Umwandeln eines Elements mit Null-Länge in einen varchar. Es wird nun die CAST korrekt angepasst.
misc¶
[access] ¶
Unterstützung für den Currency-Typ hinzugefügt.
[access] ¶
Funktionen gaben ihr Ergebnis nicht zurück.
Referenzen: #1017
[access] ¶
Problem mit Joins behoben. Access unterstützt nur LEFT OUTER oder INNER, nicht nur JOIN allein.
Referenzen: #1017
[ext] ¶
Es ist jetzt möglich, eine benutzerdefinierte „inherit_condition“ in __mapper_args__ zu verwenden, wenn deklarativ verwendet wird.
[ext] ¶
Behoben, dass String-basierte ‚remote_side‘, ‚order_by‘ und andere nicht korrekt weitergegeben wurden, wenn sie in backref() verwendet wurden.
0.5.0rc3¶
Veröffentlicht: Fr 07. Nov 2008orm¶
[orm] ¶
Zwei neue Hooks für SessionExtension wurden hinzugefügt: after_bulk_delete() und after_bulk_update(). after_bulk_delete() wird nach einer Massenlöschung() einer Abfrage aufgerufen. after_bulk_update() wird nach einer Massenaktualisierung() einer Abfrage aufgerufen.
[orm] ¶
Ungleichheitsvergleiche einer einfachen Many-to-One-Relation mit einer Instanz fallen nicht mehr in eine EXISTS-Klausel und vergleichen stattdessen Fremdschlüsselspalten.
[orm] ¶
Nicht wirklich funktionierende Anwendungsfälle für den Vergleich einer Sammlung mit einem iterierbaren Objekt wurden entfernt. Verwenden Sie contains(), um die Mitgliedschaft in einer Sammlung zu testen.
[orm] ¶
Das Verhalten von aliased()-Objekten wurde verbessert, sodass sie die generierten Ausdrücke genauer anpassen, was insbesondere bei selbstbezüglichen Vergleichen hilft.
Referenzen: #1171
[orm] ¶
Fehler behoben bei primaryjoin/secondaryjoin-Bedingungen, die aus klassengebundenen Attributen konstruiert wurden (wie es oft bei der Verwendung von deklarativen vorkommt), die später von Query unangemessen als Alias behandelt wurden, insbesondere bei den verschiedenen EXISTS-basierten Comparatoren.
[orm] ¶
Fehler behoben bei der Verwendung mehrerer query.join() mit einem Alias-gebundenen Deskriptor, der den linken Alias verlieren würde.
[orm] ¶
Verbessertes Speichermanagement der schwachen Referenz-Identitätskarte, sodass keine Mutexierung mehr erforderlich ist, und Wiederbelebung von Garbage-Collected-Instanzen auf Basis von Lazy-Loading für eine InstanceState mit anstehenden Änderungen.
[orm] ¶
Das InstanceState-Objekt entfernt nun zirkuläre Referenzen auf sich selbst bei der Entsorgung, um es außerhalb der zyklischen Garbage Collection zu halten.
[orm] ¶
relation() versteckt nun keine unangemessenen ForeignKey-Fehler mehr in der Meldung „bitte primaryjoin angeben“, wenn die Join-Bedingung ermittelt wird.
[orm] ¶
Fehler in Query behoben, der order_by() in Verbindung mit mehreren Aliassen derselben Klasse betraf (Tests werden hinzugefügt)
Referenzen: #1218
[orm] ¶
Wenn Query.join() mit einer expliziten Klausel für die ON-Klausel verwendet wird, wird die Klausel im Hinblick auf die linke Seite des Joins aliasisiert, was Szenarien wie query(Source).from_self().join((Dest, Source.id==Dest.source_id)) ermöglicht, korrekt zu funktionieren.
[orm] ¶
Die Funktion polymorphic_union() berücksichtigt den „key“ jeder Spalte, wenn diese sich vom Spaltennamen unterscheidet.
[orm] ¶
Unterstützung für „passive-deletes“ bei einer Many-to-One-Beziehung mit „delete“-Kaskade repariert.
Referenzen: #1183
[orm] ¶
Fehler in zusammengesetzten Typen behoben, der verhinderte, dass ein zusammengesetzter Primärschlüsseltyp verändert werden konnte.
Referenzen: #1213
[orm] ¶
Mehr Granularität bei internem Attributzugriff hinzugefügt, sodass Kaskaden- und Flush-Operationen unbeladene Attribute und Sammlungen nicht initialisieren, sondern sie für ein späteres Lazy-Loading intakt lassen. Backref-Events initialisieren Attribute und Sammlungen für ausstehende Instanzen weiterhin.
Referenzen: #1202
sql¶
[sql] ¶
Optimierungen und Komplexitätsreduktion des SQL-Compilers. Die Aufrufanzahl für das Kompilieren eines typischen select()-Konstrukts ist im Vergleich zu 0.5.0rc2 um 20 % geringer.
[sql] ¶
Dialekte können jetzt Label-Namen variabler Länge generieren. Übergeben Sie das Argument „label_length=<Wert>“ an create_engine(), um anzupassen, wie viele Zeichen maximal in dynamisch generierten Spaltenlabels vorhanden sein werden, d. h. „somecolumn AS somelabel“. Jeder Wert kleiner als 6 führt zu einem Label minimaler Größe, das aus einem Unterstrich und einem numerischen Zähler besteht. Der Compiler verwendet standardmäßig den Wert von dialect.max_identifier_length.
Referenzen: #1211
[sql] ¶
Die Prüfung für ResultProxy „autoclose without results“ wurde vereinfacht und basiert nun ausschließlich auf der Anwesenheit von cursor.description. Das gesamte reguläre Ausdrucks-basierte Raten von Anweisungen, die Zeilen zurückgeben, wurde entfernt.
Referenzen: #1212
[sql] ¶
Die direkte Ausführung eines union()-Konstrukts richtet die Ergebniszeilenverarbeitung ordnungsgemäß ein.
Referenzen: #1194
[sql] ¶
Die interne Vorstellung einer „OID“- oder „ROWID“-Spalte wurde entfernt. Sie wird im Grunde von keinem Dialekt verwendet, und die Möglichkeit ihrer Verwendung mit psycopg2s cursor.lastrowid ist praktisch nicht mehr gegeben, da INSERT..RETURNING verfügbar ist.
[sql] ¶
Die Methode „default_order_by()“ auf allen FromClause-Objekten wurde entfernt.
[sql] ¶
Die Methode table.tometadata() wurde repariert, sodass ein übergebener Schema-Argument an ForeignKey-Konstrukte weitergegeben wird.
[sql] ¶
Das Verhalten des IN-Operators beim Vergleichen mit leeren Sammlungen wurde leicht geändert. Führt nun zu einem Ungleichheitsvergleich mit sich selbst. Portabler, aber bricht mit gespeicherten Prozeduren, die keine reinen Funktionen sind.
mysql¶
oracle¶
[oracle] ¶
Docstring für den Oracle-Dialekt geschrieben. Anscheinend fängt dieses Ohloh-Label „wenige Quellcode-Kommentare“ langsam an zu wirken :).
[oracle] ¶
OPTIMIZE_ROWS()-Flag für LIMIT/OFFSET entfernt, kann mit dem optimize_limits=True create_engine()-Flag wieder aktiviert werden.
Referenzen: #536
[oracle] ¶
Fehlerbehebungen und Verhaltensänderungen
[oracle] ¶
Wenn auto_convert_lobs auf False bei create_engine() gesetzt wird, wird auch der OracleBinary-Typ angewiesen, das cx_oracle LOB-Objekt unverändert zurückzugeben.
misc¶
[ext] ¶
Eine neue Erweiterung sqlalchemy.ext.serializer hinzugefügt. Bietet Serializer/Deserializer „Klassen“, die Pickle/Unpickle sowie dumps() und loads() spiegeln. Dieser Serializer implementiert einen „externen Objekt“-Pickler, der kontextsensitive Schlüsselobjekte, einschließlich Engines, Sessions, Metadaten, Tabellen/Spalten und Mapper, außerhalb des Pickle-Streams hält und den Pickle später mit jedem Engine-/Metadaten-/Session-Provider wiederherstellen kann. Dies dient nicht dem Pickling regulärer Objektinstanzen, die ohne spezielle Logik pickelbar sind, sondern dem Pickling von Ausdrucksobjekten und vollständigen Query-Objekten, sodass alle Mapper-/Engine-/Session-Abhängigkeiten zum Zeitpunkt des Unpickling wiederhergestellt werden können.
[ext] ¶
Fehler behoben, der die Verwendung von deklarativ gebundenen „column“-Objekten in column_mapped_collection() verhinderte.
Referenzen: #1174
[misc] ¶
Die Funktion util.flatten_iterator() interpretiert Strings mit __iter__() Methoden nicht als Iteratoren, wie z.B. in pypy.
Referenzen: #1077
0.5.0rc2¶
Veröffentlicht: So 12. Okt 2008orm¶
[orm] ¶
Fehler behoben, der sich auf Lese-/Schreibbeziehungen() bezog, die Literale oder andere Nicht-Spalten-Ausdrücke innerhalb ihrer primaryjoin-Bedingung enthielten, die mit einer Fremdschlüsselspalte gleichgesetzt waren.
[orm] ¶
Der „non-batch“-Modus in mapper(), eine Funktion, die Mapper-Erweiterungsmethoden aufruft, wenn jede Instanz aktualisiert/eingefügt wird, berücksichtigt nun die Einfügungsreihenfolge der übergebenen Objekte.
[orm] ¶
Fehler im Zusammenhang mit RLock im Mapper behoben, der bei reentranten Mapper compile()-Aufrufen zu einem Deadlock führen konnte, was bei der Verwendung von deklarativen Konstrukten innerhalb von ForeignKey-Objekten auftritt.
[orm] ¶
ScopedSession.query_property akzeptiert jetzt eine query_cls-Fabrik, die die von der Session konfigurierte query_cls überschreibt.
[orm] ¶
Fehler bei gemeinsam genutztem Zustand behoben, der die Fähigkeit von ScopedSession.mapper, Standard-__init__-Implementierungen auf Objektunterklassen anzuwenden, beeinträchtigte.
[orm] ¶
Slices bei Query (d.h. query[x:y]) wurden repariert, um für Null-Längen-Slices und Slices mit None auf beiden Seiten korrekt zu funktionieren.
Referenzen: #1177
[orm] ¶
Ein Beispiel zur Veranschaulichung von Celkos „verschachtelten Mengen“ als SQLA-Mapping hinzugefügt.
[orm] ¶
contains_eager() mit einem Alias-Argument funktioniert auch dann, wenn der Alias in einem SELECT eingebettet ist, wie z.B. wenn er über query.select_from() an die Query übergeben wird.
[orm] ¶
Die Verwendung von contains_eager() ist nun mit einer Query kompatibel, die auch eine reguläre Eager-Ladung und Limit/Offset enthält, indem die Spalten zur von der Query generierten Unterabfrage hinzugefügt werden.
Referenzen: #1180
[orm] ¶
session.execute() führt ein ihm übergebenes Sequence-Objekt aus (Regression von 0.4).
[orm] ¶
Das Schlüsselwortargument „raiseerror“ von object_mapper() und class_mapper() wurde entfernt. Diese Funktionen lösen in allen Fällen eine Ausnahme aus, wenn die angegebene Klasse/Instanz nicht zugeordnet ist.
[orm] ¶
session.transaction.commit() bei einer Session mit autocommit=False startete keine neue Transaktion mehr.
[orm] ¶
Einige Anpassungen am Verhalten der schwachen Referenzierung von Session.identity_map, um asynchrone GC-Nebeneffekte zu reduzieren.
[orm] ¶
Anpassung der Nachverfolgung neu „säuberer“ Objekte nach einem Flush in der Session, um den Betrieb von Objekten während ihres asynchronen GC besser zu schützen.
Referenzen: #1182
sql¶
mysql¶
[mysql] ¶
Temporäre Tabellen können jetzt reflektiert werden.
sqlite¶
[sqlite] ¶
SQLite-Datums-/Zeitbindungs-/Ergebnisverarbeitung wurde überarbeitet, um reguläre Ausdrücke und Formatzeichenfolgen anstelle von strptime/strftime zu verwenden, um generisch Daten vor 1900 und Daten mit Mikrosekunden zu unterstützen.
Referenzen: #968
[sqlite] ¶
Die Logik convert_unicode von String (und Unicode, UnicodeText usw.) wurde im sqlite-Dialekt deaktiviert, um die neue Anforderung von pysqlite 2.5.0 zu berücksichtigen, dass nur Python-Unicode-Objekte akzeptiert werden; http://web.archive.org/web/20090614054912/https://itsystementwicklung.de/pipermail/list-pysqlite/2008-March/000018.html
oracle¶
0.5.0rc1¶
Veröffentlicht: Do 11. Sep 2008orm¶
[orm] ¶
Query hat nun die Methoden delete() und update(values). Dies ermöglicht Bulk-Löschungen/Aktualisierungen mit dem Query-Objekt.
[orm] ¶
Das RowTuple-Objekt, das von Query(*cols) zurückgegeben wird, verfügt nun über Schlüsselnamen, die zugeordnete Attributnamen gegenüber Spaltenschlüsseln und Spaltenschlüssel gegenüber Spaltennamen bevorzugen, d. h. Query(Class.foo, Class.bar) hat die Namen „foo“ und „bar“, auch wenn dies nicht die Namen der zugrunde liegenden Column-Objekte sind. Direkte Column-Objekte wie Query(table.c.col) geben das „key“-Attribut der Column zurück.
[orm] ¶
Die Methoden scalar() und value() wurden zu Query hinzugefügt. Beide geben einen einzelnen Skalarwert zurück. scalar() nimmt keine Argumente und entspricht ungefähr first()[0], value() nimmt einen einzelnen Spaltenausdruck und entspricht ungefähr values(expr).next()[0].
[orm] ¶
Die Bestimmung der FROM-Klausel bei der Platzierung von SQL-Ausdrücken in der query()-Liste von Entitäten wurde verbessert. Insbesondere sollten Skalar-Unterabfragen ihre inneren FROM-Objekte nicht in die umschließende Query „leaken“.
[orm] ¶
Joins entlang einer relation() von einer zugeordneten Klasse zu einer zugeordneten Unterklasse, wo die zugeordnete Unterklasse mit Single-Table-Inheritance konfiguriert ist, beinhalten eine IN-Klausel, die die Untertypen der zugeordneten Klasse auf die angeforderten beschränkt. Dies tritt sowohl für Eager-Load-Joins als auch für query.join() in Kraft. Beachten Sie, dass in einigen Szenarien die IN-Klausel auch in der WHERE-Klausel der Query erscheint, da diese Diskriminierung mehrere Auslösepunkte hat.
[orm] ¶
AttributeExtension wurde verfeinert, sodass das Event ausgelöst wird, bevor die Mutation tatsächlich stattfindet. Zusätzlich müssen die Methoden append() und set() nun den übergebenen Wert zurückgeben, der als Wert für die Mutationsoperation verwendet wird. Dies ermöglicht die Erstellung von validierenden AttributeListeners, die auslösen, bevor die Aktion tatsächlich stattfindet, und die den übergebenen Wert in etwas anderes ändern können, bevor er verwendet wird.
[orm] ¶
column_property(), composite_property() und relation() akzeptieren jetzt eine einzelne oder eine Liste von AttributeExtensions über das Argument „extension“.
[orm] ¶
query.order_by().get() verwirft stillschweigend die „ORDER BY“-Klausel aus der vom GET ausgegebenen Abfrage, wirft aber keine Ausnahme aus.
[orm] ¶
Ein neuer Validator AttributeExtension wurde hinzugefügt, sowie ein @validates-Decorator, der ähnlich wie @reconstructor verwendet wird und eine Methode als validierend für ein oder mehrere zugeordnete Attribute markiert.
[orm] ¶
class.someprop.in_() löst NotImplementedError aus, bis die Implementierung von „in_“ für relation() erfolgt ist.
Referenzen: #1140
[orm] ¶
Primärschlüsselaktualisierung für Many-to-Many-Sammlungen, bei denen die Sammlung noch nicht geladen war, behoben.
Referenzen: #1127
[orm] ¶
Fehler behoben, bei dem deferred()-Spalten mit einer Gruppe in Verbindung mit einem ansonsten nicht zusammenhängenden synonym() während des Deferred-Loads einen AttributeError erzeugten.
[orm] ¶
Der before_flush()-Hook bei SessionExtension findet statt, bevor die Liste der neuen/dirty/gelöschten Objekte zum letzten Mal berechnet wird, sodass Routinen innerhalb von before_flush() den Zustand der Session weiter ändern können, bevor der Flush fortgesetzt wird.
Referenzen: #1128
[orm] ¶
Das Argument „extension“ für Session und andere kann jetzt optional eine Liste sein, was Ereignisse unterstützt, die an mehrere SessionExtension-Instanzen gesendet werden. Session platziert SessionExtensions in Session.extensions.
[orm] ¶
Reentrant aufrufe von flush() lösen einen Fehler aus. Dies dient auch als rudimentäre, aber nicht narrensichere Prüfung gegen gleichzeitige Aufrufe von Session.flush().
[orm] ¶
Das Verhalten von query.join() beim Joinen mit Joined-Table-Inheritance-Unterklassen unter Verwendung expliziter Join-Kriterien (d. h. nicht über eine Relation) wurde verbessert.
[orm] ¶
@orm.attributes.reconstitute und MapperExtension.reconstitute wurden in @orm.reconstructor und MapperExtension.reconstruct_instance umbenannt.
[orm] ¶
Der @reconstructor-Hook für Unterklassen, die von einer Basisklasse erben, wurde behoben.
Referenzen: #1129
[orm] ¶
Der composite()-Eigenschaftstyp unterstützt jetzt eine __set_composite_values__() Methode auf der Composite-Klasse, die erforderlich ist, wenn die Klasse Zustände unter Verwendung von Attributnamen außer den Schlüsselnamen der Spalten darstellt; standardmäßig generierte Werte werden nun beim Flush ordnungsgemäß populär gemacht. Auch Vergleiche von Composites mit auf None gesetzten Attributen sind korrekt.
Referenzen: #1132
[orm] ¶
Das von attributes.get_history() zurückgegebene 3-Tupel von Iterables kann jetzt eine Mischung aus Listen und Tupeln sein. (Zuvor waren die Elemente immer Listen.)
[orm] ¶
Fehler behoben, bei dem die Änderung eines Primärschlüsselattributs einer Entität, deren vorheriger Wert abgelaufen war, beim Flush zu einem Fehler führte.
Referenzen: #1151
[orm] ¶
Fehler bei benutzerdefinierter Instrumentierung behoben, bei dem get_instance_dict() für neu konstruierte Instanzen, die nicht vom ORM geladen wurden, nicht aufgerufen wurde.
[orm] ¶
Session.delete() fügt das gegebene Objekt zur Session hinzu, falls es noch nicht vorhanden ist. Dies war ein Regressionsfehler von 0.4.
Referenzen: #1150
[orm] ¶
Das Flag echo_uow bei Session ist veraltet, und die Protokollierung der Unit-of-Work ist nun nur noch auf Anwendungsebene und nicht mehr auf Sitzungsebene.
[orm] ¶
Das widersprüchliche contains()-Operator von InstrumentedAttribute, das den escape-KWAARG nicht akzeptierte, wurde entfernt.
Referenzen: #1153
sql¶
[sql] ¶
Die „ORDER BY“-Erweiterung wurde vorübergehend zurückgenommen. Diese Funktion wird bis zur weiteren Entwicklung zurückgestellt.
Referenzen: #1068
[sql] ¶
Das exists()-Konstrukt „exportiert“ seine enthaltenen Elemente nicht als FROM-Klauseln, was ihre effektivere Verwendung in der columns-Klausel eines SELECT ermöglicht.
[sql] ¶
and_() und or_() generieren jetzt ein ColumnElement, was boolesche Ausdrücke als Ergebnisspalten ermöglicht, z. B. select([and_(1, 0)]).
Referenzen: #798
[sql] ¶
Bind-Parameter erben nun von ColumnElement, was ihnen ermöglicht, von orm.query ausgewählt zu werden (sie hatten bereits die meisten ColumnElement-Semantiken).
[sql] ¶
Die Methode select_from() wurde zum exists()-Konstrukt hinzugefügt, das zunehmend mit einem regulären select() kompatibel wird.
[sql] ¶
func.min(), func.max(), func.sum() wurden als „generische Funktionen“ hinzugefügt, was im Grunde ermöglicht, ihren Rückgabetyp automatisch zu bestimmen. Hilft bei Datumsangaben unter SQLite, Dezimaltypen usw.
Referenzen: #1160
[sql] ¶
decimal.Decimal wurde als „auto-detect“-Typ hinzugefügt; Bindparameter und generische Funktionen setzen ihren Typ auf Numeric, wenn ein Decimal verwendet wird.
schema¶
[schema] ¶
Der Zugriffsmechanismus „sorted_tables“ wurde zu MetaData hinzugefügt, der Table-Objekte in Abhängigkeitsreihenfolge als Liste zurückgibt. Dies veraltet die Methode MetaData.table_iterator(). Das Schlüsselwortargument „reverse=False“ wurde ebenfalls aus util.sort_tables() entfernt; verwenden Sie die Python-Funktion ‚reversed‘, um die Ergebnisse umzukehren.
Referenzen: #1033
[schema] ¶
Das Argument ‚length‘ für alle numerischen Typen wurde in ‚scale‘ umbenannt. ‚length‘ ist veraltet und wird weiterhin mit einer Warnung akzeptiert.
[schema] ¶
Die Kompatibilität mit benutzerdefinierten Typen aus Version 0.3 wurde entfernt (convert_result_value, convert_bind_param).
mysql¶
[mysql] ¶
Das Argument ‚length‘ für MSInteger, MSBigInteger, MSTinyInteger, MSSmallInteger und MSYear wurde in ‚display_width‘ umbenannt.
[mysql] ¶
Der Typ MSMediumInteger wurde hinzugefügt.
Referenzen: #1146
[mysql] ¶
Die Funktion func.utc_timestamp() wird zu UTC_TIMESTAMP ohne Klammern kompiliert, die bei der Verwendung in Verbindung mit executemany() stören.
oracle¶
[oracle] ¶
limit/offset verwendet nicht mehr ROW NUMBER OVER zur Begrenzung von Zeilen, sondern verwendet stattdessen Unterabfragen in Verbindung mit einem speziellen Oracle-Optimierungskommentar. Ermöglicht die Verwendung von LIMIT/OFFSET in Verbindung mit DISTINCT.
Referenzen: #536
[oracle] ¶
has_sequence() berücksichtigt jetzt das aktuelle „schema“-Argument.
Referenzen: #1155
[oracle] ¶
BFILE zu reflektierten Typnamen hinzugefügt.
Referenzen: #1121
misc¶
[declarative] ¶
Fehler behoben, bei dem ein Mapper nicht initialisiert werden konnte, wenn ein zusammengesetzter Primärschlüssel auf eine andere, noch nicht definierte Tabelle verwies.
Referenzen: #1161
[declarative] ¶
Ausnahmeauslösung behoben, die auftrat, wenn eine zeichenkettenbasierte primaryjoin-Bedingung in Verbindung mit backref verwendet wurde.
0.5.0beta3¶
Veröffentlicht: Mo 04. Aug 2008orm¶
[orm] ¶
Die Funktion „entity_name“ von SQLAlchemy-Mappern wurde entfernt. Zur Begründung siehe https://tinyurl.com/6nm2ne
[orm] ¶
Das Flag „autoexpire“ bei Session, sessionmaker() und scoped_session() wurde in „expire_on_commit“ umbenannt. Es beeinflusst nicht das Ablaufverhalten von rollback().
[orm] ¶
Fehler bei Endlosschleife behoben, der bei einem Deferred-Load von vererbten Attributen eines Mappers auftreten konnte.
[orm] ¶
Ein Legacy-Support-Flag „_enable_transaction_accounting“ wurde zu Session hinzugefügt, das bei False die gesamte transaktionsbezogene Objektbuchhaltung deaktiviert, einschließlich Ablauf bei Rollback, Ablauf bei Commit, Wartung der neuen/gelöschten Liste und Autoflush beim Beginn.
[orm] ¶
Der Parameter ‚cascade‘ für relation() akzeptiert None als Wert, was äquivalent zu keiner Kaskade ist.
[orm] ¶
Eine kritische Korrektur für dynamische Beziehungen ermöglicht, dass der „modifizierte“ Verlauf nach einem Flush() ordnungsgemäß gelöscht wird.
[orm] ¶
Benutzerdefinierte @properties einer Klasse werden erkannt und während der Mapper-Initialisierung unverändert belassen. Dies bedeutet, dass eine tabellengebundene Spalte desselben Namens überhaupt nicht zugeordnet wird, wenn ein @property im Weg ist (und die Spalte nicht einem anderen Namen zugeordnet wird), noch wird ein instrumentiertes Attribut einer vererbten Klasse angewendet. Die gleichen Regeln gelten für Namen, die über die Sammlungen include_properties/exclude_properties ausgeschlossen werden.
[orm] ¶
Ein neuer SessionExtension-Hook namens after_attach() wurde hinzugefügt. Dieser wird zum Zeitpunkt der Anheftung von Objekten über add(), add_all(), delete() und merge() aufgerufen.
[orm] ¶
Ein Mapper, der von einem anderen erbt, verwendet beim Erben der Spalten seines geerbten Mappers alle zugewiesenen Eigenschaftsnamen, die in diesem erbenden Mapper angegeben sind. Zuvor, wenn „Base“ „base_id“ dem Namen „id“ neu zugewiesen hatte, würde „SubBase(Base)“ immer noch ein Attribut namens „base_id“ erhalten. Dies konnte durch explizite Angabe der Spalte in jedem Submapper umgangen werden, dies ist jedoch ziemlich unpraktisch und auch bei der Verwendung von Deklarativen unmöglich.
Referenzen: #1111
[orm] ¶
Eine Reihe potenzieller Wettlaufsituationen in der Session wurde behoben, bei denen asynchrones GC unveränderte, nicht mehr referenzierte Elemente aus der Session entfernen konnte, während sie in einer Liste von zu verarbeitenden Elementen vorhanden waren, typischerweise während session.expunge_all() und abhängiger Methoden.
[orm] ¶
Einige Verbesserungen am Mechanismus _CompileOnAttr, die die Wahrscheinlichkeit von Warnungen wie „Attribute x wurde während des Kompilierens nicht ersetzt“ verringern sollten. (Dies gilt im Allgemeinen für SQLA-Hacker, wie Elixir-Entwickler).
[orm] ¶
Fehler behoben, bei dem die Ausnahme FlushError „unsaved, pending instance“ für einen ausstehenden Waisen die übergeordneten Mapper nicht berücksichtigte, wenn die Liste der für den Fehler verantwortlichen Beziehungen generiert wurde.
sql¶
[sql] ¶
func.count() ohne Argumente wird als COUNT(*) gerendert, was func.count(text('*')) entspricht.
[sql] ¶
Einfache Bezeichnernamen in ORDER BY-Ausdrücken werden als sie selbst gerendert und nicht als erneute Angabe ihres entsprechenden Ausdrucks. Diese Funktion ist derzeit nur für SQLite, MySQL und PostgreSQL aktiviert. Sie kann für andere Dialekte aktiviert werden, sobald jeder gezeigt hat, dass er dieses Verhalten unterstützt.
Referenzen: #1068
mysql¶
misc¶
[ext] ¶
Klassen gebundene Attribute, die als Argumente an die Parameter remote_side und foreign_keys von relation() übergeben werden, werden jetzt akzeptiert, was ihre Verwendung mit Deklarativen ermöglicht. Zusätzlich wurden Fehler im Zusammenhang mit order_by behoben, wenn dieses als klassen gebundenes Attribut in Verbindung mit Eager Loading angegeben wurde.
[ext] ¶
Die deklarative Initialisierung von Columns wurde angepasst, sodass nicht umbenannte Spalten genauso initialisiert werden wie ein nicht-deklarativer Mapper. Dies ermöglicht es einem erbenden Mapper, seine gleichnamigen „id“-Spalten insbesondere so einzurichten, dass die „id“-Spalte der Basisklasse gegenüber der Kindspalte bevorzugt wird, was Datenbankrundläufe reduziert, wenn dieser Wert angefordert wird.
0.5.0beta2¶
Veröffentlicht: Mo 14. Jul 2008orm¶
[orm] ¶
Neben abgelaufenen Attributen werden auch verzögerte Attribute geladen, wenn ihre Daten im Ergebnis-Set vorhanden sind.
Referenzen: #870
[orm] ¶
session.refresh() löst eine informative Fehlermeldung aus, wenn die Liste der Attribute keine spaltenbasierten Attribute enthält.
[orm] ¶
query() löst eine informative Fehlermeldung aus, wenn keine Spalten oder Mapper angegeben sind.
[orm] ¶
Lazy-Loader lösen nun vor dem Fortfahren einen Autoflush aus. Dies ermöglicht, dass expire() einer Sammlung oder einer Skalarbeziehung im Kontext von autoflush ordnungsgemäß funktioniert.
[orm] ¶
column_property()-Attribute, die SQL-Ausdrücke oder Spalten darstellen, die nicht in den zugeordneten Tabellen vorhanden sind (z. B. aus Views), werden nach einem INSERT oder UPDATE automatisch abgelaufen (verfallen), sofern sie nicht lokal modifiziert wurden, damit sie beim Zugriff mit den aktuellsten Daten aktualisiert werden.
Referenzen: #887
[orm] ¶
Explizite, selbstreferenzierende Joins zwischen zwei Joined-Table-Inheritance-Mappern bei Verwendung von query.join(cls, aliased=True) behoben.
Referenzen: #1082
[orm] ¶
query.join(), wenn es in Verbindung mit einer reinen Spaltenklausel und einer SQL-Ausdruck-ON-Klausel im Join verwendet wird, behoben.
[orm] ¶
Das Flag „allow_column_override“ von mapper() wurde entfernt. Dieses Flag wird praktisch immer missverstanden. Seine spezifische Funktionalität ist über die Mapper-Argumente include_properties/exclude_properties verfügbar.
[orm] ¶
Die Methode __str__() für Query repariert.
Referenzen: #1066
[orm] ¶
Session.bind wird als Standard verwendet, auch wenn tabellen- oder mappenspezifische Bindungen definiert sind.
sql¶
[sql] ¶
Neuer Operator match() hinzugefügt, der eine Volltextsuche durchführt. Unterstützt auf PostgreSQL, SQLite, MySQL, MS-SQL und Oracle Backends.
schema¶
[schema] ¶
Option prefixes zu Table hinzugefügt, die eine Liste von Strings akzeptiert, die nach CREATE in der CREATE TABLE-Anweisung eingefügt werden.
Referenzen: #1075
[schema] ¶
Unicode, UnicodeText-Typen setzen jetzt standardmäßig „assert_unicode“ und „convert_unicode“, akzeptieren aber überschreibende **kwargs für diese Werte.
extensions¶
sqlite¶
[sqlite] ¶
Die Darstellung von „Mikrosekunden“ in SQLite wurde angepasst, um mit der Ausgabe von str(somedatetime) übereinzustimmen, d. h. die Mikrosekunden werden als Bruchteile von Sekunden im Zeichenkettenformat dargestellt. Dies macht den SQLite-Datumstyp von SQLA kompatibel mit Datums- und Zeitangaben, die direkt mit Pysqlite gespeichert wurden (was nur str() aufruft). Beachten Sie, dass dies inkompatibel mit den vorhandenen Mikrosekundenwerten in einer SQLA 0.4-generierten SQLite-Datenbankdatei ist.
Um das alte Verhalten global zu erhalten
from sqlalchemy.databases.sqlite import DateTimeMixin DateTimeMixin.__legacy_microseconds__ = True
Um das Verhalten für einzelne DateTime-Typen zu erhalten
t = sqlite.SLDateTime() t.__legacy_microseconds__ = True
Verwenden Sie dann „t“ als Typ für die Spalte.
Referenzen: #1090
[sqlite] ¶
SQLite Datum, DateTime und Zeit-Typen akzeptieren jetzt nur noch Python datetime Objekte, keine Zeichenketten mehr. Wenn Sie Datumsangaben mit SQLite selbst als Zeichenketten formatieren möchten, verwenden Sie einen String-Typ. Wenn Sie möchten, dass diese trotzdem datetime Objekte zurückgeben, obwohl sie Zeichenketten als Eingabe akzeptieren, erstellen Sie einen TypeDecorator um String – SQLA fördert dieses Muster nicht.
0.5.0beta1¶
Veröffentlicht: Do 12. Juni 2008general¶
[general] ¶
Globale Änderung von „propigate“ zu „propagate“.
orm¶
[orm] ¶
Die Funktion polymorphic_union() berücksichtigt den „key“ jeder Spalte, wenn diese sich vom Spaltennamen unterscheidet.
[orm] ¶
0.4-nur-Bug behoben, der die korrekte Funktion von zusammengesetzten Spalten mit vererbenden Mappern verhinderte
Referenzen: #1199
[orm] ¶
RLock-bezogener Bug im Mapper behoben, der bei reentranten mapper compile()-Aufrufen zu einem Deadlock führen konnte, was bei der Verwendung von deklarativen Konstrukten innerhalb von ForeignKey-Objekten auftritt. Portiert von 0.5.
[orm] ¶
Fehler in zusammengesetzten Typen behoben, der verhinderte, dass ein zusammengesetzter Primärschlüsseltyp verändert werden konnte.
Referenzen: #1213
[orm] ¶
Der Accessor ScopedSession.is_active wurde hinzugefügt.
Referenzen: #976
[orm] ¶
Klassengebundener Accessor kann als Argument für relation() order_by verwendet werden.
Referenzen: #939
[orm] ¶
Shard_id-Argument für ShardedSession.execute() behoben.
Referenzen: #1072
sql¶
[sql] ¶
Connection.invalidate() prüft auf den geschlossenen Status, um Attributfehler zu vermeiden.
Referenzen: #1246
[sql] ¶
NullPool unterstützt das Wiederverbinden nach einem Fehler.
Referenzen: #1094
[sql] ¶
Der pro-Dialekt-Cache, der von TypeEngine zum Zwischenspeichern von dialektspezifischen Typen verwendet wird, ist nun ein WeakKeyDictionary. Dies soll verhindern, dass Dialektobjekte unendlich lange referenziert werden, wenn eine Anwendung eine beliebig große Anzahl von Engines oder Dialekten erstellt. Es gibt eine geringe Leistungseinbuße, die in 0.6 behoben wird.
Referenzen: #1299
[sql] ¶
SQLite-Reflexionsmethoden wurden korrigiert, sodass nicht vorhandenes cursor.description, das einen automatischen Cursor-Schluss auslöst, erkannt wird, damit keine Ergebnisse auf neueren Versionen von pysqlite fehlschlagen, die einen Fehler auslösen, wenn fetchone() mit keinen vorhandenen Zeilen aufgerufen wird.
mysql¶
oracle¶
misc¶
[no_tags] ¶
Der von mapper() hinzugefügte Trigger/Decorator „__init__“ versucht nun, die Argumentensignatur des ursprünglichen __init__ exakt zu spiegeln. Die Weiterleitung für „_sa_session“ ist nicht mehr implizit – Sie müssen dieses Schlüsselwortargument in Ihrem Konstruktor zulassen.
[no_tags] ¶
ClassState wird in ClassManager umbenannt.
[no_tags] ¶
Klassen können ihren eigenen InstrumentationManager bereitstellen, indem sie eine Eigenschaft __sa_instrumentation_manager__ angeben.
[no_tags] ¶
Benutzerdefinierte Instrumentierung kann jeden Mechanismus verwenden, um einen ClassManager einer Klasse und einen InstanceState einer Instanz zuzuordnen. Attribute auf diesen Objekten sind weiterhin der Standardassoziationsmechanismus für die native Instrumentierung von SQLAlchemy.
[no_tags] ¶
entity_name, _sa_session_id und _instance_key wurden vom Instanzobjekt zum Instanzstatus verschoben. Diese Werte sind weiterhin auf die alte Weise verfügbar, was nun veraltet ist, über Deskriptoren, die an die Klasse angehängt sind. Eine Warnung wegen veralteter Verwendung wird bei Zugriff ausgegeben.
[no_tags] ¶
Der Alias _prepare_instrumentation für prepare_instrumentation wurde entfernt.
[no_tags] ¶
sqlalchemy.exceptions wurde in sqlalchemy.exc umbenannt. Das Modul kann unter beiden Namen importiert werden.
[no_tags] ¶
ORM-bezogene Ausnahmen werden nun in sqlalchemy.orm.exc definiert. Kompatibilitätsaliase für ConcurrentModificationError, FlushError und UnmappedColumnError werden bei Import von sqlalchemy.orm in sqlalchemy.exc installiert.
[no_tags] ¶
sqlalchemy.logging wurde in sqlalchemy.log umbenannt.
[no_tags] ¶
Der Übergangsalias sqlalchemy.log.SADeprecationWarning für die Definition der Warnung in sqlalchemy.exc wurde entfernt.
[no_tags] ¶
exc.AssertionError wurde entfernt und die Verwendung durch die integrierte AssertionError von Python ersetzt.
[no_tags] ¶
Das Verhalten von MapperExtensions, die an mehrere, entity_name= primäre Mapper für eine einzelne Klasse angehängt sind, wurde geändert. Der erste für eine Klasse definierte mapper() ist der einzige Mapper, der für die MapperExtension-Ereignisse „instrument_class“, „init_instance“ und „init_failed“ in Frage kommt. Dies ist rückwärts inkompatibel; zuvor erhielten die Erweiterungen des zuletzt definierten Mappers diese Ereignisse.
[firebird] ¶
Unterstützung für die Rückgabe von Werten aus Inserts (nur 2.0+), Updates und Deletes (nur 2.1+) hinzugefügt.
[postgres] ¶
Index-Reflexionsunterstützung für Postgres hinzugefügt, unter Verwendung eines großartigen Patches, den wir lange vernachlässigt haben, eingereicht von Ken Kuhlman.
Referenzen: #714
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