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.8 Changelog
- Nächste: 0.6 Changelog
- Nach oben: Startseite
- Auf dieser Seite
0.7 Changelog¶
0.7.11¶
kein Veröffentlichungsdatumorm¶
[orm] [bug] ¶
Behob einen Fehler, bei dem die Listensinstrumentierung einen Slices von
[0:0]nicht korrekt darstellen konnte, was insbesondere bei der Verwendung voninsert(0, item)mit dem Association Proxy auftreten konnte. Aufgrund einer Eigenart in Python-Collections war das Problem bei Python 3 viel wahrscheinlicher als bei Python 2.Referenzen: #2807
[orm] [bug] ¶
Fehler behoben, bei dem eine Abfrage der Form:
query(SubClass).options(subqueryload(Baseclass.attrname)), wobeiSubClasseine Joined Inh vonBaseClassist, die Anwendung desJOINinnerhalb der Subquery auf die Attributladung nicht erfolgreich durchführte und ein kartesisches Produkt erzeugte. Die bevölkerten Ergebnisse waren immer noch meist korrekt, da zusätzliche Zeilen einfach ignoriert wurden, sodass dieses Problem möglicherweise als Leistungsverschlechterung in Anwendungen auftrat, die ansonsten korrekt funktionierten.Referenzen: #2699
[orm] [bug] ¶
Fehler in der Unit of Work behoben, bei der eine Joined-Inheritance-Unterklasse die Zeile für die "Unter"-Tabelle vor der Eltern-Tabelle einfügen konnte, wenn zwischen den beiden Tabellen keine ForeignKey-Beschränkungen eingerichtet waren.
Referenzen: #2689
[orm] [bug] ¶
Die Fehlermeldung, die beim Erkennen einer „Backref-Schleife“ ausgegeben wird, verbessert. Das heißt, wenn ein Attributereignis eine bidirektionale Zuweisung zwischen zwei anderen Attributen ohne Ende auslöst. Dieser Zustand kann nicht nur auftreten, wenn ein Objekt des falschen Typs zugewiesen wird, sondern auch, wenn ein Attribut falsch konfiguriert ist, um in ein bestehendes Backref-Paar zurückzuverweisen.
Referenzen: #2674
[orm] [bug] ¶
Eine Warnung wird ausgegeben, wenn eine MapperProperty einem Mapper zugewiesen wird, der eine vorhandene Eigenschaft ersetzt, sofern die betroffenen Eigenschaften keine reinen spaltenbasierten Eigenschaften sind. Das Ersetzen von Beziehungseigenschaften ist selten (wenn überhaupt) beabsichtigt und bezieht sich normalerweise auf eine Fehlkonfiguration des Mappers. Dies warnt auch, wenn eine Backref sich selbst über eine bestehende in einer Vererbungsbeziehung konfiguriert (was in 0.8 ein Fehler ist).
Referenzen: #2674
engine¶
sql¶
[sql] [bug] ¶
Behob eine Regression, die seit 0.7.9 bestand, bei der der Name einer CTE möglicherweise nicht korrekt gequotet wurde, wenn sie in mehreren FROM-Klauseln referenziert wurde.
Referenzen: #2801
[sql] [bug] [cte] ¶
Behob einen Fehler im Common Table Expression (CTE)-System, bei dem, wenn die CTE nur als
alias()-Konstrukt verwendet wurde, diese nicht mit dem Schlüsselwort WITH gerendert wurde.Referenzen: #2783
[sql] [bug] ¶
Behob einen Fehler in der DDL von
CheckConstraint, bei dem das "Quote"-Flag von einemColumn-Objekt nicht weitergegeben wurde.Referenzen: #2784
postgresql¶
mysql¶
tests¶
[tests] [bug] ¶
Ein Import von "logging" in test_execute behoben, der auf einigen Linux-Plattformen nicht funktionierte.
Referenzen: #2669, Pull Request 41
0.7.10¶
Veröffentlicht: Do 07. Feb 2013orm¶
[orm] [bug] ¶
Potenziellen Speicherleck behoben, der auftreten konnte, wenn eine beliebige Anzahl von
sessionmaker-Objekten erstellt wurde. Die anonyme Unterklasse, die von der Sessionmaker erstellt wurde, würde beim Dereferenzieren aufgrund von verbleibenden klassenebene Referenzen aus dem Ereignispaket nicht von der Garbage Collection erfasst. Dieses Problem gilt auch für jedes benutzerdefinierte System, das Ad-hoc-Unterklassen in Verbindung mit einem Ereignisdispatcher verwendet hat.Referenzen: #2650
[orm] [bug] ¶
Query.merge_result()kann nun Zeilen aus einem Outer Join laden, bei denen eine EntitätNonesein kann, ohne einen Fehler auszulösen.Referenzen: #2640
[orm] [bug] ¶
Der Typ
MutableCompositeerlaubte nicht die Verwendung der MethodeMutableBase.coerce(), obwohl der Code diese Absicht anzuzeigen schien, sodass dies nun funktioniert und ein kurzes Beispiel hinzugefügt wird. Als Nebeneffekt wurden die Mechanismen dieses Ereignis-Handlers geändert, sodass neueMutableComposite-Typen keine pro-Typ globalen Ereignis-Handler mehr hinzufügen. Ebenfalls in 0.8.0b2.Referenzen: #2624
[orm] [bug] ¶
Fehler bei der Session-Buchhaltung behoben, bei dem das Ersetzen eines gelöschten Objekts in der Identitätskarte durch ein anderes Objekt mit demselben Primärschlüssel beim Rollback() einen "konfliktierenden Zustand"-Fehler auslöste, wenn der ersetzte Primärschlüssel entweder über eine nicht von Unit of Work etablierte INSERT-Anweisung oder durch einen Primärschlüsselwechsel einer anderen Instanz hergestellt wurde.
Referenzen: #2583
engine¶
[engine] [bug] ¶
behoben, um die gegebene
Connectionkorrekt zu verwenden, falls vorhanden, ohne eine zweite Verbindung von derEnginedieser Verbindung zu öffnen.Referenzen: #2604
sql¶
[sql] [bug] ¶
Anpassung an
__repr__fürTypeDecoratornach 0.7 zurückportiert, erlaubtPickleType, ein sauberesrepr()zu produzieren, um Alembic zu helfen.[sql] [bug] ¶
Fehler behoben, bei dem
Table.tometadata()fehlschlagen würde, wenn eineColumnsowohl einen Fremdschlüssel als auch einen alternativen ".key"-Namen für die Spalte hätte.Referenzen: #2643
[sql] [bug] ¶
Fehler behoben, bei dem die Verwendung von server_onupdate=<FetchedValue|DefaultClause> ohne Übergabe des Flags "for_update=True" das Standardobjekt auf server_default anwenden und alles überschreiben würde, was dort vorhanden war. Das explizite Argument for_update=True sollte bei dieser Verwendung nicht erforderlich sein (insbesondere da die Dokumentation ein Beispiel ohne seine Verwendung zeigt), sodass es nun intern mithilfe einer Kopie des gegebenen Standardobjekts arrangiert wird, wenn das Flag nicht auf das Argument gesetzt ist.
Referenzen: #2631
[sql] [gae] [mysql] ¶
Bedingter Import zum
gaerdbms-Dialekt hinzugefügt, der versucht, rdbms_apiproxy vs. rdbms_googleapi zu importieren, um sowohl auf Entwicklungs- als auch auf Produktionsplattformen zu funktionieren. Berücksichtigt nun auch das Attributinstance. Mit freundlicher Genehmigung von Sean Lynch. Ebenfalls nach 0.8 zurückportierte Verbesserungen, um Benutzername/Passwort sowie die Behebung der Fehlercode-Interpretation zu ermöglichen.Referenzen: #2649
mysql¶
sqlite¶
[sqlite] [bug] ¶
Weitere Anpassung an diesem SQLite-bezogenen Problem, das in 0.7.9 veröffentlicht wurde, um Legacy-SQLite-Anführungszeichen beim Reflektieren von Fremdschlüsseln abzufangen. Zusätzlich zum Abfangen von doppelten Anführungszeichen werden nun auch andere Anführungszeichen wie Klammern, Backticks und einfache Anführungszeichen abgefangen.
Referenzen: #2568
mssql¶
[mssql] [bug] ¶
Fehler behoben, bei dem die Verwendung von "key" mit Column in Verbindung mit "schema" für die besitzende Tabelle die Ergebniszeilen aufgrund des Versagens der "Schema-Rendering"-Logik des MSSQL-Dialekts, die .key nicht berücksichtigt, nicht finden konnte.
[mssql] [bug] ¶
Ein Py3K-bedingter Block um unnötige .decode()-Aufrufe im MSSQL-Informationsschema hinzugefügt, behebt Reflexion in Py3k.
Referenzen: #2638
oracle¶
[oracle] [bug] ¶
Der Oracle LONG-Typ ist zwar ein unbegrenzter Texttyp, scheint aber den cx_Oracle.LOB-Typ nicht zu verwenden, wenn Ergebniszeilen zurückgegeben werden. Daher wurde der Dialekt repariert, um LONG von der Anwendung der cx_Oracle.LOB-Filterung auszuschließen.
Referenzen: #2620
[oracle] [bug] ¶
Die Verwendung von
.prepare()in Verbindung mit cx_Oracle repariert, sodass ein Rückgabewert vonFalsenicht zum Aufruf vonconnection.commit()führt und somit "keine Transaktion"-Fehler vermieden werden. Zweiphasen-Transaktionen haben sich nun rudimentär mit SQLAlchemy und cx_oracle als funktionierend erwiesen, unterliegen jedoch den beim Treiber beobachteten Vorbehalten. Details finden Sie in der Dokumentation.Referenzen: #2611
[oracle] [bug] ¶
Die Liste der cx_oracle-Typen, die von der setinputsizes()-Schritt ausgeschlossen werden, wurde geändert, um nur STRING und UNICODE einzuschließen; CLOB und NCLOB wurden entfernt. Dies dient zur Umgehung des cx_oracle-Verhaltens, das für den executemany()-Aufruf fehlerhaft ist. In 0.8 wird die gleiche Änderung vorgenommen, sie ist jedoch auch über das Argument exclude_setinputsizes konfigurierbar.
Referenzen: #2561
0.7.9¶
Veröffentlicht: Mo 01. Okt 2012orm¶
[orm] [bug] ¶
Fehler behoben, der hauptsächlich lokal in der neuen Hilfsfunktion AbstractConcreteBase auftrat, bei der das Attribut "type" von der Oberklasse auf der Unterklasse nicht überschrieben wurde, um die Fehlermeldung "für Basis reserviert" zu erzeugen, sondern stattdessen ein leeres Attribut dort platziert. Dies war inkonsistent im Vergleich zur Verwendung von ConcreteBase sowie im gesamten Verhalten von klassischen konkreten Zuordnungen, bei denen die "type"-Spalte von der polymorphen Basis explizit auf Unterklassen deaktiviert wurde, es sei denn, sie wurde explizit überschrieben.
[orm] [bug] ¶
Eine Warnung wird ausgegeben, wenn lazy='dynamic' mit uselist=False kombiniert wird. Dies ist in 0.8 eine Ausnahme.
[orm] [bug] ¶
Fehler behoben, bei dem Benutzerfehler bei der Zuweisung verwandter Objekte zu einer Rekursionsüberlaufung führen konnten, wenn die Zuweisung eine Backref mit demselben Namen wie ein bi-direktionales Attribut auf der falschen Klasse zum selben Ziel auslöste. Eine informative Fehlermeldung wird nun ausgegeben.
[orm] [bug] ¶
Fehler behoben, bei dem falsche Typinformationen übergeben wurden, wenn die ORM die "Version"-Spalte bindete, wenn die "Version"-Funktion verwendet wurde. Tests mit freundlicher Genehmigung von Daniel Miller.
Referenzen: #2539
[orm] [bug] ¶
Zusätzliche Logik wurde zum "Flush" hinzugefügt, der innerhalb von Session.commit() auftritt, sodass der von einem after_flush()- oder after_flush_postexec()-Hook hinzugefügte zusätzliche Zustand ebenfalls in einem nachfolgenden Flush gespült wird, bevor der "Commit" abgeschlossen ist. Nachfolgende Aufrufe von flush() werden fortgesetzt, bis die After-Flush-Hooks keine neuen Zustände mehr hinzufügen. Ein "Überlauf"-Zähler von 100 ist ebenfalls vorhanden, falls ein defekter After-Flush()-Hook bei jedem Aufruf neue Inhalte hinzufügt.
Referenzen: #2566
engine¶
[engine] [feature] ¶
Dramatische Verbesserung des Speicherverbrauchs des Ereignissystems; Instanzebenen-Sammlungen werden nicht für einen bestimmten Ereignistyp erstellt, bis Instanzebenen-Listener für dieses Ereignis eingerichtet sind.
Referenzen: #2516
[engine] [bug] ¶
Fehler behoben, bei dem ein Verbindungsabbruch-Erkennung + Dispose, der auftritt, wenn die QueuePool auf Verbindungen wartende Threads hat, diese Threads für die Dauer des Timeouts der alten Pool (oder unbegrenzt, wenn Timeout deaktiviert war) warten lassen würde. Die Korrektur benachrichtigt nun diese Wartenden mit einem speziellen Ausnahmefall und lässt sie zum neuen Pool übergehen.
Referenzen: #2522
[engine] [bug] ¶
GAERDBMS-Import zu mysql/__init__.py hinzugefügt, dessen Fehlen verhinderte, dass der neue GAE-Dialekt geladen wurde.
Referenzen: #2529
[engine] [bug] ¶
Fehler in der C-Erweiterung behoben, bei dem der "Mehrdeutiger Spaltenfehler" nicht richtig funktionierte, wenn der gegebene Index ein Spaltenobjekt und kein String war. Hinweis: Es gibt hier immer noch einige spaltenzielbezogene Probleme, die in 0.8 behoben sind.
Referenzen: #2553
[engine] [bug] ¶
repr() von Enum um die Flags "name" und "native_enum" erweitert. Hilft Alembic bei der automatischen Generierung.
sql¶
[sql] [bug] ¶
DropIndex-Konstrukt repariert, um einen Index zu unterstützen, der mit einer Tabelle in einem entfernten Schema verbunden ist.
Referenzen: #2571
[sql] [bug] ¶
Fehler im over()-Konstrukt behoben, bei dem die Übergabe einer leeren Liste für partition_by oder order_by, anstelle von None, nicht korrekt generiert werden konnte. Mit freundlicher Genehmigung von Gunnlaugur Þór Briem.
Referenzen: #2574
[sql] [bug] ¶
CTE-Fehler behoben, bei dem positionelle gebundene Parameter, die in den CTEs selbst vorhanden sind, die Gesamtordnung der gebundenen Parameter korrumpieren würden. Dies betraf hauptsächlich SQL Server als Plattform mit positionellen Bindungen + CTE-Unterstützung.
Referenzen: #2521
[sql] [bug] ¶
Weitere Unklarheiten in CTEs behoben, die die Referenzierung einer CTE in einer Union von sich selbst ohne Alias verhinderten. CTEs werden nun eindeutig nach Namen gerendert, wobei nur die äußerste CTE eines bestimmten Namens gerendert wird. Alle anderen Referenzen werden nur als Name gerendert. Dies schließt sogar andere CTE/SELECTs ein, die sich auf verschiedene Versionen desselben CTE-Objekts beziehen, wie z. B. ein SELECT oder ein UNION ALL dieses SELECTs. Wir lockern hier die übliche Verbindung zwischen Objektidentität und lexikalischer Identität etwas. Ein echter Namenskonflikt zwischen zwei nicht zusammenhängenden CTEs löst nun einen Fehler aus.
[sql] [bug] ¶
Die Anführungszeichen werden für die Spaltennamen innerhalb der WITH RECURSIVE-Klausel eines gemeinsamen Tabellenausdrucks gemäß den Anführungsregeln für die ursprüngliche Spalte angewendet.
Referenzen: #2512
[sql] [bug] ¶
Rückschritt behoben, der in 0.7.6 eingeführt wurde, bei dem die FROM-Liste einer SELECT-Anweisung in bestimmten "Klonen+Ersetzen"-Szenarien falsch sein konnte.
Referenzen: #2518
[sql] [bug] ¶
Fehler behoben, bei dem die Verwendung von UNION oder ähnlichem innerhalb einer eingebetteten Subquery das Ziel von Ergebnisspalten störte, wenn eine Ergebnisspalte denselben endgültigen Namen wie ein Name innerhalb der eingebetteten UNION hatte.
Referenzen: #2552
[sql] [bug] ¶
Ein Rückschritt seit 0.6 bezüglich der Ergebniszeilen-Zielsetzung behoben. Es sollte möglich sein, eine select()-Anweisung mit stringbasierten Spalten darin zu verwenden, d. h. select(['id', 'name']).select_from('mytable'), und diese Anweisung durch Spaltenobjekte mit diesen Namen ansprechbar zu machen; dies ist der Mechanismus, durch den query(MyClass).from_statement(some_statement) funktioniert. Irgendwann hörte der spezifische Fall der Verwendung von select(['id']), der äquivalent zu select([literal_column('id')]) ist, hier auf zu funktionieren, sodass dies wiederhergestellt und natürlich getestet wurde.
Referenzen: #2558
[sql] [bug] ¶
Fehlende Operatoren is_(), isnot() zur ColumnOperators-Basis hinzugefügt, sodass diese lange verfügbaren Operatoren wie alle anderen Operatoren als Methoden vorhanden sind.
Referenzen: #2544
postgresql¶
[postgresql] [bug] ¶
Spalten in reflektierten Primärschlüsselbeschränkungen werden nun in der Reihenfolge zurückgegeben, in der die Beschränkung sie selbst definiert, anstatt wie die Tabelle sie ordnet. Mit freundlicher Genehmigung von Gunnlaugur Þór Briem..
Referenzen: #2531
[postgresql] [bug] ¶
"Terminating connection" zur Liste der Meldungen hinzugefügt, die wir zur Erkennung einer Trennung mit PG verwenden, was in einigen Versionen vorhanden zu sein scheint, wenn der Server neu gestartet wird.
Referenzen: #2570
mysql¶
[mysql] [bug] ¶
MySQLconnector-Schnittstelle aktualisiert, um aktualisierte "client flag"- und "charset"-APIs zu verwenden, mit freundlicher Genehmigung von David McNelis.
sqlite¶
[sqlite] [feature] ¶
Unterstützung für die in SQLite implementierte SQL-Funktion localtimestamp() hinzugefügt, mit freundlicher Genehmigung von Richard Mitchell.
[sqlite] [bug] ¶
Eine sehr alte Fehlerkorrektur angepasst, die versuchte, ein SQLite-Problem zu umgehen, das selbst ab sqlite 3.6.14 "behoben" wurde, in Bezug auf Anführungszeichen um einen Tabellennamen bei Verwendung des "foreign_key_list"-Pragmas. Die Korrektur wurde so angepasst, dass sie Anführungszeichen, die sich *tatsächlich im Namen* einer Spalte oder Tabelle befinden, so weit wie möglich nicht stört. SQLite gibt immer noch kein korrektes Ergebnis für foreign_key_list() zurück, wenn die Zielspalte tatsächlich Anführungszeichen um ihren Namen hat, als *Teil* ihres Namens (d. h. ""mytable"").
Referenzen: #2568
[sqlite] [bug] ¶
Code zur Reflexion von Spaltenstandards angepasst, um Nicht-String-Werte in Strings zu konvertieren, um alte SQLite-Versionen zu unterstützen, die keine Standardinformationen als String liefern.
Referenzen: #2265
mssql¶
[mssql] [bug] ¶
Compilerfehler behoben, bei dem die Verwendung einer korrelierten Subquery in ORDER BY nicht korrekt gerendert wurde, wenn die Anweisung auch LIMIT/OFFSET verwendete, aufgrund von Fehlern in der ROW_NUMBER() OVER-Klausel. Korrektur mit freundlicher Genehmigung von sayap
Referenzen: #2538
[mssql] [bug] ¶
Compilerfehler behoben, bei dem eine gegebene select()-Anweisung modifiziert wurde, wenn sie ein "offset"-Attribut hatte, was dazu führte, dass die Konstruktion beim zweiten Mal nicht korrekt kompiliert wurde.
Referenzen: #2545
[mssql] [bug] ¶
Fehler behoben, bei dem die Reflexion der Primärschlüsselbeschränkung Spalten verdoppelte, wenn dieselbe Beschränkung/Tabelle in mehreren Schemas vorhanden war.
0.7.8¶
Veröffentlicht: Sa 16. Juni 2012orm¶
[orm] [feature] ¶
Das Argument 'objects' für flush() ist nicht mehr veraltet, da einige gültige Anwendungsfälle identifiziert wurden.
[orm] [bug] ¶
Fehler behoben, bei dem subqueryload() von einer polymorphen Zuordnung zu einem Ziel eine neue Abfrage für jede unterschiedliche Klasse, die im polymorphen Ergebnis angetroffen wurde, auslösen würde.
Referenzen: #2480
[orm] [bug] ¶
Fehler in deklarativ behoben, bei dem die Priorität von Spalten in einer Joined-Table, einer zusammengesetzten Spalte (typischerweise für id) nicht korrekt wäre, wenn die Spalten Namen enthielten, die sich von ihren Attributnamen unterschieden. Dies führte dazu, dass Dinge wie primaryjoin-Bedingungen, die gegen die Entitätsattribute gemacht wurden, falsch waren. In Bezug auf das, was dies sein sollte, ist dies.
[orm] [bug] ¶
Die Funktion identity_key() wurde repariert, die kein Skalarargument für die Identität akzeptierte.
Referenzen: #2508
[orm] [bug] ¶
Fehler behoben, bei dem die Option populate_existing nicht an Subquery-Eager-Loader weitergegeben wurde.
Referenzen: #2497
engine¶
[engine] [bug] ¶
Speicherleck in der C-Version des Ergebnisproxys behoben, bei der DBAPIs, die keine reinen Python-Tupel für Ergebniszeilen liefern, die Referenzzählungen nicht korrekt dekrementieren würden. Der prominenteste betroffene DBAPI ist pyodbc.
Referenzen: #2489
[engine] [bug] ¶
Fehler bei Py3K behoben, bei dem String-Positionsargumente, die an engine/connection execute() übergeben wurden, nicht korrekt interpretiert wurden, da __iter__ bei Py3K-Strings vorhanden ist.
Referenzen: #2503
sql¶
[sql] [bug] ¶
BIGINT zu types.__all__, BIGINT, BINARY, VARBINARY zum SQLAlchemy-Modul-Namespace hinzugefügt, plus Test, um sicherzustellen, dass dieser Bruch nicht erneut auftritt.
Referenzen: #2499
[sql] [bug] ¶
Gemeinsame Tabellenausdruck-Rendering repariert, um korrekt zu funktionieren, wenn die SELECT-Anweisung UNION oder andere zusammengesetzte Ausdrücke enthält, mit freundlicher Genehmigung von btbuilder.
Referenzen: #2490
[sql] [bug] ¶
Fehler behoben, bei dem append_column() bei einem geklonten select()-Konstrukt nicht korrekt funktionierte, mit freundlicher Genehmigung von Gunnlaugur Þór Briem.
Referenzen: #2482
postgresql¶
mysql¶
oracle¶
0.7.7¶
Veröffentlicht: Sa, 05. Mai 2012orm¶
[orm] [feature] ¶
Die Methode prefix_with() wurde zu Query hinzugefügt. Sie ruft select().prefix_with() auf, um die Platzierung von MySQL SELECT-Direktiven in Statements zu ermöglichen. Mit freundlicher Genehmigung von Diana Clarke.
Referenzen: #2443
[orm] [feature] ¶
Neues Flag @validates include_removes hinzugefügt. Wenn True, werden auch Collection-Remove- und Attribut-Delete-Ereignisse an die Validierungsfunktion gesendet, die ein zusätzliches Argument "is_remove" akzeptiert, wenn dieses Flag verwendet wird.
[orm] [bug] ¶
Problem in der Unit of Work behoben, bei dem das Setzen einer nicht-None-selbstreferenziellen Many-to-One-Beziehung auf None die Änderung nicht persistieren konnte, wenn der vorherige Wert noch nicht geladen war.
Referenzen: #2477
[orm] [bug] ¶
Fehler in 0.7.6 behoben, eingeführt durch fehlerhafte Funktion von column_mapped_collection bei Verwendung mit Spalten, die als Joins oder andere indirekte Selectables abgebildet wurden.
Referenzen: #2409
[orm] [bug] ¶
Fehler behoben, bei dem eine polymorphe Spalte (polymorphic_on), die nicht anderweitig auf der Klasse abgebildet war, fälschlicherweise in eine merge()-Operation einbezogen wurde, was zu einem Fehler führte.
Referenzen: #2449
[orm] [bug] ¶
Fehler in der Mechanik der Ausdrucksanmerkung behoben, der zu einer falschen Wiedergabe von SELECT-Statements mit Aliassen und Joins führen konnte, insbesondere bei Verwendung von column_property().
Referenzen: #2453
[orm] [bug] ¶
Fehler behoben, der verhinderte, dass OrderingList pickelbar war. Mit freundlicher Genehmigung von Jeff Dairiki.
Referenzen: #2454
[orm] [bug] ¶
Fehler bei Beziehungsumvergleichen behoben, bei dem die Aufrufe nicht implementierter Methoden wie SomeClass.somerelationship.like() zu einem Rekursionsüberlauf anstelle eines NotImplementedError führten.
sql¶
[sql] [feature] ¶
Neues Verbindungsereignis dbapi_error() hinzugefügt. Wird für alle Fehler auf DBAPI-Ebene aufgerufen und übergibt die ursprüngliche DBAPI-Ausnahme, bevor SQLAlchemy den Zustand des Cursors modifiziert.
[sql] [bug] ¶
Warnung entfernt, wenn ein Index ohne Spalten erstellt wird; obwohl dies möglicherweise nicht die Absicht des Benutzers war, ist es ein valider Anwendungsfall, da ein Index ein Platzhalter für einen Index eines bestimmten Namens sein könnte.
[sql] [bug] ¶
Wenn conn.begin() beim Aufruf von "with engine.begin()" fehlschlägt, wird die neu erworbene Verbindung explizit geschlossen, bevor die Ausnahme normal weitergegeben wird.
[sql] [bug] ¶
BINARY, VARBINARY zu types.__all__ hinzugefügt.
Referenzen: #2474
postgresql¶
[postgresql] [feature] ¶
Neue for_update/with_lockmode()-Optionen für PostgreSQL hinzugefügt: for_update="read"/ with_lockmode("read"), for_update="read_nowait"/ with_lockmode("read_nowait"). Diese geben "FOR SHARE" bzw. "FOR SHARE NOWAIT" aus. Mit freundlicher Genehmigung von Diana Clarke.
Referenzen: #2445
[postgresql] [bug] ¶
Unnötige Tabellenklausel beim Reflektieren von Domänen entfernt.
Referenzen: #2473
mysql¶
[mysql] [bug] ¶
Fehler behoben, bei dem der Spaltenname innerhalb der "KEY"-Klausel für die automatische Inkrementierung einer zusammengesetzten Spalte mit InnoDB einen Namen doppelt anführte, der ein reserviertes Wort ist. Mit freundlicher Genehmigung von Jeff Dairiki.
Referenzen: #2460
[mysql] [bug] ¶
Fehler behoben, bei dem get_view_names() für das Schema "information_schema" Ansichten, die als "SYSTEM VIEW" markiert waren, nicht abrufen konnte. Mit freundlicher Genehmigung von Matthew Turland.
[mysql] [bug] ¶
Fehler behoben, bei dem die Verwendung von cast() auf einem SQL-Ausdruck, dessen Typ von cast() nicht unterstützt wird und daher CAST nicht vom Dialekt gerendert wird, die Reihenfolge der Auswertung ändern konnte, wenn der gecastete Ausdruck gruppiert werden musste; die Gruppierung wird nun auf diese Ausdrücke angewendet.
Referenzen: #2467
sqlite¶
[sqlite] [feature] ¶
SQLite-Ausführungsoption "sqlite_raw_colnames=True" hinzugefügt. Diese umgeht Versuche, Punkte aus Spaltennamen zu entfernen, die von sqlite cursor.description zurückgegeben werden.
Referenzen: #2475
[sqlite] [bug] ¶
Wenn die Primärschlüsselspalte einer Tabelle ersetzt wird, z.B. durch extend_existing, wird die "auto increment"-Spalte, die von insert()-Konstrukten verwendet wird, zurückgesetzt. Zuvor bezog sie sich weiterhin auf die vorherige Primärschlüsselspalte.
Referenzen: #2525
mssql¶
[mssql] [feature] ¶
Unterstützung für das create_engine-Flag supports_unicode_binds für den PyODBC-Dialekt hinzugefügt, um zu erzwingen, ob der Dialekt Python-Unicode-Literale an PyODBC übergibt oder nicht.
[mssql] [bug] ¶
Das create_engine()-Flag use_scope_identity für den pyodbc-Dialekt repariert. Zuvor wurde dieses Flag ignoriert, wenn es auf False gesetzt war. Wenn es auf False gesetzt ist, wird "SELECT @@identity" nach jedem INSERT aufgerufen, um die zuletzt eingefügte ID zu erhalten, für Tabellen, bei denen "implicit_returning" auf False gesetzt ist.
[mssql] [bug] ¶
Die UPDATE..FROM-Syntax für SQL Server erfordert, dass die aktualisierte Tabelle in der FROM-Klausel vorhanden ist, wenn ein Alias dieser Tabelle ebenfalls in der FROM-Klausel vorhanden ist. Die aktualisierte Tabelle ist nun immer in FROM vorhanden, wenn FROM überhaupt vorhanden ist. Mit freundlicher Genehmigung von sayap.
Referenzen: #2468
0.7.6¶
Veröffentlicht: Mi, 14. März 2012orm¶
[orm] [feature] ¶
Kontextmanager "no_autoflush" zur Session hinzugefügt. Bei Verwendung mit with: wird autoflush vorübergehend deaktiviert.
[orm] [feature] ¶
Die Methode cte() wurde zu Query hinzugefügt. Sie nutzt die Unterstützung für Common Table Expressions aus dem Core (siehe unten).
Referenzen: #1859
[orm] [feature] ¶
Die Möglichkeit hinzugefügt, nach Tabellen gebundene Spaltennamen abzufragen, wenn query(sometable).filter_by(colname=value) verwendet wird.
Referenzen: #2400
[orm] [bug] ¶
Fehler bei der Ereignisregistrierung behoben, der sich hauptsächlich darin äußerte, dass Ereignisse nicht mit sessionmaker()-Instanzen registriert wurden, die nach der Zuordnung des Ereignisses zur Session-Klasse erstellt wurden.
Referenzen: #2424
[orm] [bug] ¶
Fehler behoben, bei dem eine primaryjoin-Bedingung mit einem "Literal" einen Fehler bei der Kompilierung in bestimmten tief verschachtelten Ausdrücken verursachte, die denselben gebundenen Parameternamen mehr als einmal rendern mussten.
Referenzen: #2425
[orm] [bug] ¶
Die Prüfung auf die Anzahl der betroffenen Zeilen bei der Multi-Löschung von gemappten Objekten wurde entfernt. Wenn eine ON DELETE CASCADE-Beziehung zwischen zwei Zeilen besteht, können wir keine genaue Zeilenzahl vom DBAPI erhalten; diese spezielle Zählung wird ohnehin auf den meisten DBAPIs nicht unterstützt, MySQLdb ist der bemerkenswerte Fall, wo sie unterstützt wird.
Referenzen: #2403
[orm] [bug] ¶
Fehler behoben, bei dem Objekte, die attribute_mapped_collection oder column_mapped_collection verwendeten, nicht pickelbar waren.
Referenzen: #2409
[orm] [bug] ¶
Fehler behoben, bei dem MappedCollection nicht die entsprechende Collection-Instrumentierung erhielt, wenn sie nur in einer benutzerdefinierten Unterklasse verwendet wurde, die @collection.internally_instrumented verwendete.
Referenzen: #2406
[orm] [bug] ¶
Fehler behoben, bei dem die SQL-Adaptionsmechanismen in einem sehr verschachtelten Szenario mit Joined-Inheritance, joinedload(), limit() und einer abgeleiteten Funktion in der Spaltenklausel fehlschlugen.
Referenzen: #2419
[orm] [bug] ¶
Das repr() für CascadeOptions wurde korrigiert, um refresh-expire einzuschließen. CascadeOptions wurde ebenfalls in ein frozenset umgewandelt.
Referenzen: #2417
[orm] [bug] ¶
Das Beispiel für "declarative reflection" wurde verbessert, um Single-Table-Inheritance, mehrere Aufrufe von prepare(), Tabellen in alternativen Schemas, und die Festlegung einer Teilmenge von Klassen als reflektiert zu unterstützen.
[orm] [bug] ¶
Der Test innerhalb von flush(), der auf UPDATE gegen teilweise NULL PK in einer Tabelle prüft, wurde zurückgefahren und wird nur noch ausgeführt, wenn tatsächlich ein UPDATE stattfindet.
Referenzen: #2390
[orm] [bug] ¶
Fehler behoben, bei dem bei Namenskonflikten zwischen einer Methode und einer Spalte ein TypeError ausgelöst wurde, wenn der Mapper versuchte, die __get__() Methode des Methodenobjekts zu inspizieren.
Referenzen: #2352
examples¶
[examples] [bug] ¶
Die Funktion _params_from_query() im Beaker-Beispiel wurde geändert, um Bindungsparameter aus dem vollständig kompilierten Statement zu ziehen, als schnelle Methode, um alles zu erhalten, einschließlich Unterabfragen in der Spaltenklausel usw.
engine¶
[engine] [feature] ¶
Die Ausführungsoption "no_parameters=True" für Verbindungen hinzugefügt. Wenn keine Parameter vorhanden sind, wird das Statement als cursor.execute(statement) übergeben, wodurch das Verhalten des DBAPI ohne Parameter-Kollektion ausgelöst wird; für psycopg2 und mysql-python bedeutet dies, dass keine Prozentzeichen im String interpretiert werden. Dies geschieht nur mit dieser Option und nicht einfach, wenn die Parameterliste leer ist, da dies sonst zu inkonsistentem Verhalten von SQL-Ausdrücken führen würde, die normalerweise Prozentzeichen escapen (und beim Kompilieren nicht im Voraus wissen können, ob Parameter vorhanden sein werden).
Referenzen: #2407
[engine] [feature] ¶
Das Argument pool_reset_on_return wurde zu create_engine hinzugefügt, um das Verhalten beim "Zurückgeben von Verbindungen" zu steuern. Außerdem wurden neue Argumente 'rollback', 'commit', None zu pool.reset_on_return hinzugefügt, um mehr Kontrolle über die Aktivität beim Zurückgeben von Verbindungen zu ermöglichen.
Referenzen: #2378
[engine] [feature] ¶
Einige nützliche Kontextmanager für Engine und Connection hinzugefügt.
with engine.begin() as conn: # <work with conn in a transaction> ...
und
with engine.connect() as conn: # <work with conn> ...
Schließen beide die Verbindung ab, wenn sie fertig sind, und committen oder rollen die Transaktion bei Fehlern mit engine.begin() zurück.
[engine] [bug] ¶
Die Methode execution_options() wurde zu MockConnection (d.h. der, die mit strategy="mock" verwendet wird) hinzugefügt, die als Weiterleitung für Argumente fungiert.
sql¶
[sql] [feature] ¶
Unterstützung für SQL-Standard Common Table Expressions (CTE) hinzugefügt, die SELECT-Objekte als CTE-Quelle zulassen (DML noch nicht unterstützt). Dies wird über die Methode cte() auf jedem select()-Konstrukt aufgerufen.
Referenzen: #1859
[sql] [bug] ¶
Speicherleck im Core behoben, das bei Verwendung von C-Erweiterungen mit bestimmten Arten von Ergebnisabrufen auftrat, insbesondere wenn orm query.count() aufgerufen wurde.
Referenzen: #2427
[sql] [bug] ¶
Problem behoben, bei dem der Attribut-basierte Spaltenzugriff auf eine Zeile mit der Nicht-C-Version einen AttributeError und mit der C-Version NoSuchColumnError auslöste. Nun wird in beiden Fällen AttributeError ausgelöst.
Referenzen: #2398
[sql] [bug] ¶
Unterstützung für die Verwendung von .key einer Spalte als String-Identifikator in einer Ergebniszeile hinzugefügt. .key wird derzeit als "alternativer" Name für eine Spalte aufgeführt und wird vom Namen einer Spalte überschrieben, die diesen Schlüsselwert als ihren regulären Namen hat. Für die nächste Hauptversion von SQLAlchemy könnte diese Priorität umgekehrt werden, sodass .key Vorrang hat, dies ist jedoch noch nicht entschieden.
Referenzen: #2392
[sql] [bug] ¶
Eine Warnung wird ausgegeben, wenn eine nicht vorhandene Spalte in der values()-Klausel eines insert()- oder update()-Konstrukts angegeben wird. Wird in 0.8 zu einer Ausnahme.
Referenzen: #2413
[sql] [bug] ¶
Eine bedeutende Änderung der Art und Weise, wie Labels Spalten in SELECT-Statements zugewiesen werden, ermöglicht "verkürzte" Labels, d. h. in Python generierte Labelnamen, die die maximale Identifikatorlänge überschreiten (beachten Sie, dass dies über label_length bei create_engine() konfigurierbar ist), um korrekt referenziert zu werden, wenn sie innerhalb einer Unterabfrage gerendert werden, sowie um in einer Ergebniszeile unter Verwendung ihrer ursprünglichen Namen in Python vorhanden zu sein.
Referenzen: #2396
[sql] [bug] ¶
Fehler im neuen Flag "autoload_replace" behoben, das die Primärschlüsselbeschränkung der reflektierten Tabelle nicht beibehalten konnte.
Referenzen: #2402
[sql] [bug] ¶
Index löst aus, wenn übergebene Argumente nicht als Spalten oder Ausdrücke interpretiert werden können. Warnt, wenn Index ohne Spalten erstellt wird.
Referenzen: #2380
mysql¶
[mysql] [feature] ¶
Unterstützung für MySQL-Index- und Primärschlüsselbeschränkungstypen (z. B. USING) über den neuen Parameter mysql_using für Index und PrimaryKeyConstraint hinzugefügt, mit freundlicher Genehmigung von Diana Clarke.
Referenzen: #2386
[mysql] [feature] ¶
Unterstützung für den Parameter "isolation_level" zu allen MySQL-Dialekten hinzugefügt. Dank mu_mind für den Patch.
Referenzen: #2394
sqlite¶
mssql¶
oracle¶
[oracle] [feature] ¶
Neues create_engine()-Flag coerce_to_decimal=False hinzugefügt, das die numerische Präzisionsbehandlung deaktiviert, die viel Overhead verursachen kann, indem alle numerischen Werte in Decimal umgewandelt werden.
Referenzen: #2399
[oracle] [bug] ¶
Fehlende Kompilierungsunterstützung für LONG hinzugefügt.
Referenzen: #2401
[oracle] [bug] ¶
"LEVEL" zur Liste der reservierten Wörter für Oracle hinzugefügt.
Referenzen: #2435
0.7.5¶
Veröffentlicht: Sa, 28. Januar 2012orm¶
[orm] [feature] ¶
Argument "class_registry" zu declarative_base() hinzugefügt. Ermöglicht es zwei oder mehr deklarativen Basen, dieselbe Registry von Klassennamen zu teilen.
[orm] [feature] ¶
query.filter() akzeptiert mehrere Kriterien, die mit UND verknüpft werden, d. h. query.filter(x==y, z>q, ...)
[orm] [feature] ¶
Neue Funktion zu Relationship-Loader-Optionen hinzugefügt, die "Standard"-Loader-Strategien zulässt. Übergeben Sie '*' an joinedload(), lazyload(), subqueryload() oder noload(), und dies wird zur Loader-Strategie für alle Beziehungen, außer denen, die explizit in der Query angegeben sind. Dank des aufstrebenden Mitwirkenden Kent Bower für eine ausführliche und gut geschriebene Testsuite!
Referenzen: #2351
[orm] [feature] ¶
Neues Beispiel für deklarative Reflektion hinzugefügt. Es wird veranschaulicht, wie Tabellenreflexion am besten mit Deklarative gemischt wird und nutzt auch neue Funktionen aus.
Referenzen: #2356
[orm] [bug] ¶
Problem behoben, bei dem modifizierter Session-Zustand, der nach einem fehlgeschlagenen Flush hergestellt wurde, als Teil der nachfolgenden Transaktion committet wurde, die nach manuellem Aufruf von rollback() automatisch beginnt. Der Zustand der Session wird innerhalb von rollback() überprüft, und wenn neuer Zustand vorhanden ist, wird eine Warnung ausgegeben und restore_snapshot() wird ein zweites Mal aufgerufen, wodurch diese Änderungen verworfen werden.
Referenzen: #2389
[orm] [bug] ¶
Regression aus 0.7.4 behoben, bei der die Verwendung einer bereits instrumentierten Spalte von einer Superklasse als "polymorphic_on" die zugrunde liegende Spalte nicht auflösen konnte.
Referenzen: #2345
[orm] [bug] ¶
Löst eine Ausnahme aus, wenn xyzload_all() unangemessen mit zwei nicht verbundenen Beziehungen verwendet wird.
Referenzen: #2370
[orm] [bug] ¶
Fehler behoben, bei dem event.listen(SomeClass) eine unnötige Kompilierung des Mappers erzwang, was die Einrichtung von Ereignissen zur Modulimportzeit sehr erschwerte (das hat niemand bemerkt??)
Referenzen: #2367
[orm] [bug] ¶
Fehler behoben, bei dem hybrid_property nicht als kw-Argument in any(), has() funktionierte.
[orm] [bug] ¶
Sicherstellen, dass alle ORM-Ausnahmen für die Multiprocessing-Kompatibilität pickelbar sind.
Referenzen: #2371
[orm] [bug] ¶
Standard "can't set attribute" / "can't delete attribute" AttributeError implementiert, wenn setattr/delattr auf ein Hybrid angewendet wird, das kein fset oder fdel definiert.
Referenzen: #2353
[orm] [bug] ¶
Fehler behoben, bei dem ein ungepickeltes Objekt nicht genügend Zustand für die korrekte Funktion innerhalb des durch die mutable object extension eingerichteten unpickle()-Ereignisses hatte, wenn das Objekt ORM-Attributzugriff innerhalb von __eq__() oder ähnlichem benötigte.
Referenzen: #2362
[orm] [bug] ¶
Fehler behoben, bei dem die "merge"-Kaskade ein ungeladenes Attribut falsch interpretieren konnte, wenn das Flag load_on_pending mit relationship() verwendet wurde. Dank Kent Bower für die Tests.
Referenzen: #2374
[orm] ¶
Regression aus 0.6 behoben, bei der die Verwendung des "load_on_pending"-Flags relationship(), wenn eine Lazy-Klausel, die kein "get()" ist, auf einem ausstehenden Objekt emittiert werden musste, das Laden fehlschlug.
examples¶
[examples] [feature] ¶
Das Versionierungsbeispiel wurde vereinfacht, um einen deklarativen Mixin sowie einen Event-Listener anstelle einer Metaklasse + SessionExtension zu verwenden.
Referenzen: #2313
[examples] [bug] ¶
large_collection.py wurde korrigiert, um die Session vor dem Löschen von Tabellen zu schließen.
Referenzen: #2346
engine¶
[engine] [bug] ¶
Fügte __reduce__ zu StatementError, DBAPIError, column errors hinzu, damit Ausnahmen pickelbar sind, wie bei der Verwendung von Multiprocessing. Allerdings unterstützen noch nicht alle DBAPIs dies, z.B. psycopg2.
Referenzen: #2371
[engine] [bug] ¶
Verbesserte Fehlermeldungen, wenn ein Nicht-String oder ungültiger String an einen der Datums-/Zeitprozessoren von SQLite übergeben wird, einschließlich C- und Python-Versionen.
Referenzen: #2382
[engine] [bug] ¶
Fehler behoben, bei dem eine Tabellen-gebundene Column-Objekt mit dem Namen "<a>_<b>", das mit einer Spalte übereinstimmte, die als "<tablename>_<colname>" bezeichnet wurde, unangemessen übereinstimmen konnte, wenn auf eine Ergebniszeile zugegriffen wurde.
Referenzen: #2377
[engine] [bug] ¶
Fehler in der "mock"-Strategie behoben, bei der die korrekte DDL-Besuchsmethode nicht aufgerufen wurde, was zu einer doppelten Ausgabe von "CREATE/DROP SEQUENCE"-Anweisungen führte.
Referenzen: #2384
sql¶
[sql] [feature] ¶
Neues Reflexionsfeature "autoload_replace"; wenn auf False für Table gesetzt, kann die Tabelle ohne Ersetzung bestehender Spalten reflektiert werden. Ermöglicht flexiblere Ketten von Tabellenerstellung/Reflektion, einschließlich der Kombination von Deklarativer mit Tabellenreflexion. Siehe neues Beispiel im Wiki.
Referenzen: #2356
[sql] [feature] ¶
Die Ausdruckskonstrukte "false()" und "true()" wurden dem Namespace sqlalchemy.sql hinzugefügt, sind aber noch nicht Teil von __all__.
[sql] [feature] ¶
Dialekt-spezifische Compiler lösen nun CompileError für alle Probleme bei der Kompilierung von Typen/Anweisungen aus, anstelle von InvalidRequestError oder ArgumentError. DDL für CREATE TABLE wird CompileError erneut auslösen, um Tabellen-/Spalteninformationen für die problematische Spalte einzuschließen.
Referenzen: #2361
[sql] [bug] ¶
Verbesserte die API für add_column(), sodass, wenn dieselbe Spalte zu ihrer eigenen Tabelle hinzugefügt wird, kein Fehler ausgelöst wird und die Einschränkungen nicht doppelt auftreten. Hilft auch bei einigen Reflektions-/deklarativen Mustern.
Referenzen: #2356
[sql] [bug] ¶
Behoben, dass die Ausnahme "required" nicht für bindparam() mit required=True ausgelöst wurde, wenn der Anweisung überhaupt keine Parameter gegeben wurden.
Referenzen: #2381
mysql¶
sqlite¶
[sqlite] [bug] ¶
Der "Name" einer FK-Beschränkung in SQLite wird als "None" reflektiert, nicht als "0" oder ein anderer Ganzzahlwert. SQLite scheint sowieso keine Beschränkungsbenennung zu unterstützen.
Referenzen: #2364
[sqlite] [bug] ¶
sql.false() und sql.true() werden in sqlite zu 0 bzw. 1 kompiliert
Referenzen: #2368
[sqlite] [bug] ¶
Entfernte eine fehlerhafte "raise"-Anweisung im SQLite-Dialekt beim Abrufen von Tabellen- und View-Namen, bei der Logik vorhanden ist, um auf eine ältere SQLite-Version zurückzugreifen, die keine "sqlite_temp_master"-Tabelle hat.
mssql¶
[mssql] [bug] ¶
Angepasster Regex, der im mssql.TIME-Typ verwendet wird, um sicherzustellen, dass nur sechs Ziffern für den "Mikrosekunden"-Teil des Wertes empfangen werden, was von Python's datetime.time() erwartet wird. Beachten Sie, dass die Unterstützung für das Senden von Mikrosekunden mit pyodbc zumindest noch nicht möglich zu sein scheint.
Referenzen: #2340
[mssql] [bug] ¶
Die Beschränkung von 30 Zeichen für pymssql wurde fallen gelassen, basierend auf Berichten, dass es heutzutage besser funktioniert. pymssql wurde nicht gut getestet und da sich die DBAPI im Wandel befindet, ist es immer noch unklar, was der Status dieses Treibers ist und wie die SQLAlchemy-Implementierung angepasst werden sollte.
Referenzen: #2347
oracle¶
misc¶
[bug] [core] ¶
LRUCache, die vom Mapper zum Caching von INSERT/UPDATE/DELETE-Anweisungen verwendet wird, wurde so geändert, dass sie einen inkrementellen Zähler anstelle eines Zeitstempels zum Nachverfolgen von Einträgen verwendet, für höhere Zuverlässigkeit im Vergleich zur Verwendung von time.time(), die auf einigen Plattformen zu Testfehlern führen kann.
Referenzen: #2379
[bug] [core] ¶
Eine boolesche Prüfung für die "finalize"-Funktion innerhalb des schwachen Referenz-Callbacks des Pool-Verbindungsproxys wurde hinzugefügt, bevor sie aufgerufen wird, sodass keine Warnung ausgegeben wird, dass diese Funktion None ist, wenn die Anwendung beendet wird und der GC die Funktion aus dem Modul entfernt hat, bevor der schwache Referenz-Callback aufgerufen wurde.
Referenzen: #2383
[bug] [py3k] ¶
Die unangemessene Verwendung des util.py3k-Flags wurde korrigiert und in util.py3k_warning umbenannt, da dieses Flag nur zur Erkennung der Import-Beschränkungen der -3-Flag-Reihe gedacht ist.
Referenzen: #2348
0.7.4¶
Veröffentlicht: Fr 09 Dez 2011orm¶
[orm] [feature] ¶
polymorphic_on akzeptiert jetzt viele neue Arten von Werten
Eigenständige Ausdrücke, die sonst nicht zugeordnet sind
column_property()-Objekte
Zeichenkettennamen von beliebigen column_property()- oder Attributnamen einer zugeordneten Column
Die Dokumentation enthält ein Beispiel, das die case()-Konstruktion verwendet, die wahrscheinlich eine häufig verwendete Konstruktion hier ist. und Teil von
Eigenständige Ausdrücke in polymorphic_on werden an Single-Table-Inheritance-Subklassen weitergegeben, sodass sie in der WHERE-/JOIN-Klausel verwendet werden, um Zeilen auf diese Unterklasse zu beschränken, wie es das übliche Verhalten ist.
[orm] [feature] ¶
IdentitySet unterstützt den - Operator als Same wie difference(), praktisch beim Umgang mit Session.dirty etc.
Referenzen: #2301
[orm] [feature] ¶
Neuer Wert für Column autoincrement namens "ignore_fk" hinzugefügt, kann verwendet werden, um Autoincrement auf einer Spalte zu erzwingen, die noch Teil einer ForeignKeyConstraint ist. Ein neues Beispiel in der relationship-Dokumentation veranschaulicht dessen Verwendung.
[orm] [bug] ¶
Backref-Verhalten korrigiert, wenn der Wert von einem many-to-one beim Entfernen von einem veralteten one-to-many "gepoppt" wird - die Operation wird übersprungen, da das many-to-one inzwischen aktualisiert wurde.
Referenzen: #2315
[orm] [bug] ¶
Nach einigen Jahren des Nicht-Tuns wurde die Granularität der Funktionalität "ist X ein Elternteil von Y" erhöht, die verwendet wird, um festzustellen, ob die FK auf "Y" ebenfalls auf "null" gesetzt werden muss und ob "Y" mit delete-orphan-Kaskade gelöscht werden soll. Der Test berücksichtigt nun die Python-Identität des Elternteils sowie seinen Identitätsschlüssel, um zu sehen, ob der zuletzt bekannte Elternteil von Y definitiv X ist. Wenn keine Entscheidung getroffen werden kann, wird ein StaleDataError ausgelöst. Die Bedingungen, unter denen dieser Fehler ausgelöst wird, sind ziemlich selten und erfordern, dass der vorherige Elternteil garbage collected wurde. Früher konnte es sehr gut passieren, dass fälschlicherweise ein Datensatz aktualisiert/gelöscht wurde, der inzwischen zu einem neuen Elternteil gewechselt ist, obwohl es Fälle geben mag, in denen zuvor "stille Erfolge" auftraten, die nun angesichts von Mehrdeutigkeiten zu Fehlern führen. Das Ablaufen von "Y" setzt den "Elternteil"-Tracker zurück, was bedeutet, dass X.remove(Y) dann Y löschen könnte, auch wenn X veraltet ist, aber das ist dasselbe Verhalten wie zuvor; es wird empfohlen, in diesem Fall auch X ablaufen zu lassen.
Referenzen: #2264
[orm] [bug] ¶
Unangemessene Auswertung eines benutzerdefinierten Objekts im booleschen Kontext innerhalb von query.get() korrigiert. Auch in 0.6.9.
Referenzen: #2310
[orm] [bug] ¶
Fehlendes Komma zum PASSIVE_RETURN_NEVER_SET Symbol hinzugefügt
Referenzen: #2304
[orm] [bug] ¶
Cls.column.collate("some collation") funktioniert jetzt. Auch in 0.6.9
Referenzen: #1776
[orm] [bug] ¶
Der Wert eines zusammengesetzten Attributs wird nun nach einer Insert- oder Update-Operation abgelaufen, anstatt vor Ort neu generiert zu werden. Dies stellt sicher, dass ein Spaltenwert, der während eines Flushes abgelaufen ist, zuerst geladen wird, bevor das zusammengesetzte Objekt mit diesem Wert neu generiert wird.
Referenzen: #2309
[orm] [bug] ¶
Die Korrektur löst auch das "refresh"-Ereignis aus, wenn der zusammengesetzte Wert beim Zugriff geladen wird, auch wenn alle Spaltenwerte bereits vorhanden waren, wie es sich gehört. Dies korrigiert die "mutable"-Erweiterung, die sich auf das "load"-Ereignis verlässt, um sicherzustellen, dass das _parents-Wörterbuch auf dem neuesten Stand ist, korrigiert. Vielen Dank an Scott Torborg für den Testfall hier.
[orm] [bug] ¶
Behob einen Fehler, bei dem eine Unterklasse einer Unterklasse, die Concrete Inheritance in Verbindung mit der neuen ConcreteBase oder AbstractConcreteBase verwendet, die Unterklassen tiefer als eine Ebene nicht auf den "polymorphen Lader" jeder Basis anwenden konnte.
Referenzen: #2312
[orm] [bug] ¶
Behob einen Fehler, bei dem eine Unterklasse einer Unterklasse, die die neue AbstractConcreteBase verwendet, beim Generieren des "base"-Mappers nicht das korrekte "base_mapper"-Attribut erwarb, was später zu Fehlern führte.
Referenzen: #2312
[orm] [bug] ¶
Behob einen Fehler, bei dem column_property(), das gegen eine ORM-Spalte erstellt wurde, bei der Erzeugung bestimmter Arten von joined-inh Joins als eigenständige Entität behandelt werden konnte.
Referenzen: #2316
[orm] [bug] ¶
Fehlerformatierung korrigiert, die ausgelöst wurde, wenn ein Tupel versehentlich an session.query() übergeben wurde. Auch in 0.6.9.
Referenzen: #2297
[orm] [bug] ¶
Aufrufe von query.join() an eine Single-Table-Inheritance-Unterklasse werden jetzt verfolgt und verwendet, um das zusätzliche WHERE..IN-Kriterium zu eliminieren, das normalerweise bei Single-Table-Inheritance angehängt wird, da der Join es berücksichtigen sollte. Dies ermöglicht OUTER JOIN zu einer Single-Table-Unterklasse, um die korrekten Ergebnisse zu liefern, und insgesamt werden weniger WHERE-Kriterien bei der Behandlung von Single-Table-Inheritance-Joins erzeugt.
Referenzen: #2328
[orm] [bug] ¶
__table_args__ kann jetzt als leeres Tupel sowie als leeres Dictionary übergeben werden. Danke an Fayaz Yusuf Khan für den Patch.
Referenzen: #2339
[orm] [bug] ¶
Aktualisierte Warnmeldung beim Setzen von delete-orphan ohne delete, die sich nicht mehr auf 0.6 bezieht, da wir es nie geschafft haben, dies zu einer Ausnahme zu machen. Idealerweise wäre dies vielleicht besser als Ausnahme, aber es ist nicht kritisch.
Referenzen: #2325
[orm] [bug] ¶
Behob einen Fehler in get_history(), wenn auf ein zusammengesetztes Attribut ohne Wert verwiesen wurde; fügte Abdeckung für get_history() bezüglich Composites hinzu, was ansonsten nur eine Benutzerfunktion ist.
examples¶
[examples] [bug] ¶
Behob einen Fehler im history_meta.py-Beispiel, bei dem das "unique"-Flag von einer Single-Table-Inheritance-Unterklasse nicht entfernt wurde, die Spalten generiert, um sie in die Basis zu legen.
engine¶
[engine] [bug] ¶
Behob einen Fehler, bei dem transaction.rollback() einen Fehler bei einer ungültigen Verbindung auslöste, wenn die Transaktion eine Zwei-Phasen- oder Savepoint-Transaktion war. Bei einfachen Transaktionen ist rollback() ein No-Op, wenn die Verbindung ungültig ist. Während es nicht zu 100% klar war, ob es ein No-Op sein sollte, ist die Schnittstelle jetzt zumindest konsistent.
Referenzen: #2317
sql¶
[sql] [feature] ¶
Die update()-Konstruktion kann jetzt mehrere Tabellen in der WHERE-Klausel aufnehmen, was eine "UPDATE..FROM"-Konstruktion rendert, die von PostgreSQL und MSSQL erkannt wird. Beim Kompilieren auf MySQL wird stattdessen "UPDATE t1, t2, .." generiert. MySQL kann zusätzlich im SET-Teil gegen mehrere Tabellen rendern, wenn Spaltenobjekte als Schlüssel im "values"-Parameter oder der generativen Methode verwendet werden.
[sql] [feature] ¶
Zugriff auf Typen namens "python_type" hinzugefügt, gibt das rudimentäre Python-Typobjekt für eine bestimmte TypeEngine-Instanz zurück, wenn bekannt, sonst löst es NotImplementedError aus.
Referenzen: #77
[sql] [bug] ¶
Im Zusammenhang mit dem Wechsel von bezüglich der "from"-Liste eines select() wurden einige Anpassungen vorgenommen. Die _froms-Sammlung wird nicht mehr zwischengespeichert, da dies verschiedene Anwendungsfälle vereinfacht und die Notwendigkeit einer "Warnung" beseitigt, wenn eine Spalte an eine Tabelle angehängt wird, nachdem sie bereits in einem Ausdruck verwendet wurde - die select()-Konstruktion wird nun immer den korrekten Ausdruck liefern. Es gibt wahrscheinlich keine wirkliche Leistungseinbuße; select()-Objekte werden fast immer ad hoc erstellt, und Systeme, die die Wiederverwendung eines select() optimieren möchten, würden die "compiled_cache"-Funktion verwenden. Ein Treffer, der beim Aufruf von select.bind auftreten würde, wurde reduziert, aber die überwiegende Mehrheit der Benutzer sollte ohnehin keine "gebundene Metadaten" verwenden :).
[sql] [bug] ¶
Weitere Anpassung der Korrektur von, damit generative Methoden auf geklonten Objekten etwas besser funktionieren (dies ist jedoch fast ein Nicht-Anwendungsfall). Insbesondere ermöglicht dies, dass with_only_columns() konsistenter funktioniert. Zusätzliche Dokumentation zu with_only_columns() wurde hinzugefügt, um das erwartete Verhalten zu verdeutlichen, das sich infolge davon geändert hat.
schema¶
[schema] [feature] ¶
Neue Unterstützung für Remote-"Schemata" hinzugefügt
[schema] [feature] ¶
Das Flag "extend_existing" bei Table erlaubt nun, dass der Reflektionsprozess für ein Table-Objekt wirksam wird, das bereits definiert wurde; wenn autoload=True und extend_existing=True beide gesetzt sind, wird die vollständige Menge der Spalten aus der Tabelle reflektiert, die dann die bereits vorhandenen Spalten *überschreiben*, anstatt dass keine Aktivität stattfindet. Spalten, die direkt in der Autoload-Ausführung vorhanden sind, werden wie immer verwendet.
Referenzen: #1410
[schema] [bug] ¶
Behob einen Fehler, bei dem TypeDecorator einen veralteten Wert für _type_affinity zurückgab, wenn ein TypeDecorator verwendet wurde, der Typen "wechselt", wie der CHAR/UUID-Typ.
[schema] [bug] ¶
Behob einen Fehler, bei dem die Option "order_by='foreign_key'" von Inspector.get_table_names die Sortierung nicht richtig implementierte, ersetzt durch den vorhandenen Sortieralgorithmus
[schema] [bug] ¶
Der "Name" einer CHECK-Beschränkung auf Spaltenebene wird nun, falls vorhanden, in der CREATE TABLE-Anweisung mit "CONSTRAINT <name> CHECK <expression>" gerendert.
Referenzen: #2305
[schema] ¶
MetaData() akzeptiert die Argumente "schema" und "quote_schema", die auf die gleichnamigen Argumente einer Table oder Sequence angewendet werden, wenn diese ihre Standardwerte von
Nonebeibehalten.[schema] ¶
Sequence akzeptiert das Argument "quote_schema"
[schema] ¶
tometadata() für Table verwendet das "schema" der eingehenden MetaData für die neue Table, wenn das Schema-Argument explizit "None" ist
[schema] ¶
CreateSchema und DropSchema DDL-Konstrukte hinzugefügt - diese akzeptieren nur den Zeichenkettennamen eines Schemas und ein "quote"-Flag.
[schema] ¶
Wenn ein Standard-"Schema" mit MetaData verwendet wird, geht ForeignKey auch vom "Standard"-Schema aus, wenn eine entfernte Tabelle lokalisiert wird. Dies ermöglicht es, dass das "schema"-Argument auf MetaData auf eine beliebige Menge von Table-Objekten angewendet wird, die ansonsten kein "schema" haben.
[schema] ¶
Eine "has_schema"-Methode wurde auf dem Dialekt implementiert, funktioniert aber bisher nur unter PostgreSQL. Mit freundlicher Genehmigung von Manlio Perillo.
Referenzen: #1679
postgresql¶
[postgresql] [feature] ¶
create_type-Konstruktorargument zu pg.ENUM hinzugefügt. Wenn False, werden beim Erstellen/Löschen einer Tabelle keine CREATE/DROP- oder Überprüfungsaktionen für den Typ durchgeführt. Nur die Methoden create()/drop() selbst führen dies durch. Hilft bei den "offline"-Skripten von Alembic.
[postgresql] [bug] ¶
Der PostgreSQL-Dialekt merkt sich, dass ein ENUM eines bestimmten Namens während einer Erstellungs-/Löschsequenz verarbeitet wurde. Dies ermöglicht eine Erstellungs-/Löschsequenz ohne Aufrufe von "checkfirst" und bedeutet auch, dass mit aktiviertem "checkfirst" nur einmal nach dem ENUM gesucht werden muss.
Referenzen: #2311
mysql¶
[mysql] [bug] ¶
Unicode-Anpassungen ermöglichen, dass das neueste pymysql (nach 0.4) unter Python 2 zu 100 % besteht.
mssql¶
[mssql] [feature] ¶
Die Beschränkung für SAVEPOINT für SQL Server wurde aufgehoben. Alle Tests bestehen damit, es ist jedoch nicht bekannt, ob es tiefere Probleme gibt.
Referenzen: #822
[mssql] [bug] ¶
Die with_hint()-Funktion wurde repariert, die unter MSSQL nicht korrekt implementiert war - normalerweise verwendet für den "WITH (NOLOCK)"-Hinweis (den Sie sowieso nicht verwenden sollten! Verwenden Sie stattdessen Snapshot-Isolation :)).
Referenzen: #2336
[mssql] [bug] ¶
Verwendet neue pyodbc-Versionserkennung für die Option _need_decimal_fix.
Referenzen: #2318
[mssql] [bug] ¶
Gießt den "Tabellennamen" unter SQL Server 2000 nicht als NVARCHAR um. Ich bin mir immer noch ziemlich unsicher, welche Anweisungen erforderlich sind, um PyODBC mit FreeTDS 0.91 hier vollständig zum Laufen zu bringen.
Referenzen: #2343
[mssql] [bug] ¶
Dekodiert eingehende Werte beim Abrufen der Liste von Indexnamen und der Namen von Spalten innerhalb dieser Indizes.
Referenzen: #2269
misc¶
[feature] [ext] ¶
Ein Beispiel für die Hybrid-Dokumentation eines "Transformers" hinzugefügt - ein Hybrid, der einen Query-transformierenden Callable in Kombination mit einem benutzerdefinierten Comparator zurückgibt. Verwendet eine neue Methode für Query namens with_transformation(). Der Anwendungsfall ist hier ziemlich experimentell, fügt aber nur eine Zeile Code zu Query hinzu.
[bug] [pyodbc] ¶
pyodbc-basierte Dialekte analysieren pyodbc jetzt so genau wie beobachtete pyodbc-Strings, einschließlich solcher Edelsteine wie "py3-3.0.1-beta4"
Referenzen: #2318
[bug] [ext] ¶
Der @compiles-Decorator löst eine informative Fehlermeldung aus, wenn kein "standardmäßiger" Kompilierungs-Handler vorhanden ist, anstelle von KeyError.
0.7.3¶
Veröffentlicht: So 16. Okt 2011general¶
[general] ¶
Der "importlater"-Mechanismus, der intern zur Auflösung von Importzyklen verwendet wird, wurde so angepasst, dass die Verwendung von __import__ abgeschlossen wird, wenn der Import von sqlalchemy oder sqlalchemy.orm abgeschlossen ist, wodurch jegliche Verwendung von __import__ nach dem Start neuer Threads durch die Anwendung vermieden wird. Auch in 0.6.9.
Referenzen: #2279
orm¶
[orm] ¶
query.join() wurde verbessert, sodass die "linke" Seite flexibler ein nicht-ORM-auswählbares Element sein kann, wie z. B. eine Subquery. Ein in select_from() platziertes auswählbares Element wird nun als linke Seite verwendet und hat Vorrang vor der impliziten Verwendung einer zugeordneten Entität. Wenn der Join aufgrund fehlender Fremdschlüssel fehlschlägt, enthält die Fehlermeldung diese Details. Danke an brianrhude auf IRC für den Testfall.
Referenzen: #2298
[orm] ¶
Das Session-Ereignis after_soft_rollback() wurde hinzugefügt. Dieses Ereignis wird bedingungslos ausgelöst, wenn rollback() aufgerufen wird, unabhängig davon, ob ein tatsächlicher Rollback auf DBAPI-Ebene stattgefunden hat. Dieses Ereignis ist speziell dafür ausgelegt, Operationen mit der Session nach einem Rollback fortzusetzen, wenn Session.is_active True ist.
Referenzen: #2241
[orm] ¶
Das boolesche Flag "adapt_on_names" wurde zur orm.aliased()-Konstruktion hinzugefügt. Ermöglicht es einer aliased()-Konstruktion, die ORM-Entität mit einem auswählbaren Element zu verknüpfen, das Aggregationen oder andere abgeleitete Formen eines bestimmten Attributs enthält, vorausgesetzt, der Name ist derselbe wie der des zugeordneten Spaltennamens der Entität.
[orm] ¶
Neues Flag expire_on_flush=False für column_property() hinzugefügt, markiert Eigenschaften, die ansonsten als "schreibgeschützt" gelten würden, d. h. aus SQL-Ausdrücken abgeleitet, so dass sie ihren Wert nach einem Flush beibehalten, auch wenn das übergeordnete Objekt selbst an einer Aktualisierung beteiligt war.
[orm] ¶
Die Instrumentierung im ORM wurde erweitert, um Py3K's neuen Argumentstil von "erforderlichen Schlüsselwortargumenten" zu unterstützen, d.h. fn(a, b, *, c, d), fn(a, b, *args, c, d). Die Argumentsignaturen der __init__-Methode von zugeordneten Objekten werden beibehalten, einschließlich der Regeln für erforderliche Schlüsselwörter.
Referenzen: #2237
[orm] ¶
Behob einen Fehler in der Unit of Work, bei dem die Erkennung von "Zyklen" zwischen Klassen in stark verknüpften Mustern kein deterministisches Ergebnis lieferte; dadurch wurden manchmal einige Knoten übersehen, die als Zyklen betrachtet werden sollten, und es kam zu weiteren Problemen. Hinweis: Dieser Fehler tritt auch in 0.6 auf; wird derzeit nicht zurückportiert.
Referenzen: #2282
[orm] ¶
Eine Vielzahl von Synonym()-bezogenen Regressionen aus 0.6 wurde behoben
Ein Synonym für ein Synonym zu erstellen funktioniert jetzt.
Synonyme, die gegen ein relationship() erstellt wurden, können an query.join() übergeben werden, Optionen, die an query.options() gesendet wurden, per Name an query.with_parent() übergeben.
[orm] ¶
Behob einen Fehler, bei dem das mapper.order_by-Attribut in der "inneren" Abfrage einer Subquery-Eager-Load ignoriert wurde. Ebenfalls in 0.6.9.
Referenzen: #2287
[orm] ¶
Identity map .discard() verwendet intern dict.pop(,None) anstelle von "del", um KeyError/Warnungen während eines nicht-deterministischen gc-Teardowns zu vermeiden
Referenzen: #2267
[orm] ¶
Behob eine Regression in der neuen zusammengesetzten Neufassung, bei der die Option deferred=True aufgrund fehlender Importe fehlschlug
Referenzen: #2253
[orm] ¶
Das Argument "comparator_factory" für composite() wurde wiederhergestellt, entfernt, als 0.7 veröffentlicht wurde.
Referenzen: #2248
[orm] ¶
Behob einen Fehler in query.join(), der in einem komplexen Szenario mit mehreren überlappenden Pfaden auftrat, bei dem dieselbe Tabelle zweimal verknüpft werden konnte. Vielen Dank an Dave Vitek für die ausgezeichnete Korrektur hier.
Referenzen: #2247
[orm] ¶
Query konvertiert einen OFFSET von Null beim Slicing in None, damit unnötige OFFSET-Klauseln nicht aufgerufen werden.
[orm] ¶
Eckfall repariert, bei dem der Mapper den internen Zustand nicht vollständig aktualisierte, wenn eine Beziehung zu einem neuen Mapper eine Backref zum ersten Mapper herstellte.
[orm] ¶
Behob einen Fehler, bei dem die erneute Definition von __eq__() dazu führte, dass ein many-to-one Lazyload für eine Beziehung __eq__() aufrief und fehlschlug. Gilt nicht für 0.6.9.
Referenzen: #2260
[orm] ¶
Der Aufruf von class_mapper() und die Übergabe eines Objekts, das keine "Art" ist (d.h. eine Klasse, die potenziell zugeordnet werden könnte), löst nun einen informativen ArgumentError aus, anstelle von UnmappedClassError.
Referenzen: #2196
[orm] ¶
Neuer Event-Hook, MapperEvents.after_configured(). Wird nach Abschluss eines configure()-Schritts aufgerufen und wenn Mapper tatsächlich betroffen waren. Theoretisch wird dieses Ereignis einmal pro Anwendung aufgerufen, es sei denn, neue Zuordnungen werden konstruiert, nachdem bestehende bereits verwendet wurden.
[orm] ¶
Wenn eine offene Session garbage collected wird, werden die darin verbliebenen Objekte beim Hinzufügen zu einer neuen Session wieder als "detached" betrachtet. Dies wird durch eine zusätzliche Prüfung erreicht, dass der vorherige "session_key" nicht tatsächlich unter den Session-Pools vorhanden ist.
Referenzen: #2281
[orm] ¶
Neue deklarative Funktionen
__declare_last__() Methode, etabliert einen Event-Listener für die Klassenmethode, der aufgerufen wird, wenn die Mapper mit dem finalen "configure"-Schritt abgeschlossen sind.
__abstract__ Flag. Die Klasse wird überhaupt nicht abgebildet, wenn dieses Flag auf der Klasse vorhanden ist.
Neue Hilfsklassen ConcreteBase, AbstractConcreteBase. Ermöglichen konkrete Abbildungen unter Verwendung von Deklarativen, die automatisch die „polymorphic_union“ einrichten, wenn der Mapper-Schritt „configure“ aufgerufen wird.
Der Mapper selbst hat semi-private Methoden, die es ermöglichen, dass das wählbares „with_polymorphic“ nach der Konfiguration dem Mapper zugewiesen wird.
Referenzen: #2239
[orm] ¶
Deklarative gibt eine Warnung aus, wenn die Basis einer Unterklasse @declared_attr für eine reguläre Spalte verwendet – dieses Attribut wird nicht an Unterklassen weitergegeben.
Referenzen: #2283
[orm] ¶
Die Integer-„id“, die verwendet wird, um eine zugeordnete Instanz mit ihrer besitzenden Sitzung zu verknüpfen, wird nun durch eine Sequenzgenerierungsfunktion anstelle von id(Session) generiert, um die Möglichkeit von wiederverwendeten id()-Werten zu eliminieren, die zu falschen Ergebnissen führen könnten. Eine Überprüfung, ob das Objekt tatsächlich in der Sitzung ist, ist nicht mehr erforderlich.
Referenzen: #2280
[orm] ¶
Verhaltensverbesserung: Leere Konjunktionen wie and_() und or_() werden im Kontext einer umschließenden Konjunktion abgeflacht, d.h. and_(x, or_()) ergibt „X“ und nicht „X AND ()“.
Referenzen: #2257
[orm] ¶
Fehler behoben bezüglich der Berechnung der „from“-Liste für ein select()-Element. Die „from“-Berechnung wird nun verzögert, so dass, wenn das Konstrukt ein Column-Objekt verwendet, das noch keiner Tabelle zugeordnet ist, aber später einer Tabelle zugeordnet wird, es SQL unter Verwendung der Tabelle als FROM generiert. Diese Änderung wirkte sich tief auf die Mechanik der Berechnung der FROM-Liste sowie der „correlates“-Sammlung aus, da einige „clause adaption“-Schemata (diese werden im ORM sehr stark verwendet) darauf beruhten, dass die „froms“-Sammlung typischerweise vor Abschluss der Adaption zwischengespeichert wurde. Die Überarbeitung ermöglicht es, dass die „froms“-Sammlung jederzeit gelöscht und neu generiert werden kann.
Referenzen: #2261
[orm] ¶
Fehler behoben, bei dem die Methode with_only_columns() von Select fehlschlagen würde, wenn ein auswählbares Objekt übergeben wurde. Ebenfalls in 0.6.9.
Referenzen: #2270
Beispiele¶
engine¶
[engine] ¶
Die Methode recreate() in allen Pool-Klassen verwendet self.__class__, um auf den Typ des zu erzeugenden Pools zuzugreifen, falls Unterklassen gebildet werden. Beachten Sie, dass es normalerweise nicht notwendig ist, Pools zu unterklassifizieren.
Referenzen: #2254
[engine] ¶
Verbesserung der Protokollierung von Anweisungen mit mehreren Parametern: Lange Listen von gebundenen Parametersätzen werden mit einem informativen Indikator für die Komprimierung zusammengefasst. Fehlermeldungen verwenden die gleiche verbesserte Formatierung.
Referenzen: #2243
[engine] ¶
Optionales Argument „sa_pool_key“ zu pool.manage(dbapi).connect() hinzugefügt, damit die Serialisierung von Argumenten nicht notwendig ist.
[engine] ¶
Der von create_engine() unterstützte Einstiegspunkt-Auflösungsmechanismus unterstützt nun die Auflösung einzelner DBAPI-Treiber zusätzlich zu einem integrierten oder durch Einstiegspunkte aufgelösten Dialekt, unter Verwendung der Standardnotation „+“. Diese wird vor der Auflösung als Einstiegspunkt in einen „.“ umgewandelt.
Referenzen: #2286
[engine] ¶
Ausnahmebehandlung und Warnung für den Schritt „return unicode detection“ beim Verbinden hinzugefügt. Dies ermöglicht es Datenbanken, die bei NVARCHAR abstürzen, die Initialisierung fortzusetzen, vorausgesetzt, es ist kein NVARCHAR-Typ implementiert.
Referenzen: #2299
schema¶
[schema] ¶
Column.copy() wurde geändert, um _constructor() zu verwenden, das standardmäßig self.__class__ verwendet, um das neue Objekt zu erstellen. Dies erleichtert die Unterstützung der Unterklassifizierung von Column.
Referenzen: #2284
[schema] ¶
Ein etwas schöneres __repr__() für SchemaItem-Klassen hinzugefügt. Beachten Sie, dass repr hier die Idee „repr ist der Konstruktor“ nicht vollständig unterstützen kann, da Schema-Elemente sehr tief verschachtelt/zyklisch sein können und einige Dinge erst spät initialisiert werden.
Referenzen: #2223
postgresql¶
[postgresql] ¶
Argument „postgresql_using“ zu Index() hinzugefügt, generiert eine USING-Klausel zur Angabe der Indeximplementierung für PG. Vielen Dank an Ryan P. Kelly für den Patch.
Referenzen: #2290
[postgresql] ¶
Parameter client_encoding zu create_engine() hinzugefügt, wenn das postgresql+psycopg2-Dialekt verwendet wird; ruft die psycopg2 set_client_encoding()-Methode mit dem Wert beim Verbinden auf.
Referenzen: #1839
[postgresql] ¶
Fehler behoben, der die gleiche Verhalten von modifizierten Indizes in PG 9 betraf, auf die Primärschlüsselreflexion einer umbenannten Spalte. Ebenfalls in 0.6.9.
[postgresql] ¶
Reflexionsfunktionen für Table, Sequence sind nicht mehr case-insensitiv. Namen können sich nur in der Groß-/Kleinschreibung unterscheiden und werden korrekt unterschieden.
Referenzen: #2256
[postgresql] ¶
Verwendung eines atomaren Zählers als Quelle für „Zufallszahlen“ für serverseitige Cursor-Namen; in seltenen Fällen wurden Konflikte gemeldet.
[postgresql] ¶
Die Annahme wurde eingeschränkt, die bei der Reflexion einer referenzierten Tabelle mit Schema im aktuellen Suchpfad getroffen wurde; ein explizites Schema wird auf die referenzierte Tabelle nur angewendet, wenn es tatsächlich mit dem der referenzierenden Tabelle übereinstimmt, die ebenfalls ein explizites Schema hat. Zuvor wurde angenommen, dass das „aktuelle“ Schema gleichbedeutend mit dem gesamten search_path war.
Referenzen: #2249
mysql¶
[mysql] ¶
Ein CREATE TABLE wird die COLLATE-Option nach CHARSET setzen, was Teil der willkürlichen Regeln von MySQL zu sein scheint, ob es tatsächlich funktioniert oder nicht. Ebenfalls in 0.6.9.
Referenzen: #2225
[mysql] ¶
mysql_length-Parameter zum Index-Konstrukt hinzugefügt, gibt die „Länge“ für Indizes an.
Referenzen: #2293
sqlite¶
[sqlite] ¶
Es wurde sichergestellt, dass derselbe ValueError für ungültige aus der Datenbank analysierte Datums-/Zeit-/Datum-Zeit-Strings ausgelöst wird, unabhängig davon, ob C-Erweiterungen verwendet werden oder nicht.
mssql¶
[mssql] ¶
Änderungen zur Unterstützung von FreeTDS 0.91 mit Pyodbc. Dies beinhaltet, dass String-Binds als Python-Unicode-Objekte gesendet werden, wenn FreeTDS 0.91 erkannt wird, und ein CAST(? AS NVARCHAR) verwendet wird, wenn wir eine Tabelle erkennen. Ich würde das Verhalten von Pyodbc + FreeTDS 0.91 jedoch weiterhin als ziemlich schlecht bezeichnen; es gibt immer noch viele Abfragen, wie z.B. die bei der Reflexion verwendeten, die zu einem Core-Dump unter Linux führen, und es ist unter OSX nicht wirklich nutzbar, da es viele MemoryErrors und einfach nur kaputte Unicode-Unterstützung gibt.
Referenzen: #2273
[mssql] ¶
Das Verhalten von =/!= beim Vergleichen eines skalaren Select mit einem Wert erzeugt ab Version 0.8 keine IN/NOT IN mehr; dieses Verhalten ist etwas zu übertrieben (verwenden Sie
in_(), wenn Sie IN ausgeben möchten) und gibt nun eine Deprecation-Warnung aus. Um das Verhalten von 0.8 sofort zu erhalten und die Warnung zu entfernen, wird ein Compiler-Rezept unter https://sqlalchemy.de/docs/07/dialects/mssql.html#scalar-select-comparisons bereitgestellt, um das Verhalten von visit_binary() zu überschreiben.Referenzen: #2277
[mssql] ¶
„0“ wird als Argument für limit() akzeptiert, was „TOP 0“ erzeugt.
Referenzen: #2222
oracle¶
[oracle] ¶
ReturningResultProxy für das zxjdbc-Dialekt wurde behoben. Regression von 0.6.
Referenzen: #2272
[oracle] ¶
Der String-Typ generiert jetzt VARCHAR2 unter Oracle, was als Standard-VARCHAR empfohlen wird. Es wurden auch ein explizites VARCHAR2 und NVARCHAR2 zum Oracle-Dialekt hinzugefügt. Die Verwendung von NVARCHAR generiert weiterhin „NVARCHAR2“ – es gibt kein „NVARCHAR“ auf Oracle – dies bleibt eine leichte Bruch der Richtlinie „Großbuchstaben-Typen ergeben immer genau das“. VARCHAR generiert weiterhin „VARCHAR“ und hält sich an die Richtlinie. Falls Oracle jemals „VARCHAR“ als etwas anderes definieren würde, wie sie behaupten (meiner Meinung nach wird das nie passieren), wäre der Typ verfügbar.
Referenzen: #2252
misc¶
[types] ¶
Zusätzliche Schlüsselwortargumente für den Basis-Float-Typ über „precision“ und „asdecimal“ hinaus werden ignoriert; eine Deprecation-Warnung und zusätzliche Dokumentation wurden hier hinzugefügt, in Bezug auf
Referenzen: #2258
[ext] ¶
SQLSoup wird nicht in Version 0.8 von SQLAlchemy enthalten sein; obwohl nützlich, möchten wir SQLAlchemy selbst auf ein ORM-Nutzungsparadigma konzentrieren. SQLSoup wird hoffentlich bald durch ein Drittanbieterprojekt abgelöst.
Referenzen: #2262
[ext] ¶
local_attr, remote_attr, attr-Zugriffsmethoden zu AssociationProxy hinzugefügt, die schnellen Zugriff auf die proxierten Attribute auf Klassenebene ermöglichen.
Referenzen: #2236
[ext] ¶
Die Methode update() für das assoziationsproxy-dictionary wurde auf einen Duck-Typing-Ansatz geändert, d.h. sie prüft auf „keys“, um zwischen update({}) und update((a, b)) zu unterscheiden. Zuvor wurde ein Dictionary mit Tupeln als Schlüssel fälschlicherweise als Sequenz interpretiert.
Referenzen: #2275
0.7.2¶
Veröffentlicht: So 31. Jul 2011orm¶
[orm] ¶
Funktionserweiterung: Joined- und Subquery-Laden durchsuchen nun bereits vorhandene zugehörige Objekte und Sammlungen nach ungefüllten Attributen im Geltungsbereich des definierten Eager-Loads, sodass das durch Mappings oder Query-Optionen definierte Eager-Loading bedingungslos für die volle Tiefe erfolgt und alles auffüllt, was noch nicht aufgefüllt ist. Zuvor würde diese Traversierung stoppen, wenn ein zugehöriges Objekt oder eine Sammlung bereits vorhanden war, was zu inkonsistentem Verhalten führte (obwohl Ladevorgänge/Zyklen für ein bereits geladenes Diagramm gespart wurden). Für ein Subqueryload bedeutet dies, dass die von Subqueryload ausgegebenen zusätzlichen SELECT-Anweisungen bedingungslos aufgerufen werden, unabhängig davon, wie viel des vorhandenen Diagramms bereits vorhanden ist (daher die Kontroverse). Das vorherige Verhalten des „Stoppens“ gilt weiterhin, wenn eine Abfrage das Ergebnis eines attributinitiierten Lazy-Loads ist, da ansonsten eine Iteration von Sammlungen im „N+1“-Stil unnötig teuer werden kann, wenn dasselbe zugehörige Objekt wiederholt angetroffen wird. Es gibt auch eine noch nicht öffentliche generative Query-Methode _with_invoke_all_eagers(), die das alte/neue Verhalten wählt.
Referenzen: #2213
[orm] ¶
Eine Überarbeitung des „Ersatz-Traversals“ innerhalb des ORM, da es auswählbare Objekte gegen Aliase von Dingen (d.h. Klausel-Adaption) ändert, beinhaltet eine Korrektur für mehrfach verschachtelte any()/has()-Konstrukte gegen eine Joined-Table-Struktur.
Referenzen: #2195
[orm] ¶
Fehler behoben, bei dem query.join() + aliased=True von einer Joined-In-Struktur zu sich selbst auf relationship() mit Join-Bedingung auf der Kindtabelle die führende Entität unangemessen in die gejointe umwandelte. Ebenfalls in 0.6.9.
Referenzen: #2234
[orm] ¶
Regression von 0.6 behoben, bei der Session.add() auf ein Objekt mit None in einer Sammlung eine interne Ausnahme auslöste. Dies wurde auf das Verhalten von 0.6 zurückgesetzt, das None akzeptiert, aber offensichtlich nichts gespeichert wird. Idealerweise sollten Sammlungen mit None oder bei append() zumindest eine Warnung ausgeben, was für 0.8 in Erwägung gezogen wird.
Referenzen: #2205
[orm] ¶
Das Laden eines deferred()-Attributs für ein Objekt, dessen Zeile nicht gefunden werden kann, löst nun ObjectDeletedError aus, anstatt später fehlzuschlagen; die Nachricht in ObjectDeletedError wurde verbessert, um andere Bedingungen als eine einfache „delete“ einzuschließen.
Referenzen: #2191
[orm] ¶
Regression von 0.6 behoben, bei der eine Verlaufsabfrage für einige relationale Attribute fehlschlug, wenn ein Lazy-Load ausgelöst wurde; dies konnte unter bestimmten Bedingungen während eines Flush() ausgelöst werden. Dank an den Benutzer, der den großartigen Test dafür eingereicht hat.
Referenzen: #2224
[orm] ¶
Fehler behoben, der nur in Python 3 auftrat, bei dem die Sortierung von persistenten + pending Objekten während eines Flush zu einem illegalen Vergleich führte, wenn der Primärschlüssel des persistenten Objekts kein einzelner Integer war. Ebenfalls in 0.6.9.
Referenzen: #2228
[orm] ¶
Fehler behoben, bei dem die Quellklausel, die von query.join() verwendet wurde, inkonsistent war, wenn sie gegen einen Spaltenausdruck gerichtet war, der mehrere Entitäten zusammenfasste. Ebenfalls in 0.6.9.
Referenzen: #2197
[orm] ¶
Fehler behoben, bei dem, wenn eine abgebildete Klasse __hash__() oder __eq__() auf etwas Nichtstandardmäßiges neu definierte, was ein unterstützter Anwendungsfall ist, da SQLA diese nie abfragen sollte, die Methoden abgefragt würden, wenn die Klasse Teil eines „zusammengesetzten“ (d.h. nicht einzelnes Entitäts-) Ergebnissets wäre. Ebenfalls in 0.6.9.
Referenzen: #2215
[orm] ¶
Öffentliches Attribut „.validators“ zum Mapper hinzugefügt, eine unveränderliche Dictionary-Ansicht aller Attribute, die mit dem @validates-Decorator dekoriert wurden. Dank an Stefano Fontanelli.
Referenzen: #2240
[orm] ¶
Fehler behoben, der SQL zum Absturz brachte, wenn: column_property() auf Subquery + joinedload + LIMIT + order by der column_property() auftrat. Ebenfalls in 0.6.9.
Referenzen: #2188
[orm] ¶
Die von with_parent generierte Join-Bedingung und die Verwendung einer „dynamischen“ Beziehung zu einem Parent erzeugen eindeutige Bindungsparameter anstelle der fälschlichen Wiederholung derselben Bindungsparameter. Ebenfalls in 0.6.9.
Referenzen: #2207
[orm] ¶
Dieselbe Prüfung „nur Spalten“ wurde zu mapper.polymorphic_on hinzugefügt, die beim Empfang von Benutzerargumenten für relationship.order_by, foreign_keys, remote_side usw. verwendet wird.
[orm] ¶
Fehler behoben, bei dem der Vergleich eines Spaltenausdrucks mit einer Query() nicht as_scalar() auf der zugrunde liegenden SELECT-Anweisung aufrufen würde, um eine skalare Unterabfrage zu erzeugen, wie es geschieht, wenn man sie auf Query().subquery() aufruft.
Referenzen: #2190
[orm] ¶
Deklarativer Fehler behoben, bei dem eine Klasse, die von einer Oberklasse mit demselben Namen erbt, aufgrund einer unnötigen Suche nach dem Namen in der _decl_class_registry fehlschlagen würde.
Referenzen: #2194
[orm] ¶
Die Assertion „no statement condition“ in Query wurde repariert, die versucht hätte, auszulösen, wenn eine generative Methode nach from_statement() aufgerufen wurde. Ebenfalls in 0.6.9.
Referenzen: #2199
examples¶
[examples] ¶
Der Beispiel-Versionsprüfer wurde repariert, um nicht auf SQLAlchemy-Testbibliotheken zu setzen; nosetests müssen innerhalb von examples/versioning ausgeführt werden, um zu verhindern, dass setup.cfg ihn kaputt macht.
[examples] ¶
Anpassung von examples/versioning, um den korrekten Fremdschlüssel in einer mehrstufigen Vererbungssituation auszuwählen.
[examples] ¶
Der Attribut-Shard-Beispiel wurde korrigiert, um den Bindungsseveral-Aufruf korrekt im 0.7-Stil zu überprüfen.
engine¶
[engine] ¶
Der vom Connection.begin() bereitgestellte Context Manager gibt rollback() aus, wenn commit() fehlschlägt, nicht nur, wenn eine Ausnahme auftritt.
[engine] ¶
Verwendung von urllib.parse_qsl() ab Python 2.6, keine Deprecation-Warnung über cgi.parse_qsl().
Referenzen: #1682
[engine] ¶
Mixin-Klasse sqlalchemy.ext.DontWrapMixin hinzugefügt. Vom Benutzer definierte Ausnahmen dieses Typs werden niemals in StatementException eingeschlossen, wenn sie im Kontext einer Anweisungsausführung auftreten.
[engine] ¶
Die Einbettung von StatementException zeigt die ursprüngliche Ausnahmeklasse in der Nachricht an.
[engine] ¶
Verbindungsfehler, die dbapi.Error auslösen, leiten den Fehler an dialect.is_disconnect() weiter und setzen das Flag „connection_invalidated“, wenn der Dialekt weiß, dass dies eine potenziell „wiederholbare“ Bedingung ist. Bisher nur Oracle ORA-01033 implementiert.
Referenzen: #2201
sql¶
schema¶
[schema] ¶
Neues Feature: with_variant() Methode auf allen Typen. Erzeugt eine Instanz von Variant(), einem speziellen TypeDecorator, der die Verwendung eines anderen Typs basierend auf dem verwendeten Dialekt auswählt.
Referenzen: #2187
[schema] ¶
Eine aussagekräftige Fehlermeldung hinzugefügt, wenn ForeignKeyConstraint auf einen Spaltennamen im Elternteil verweist, der nicht gefunden wird. Ebenfalls in 0.6.9.
[schema] ¶
Fehler behoben, bei dem die Anpassung der alten Funktion append_ddl_listener() unerwartete **kw an das Table-Ereignis weitergab. Table erhält keine kws, das MetaData-Ereignis in 0.6 erhielt „tables=somecollection“, dieses Verhalten bleibt erhalten.
Referenzen: #2206
[schema] ¶
Fehler behoben, bei dem die „autoincrement“-Erkennung für Table fehlschlug, wenn der Typ keinen „affinity“-Wert hatte. Dies trat insbesondere bei der Verwendung des UUID-Beispiels auf der Website auf, das TypeEngine als „impl“ verwendet.
[schema] ¶
Ein verbessertes repr() für TypeEngine-Objekte hinzugefügt, das nur Konstruktorargumente anzeigt, die positional oder kwargs sind, die vom Standard abweichen.
Referenzen: #2209
postgresql¶
mysql¶
sqlite¶
mssql¶
[mssql] ¶
Der pyodbc-Dialekt wurde angepasst, sodass gebundene Werte als Bytes und nicht als Unicode übergeben werden, wenn die „Easysoft“-Unix-Treiber erkannt werden. Dies ist dasselbe Verhalten wie bei FreeTDS. Easysoft stürzt offenbar ab, wenn unter bestimmten Umständen Python-Unicodes übergeben werden.
oracle¶
[oracle] ¶
ORA-00028 wurde zu den Disconnect-Codes hinzugefügt, verwenden Sie cx_oracle _Error.code, um auf den Code zuzugreifen. Ebenfalls in 0.6.9.
Referenzen: #2200
[oracle] ¶
ORA-01033 wurde zu den Disconnect-Codes hinzugefügt, die während eines Verbindungsereignisses abgefangen werden können.
Referenzen: #2201
[oracle] ¶
Der Oracle-RAW-Typ wurde repariert, der die falsche DDL generierte. Ebenfalls in 0.6.9.
Referenzen: #2220
[oracle] ¶
CURRENT wurde zur Liste der reservierten Wörter hinzugefügt. Ebenfalls in 0.6.9.
Referenzen: #2212
[oracle] ¶
Fehler in der erweiterbaren Funktion für mutable Typen behoben, bei der, wenn derselbe Typ zweimal in einem Mapping verwendet wurde, die Attribute über das erste hinaus nicht instrumentiert wurden.
[oracle] ¶
Fehler in der erweiterbaren Funktion für mutable Typen behoben, bei der ein Fehler ausgelöst wurde, wenn None oder ein nicht übereinstimmender Typ gesetzt wurde. None wird nun akzeptiert, was allen Attributen None zuweist; ungültige Werte lösen einen ValueError aus.
0.7.1¶
Veröffentlicht: So 05. Jun 2011general¶
orm¶
[orm] ¶
”delete-orphan” Cascade ist jetzt auf selbst-referenzielle Beziehungen erlaubt – seit SQLA 0.7 wird „Elternteil ohne Kind“ auf ORM-Ebene nicht mehr erzwungen; diese Prüfung wird der Nullbarkeit von Fremdschlüsseln überlassen. Bezogen auf
Referenzen: #1912
[orm] ¶
Neue „mutable“-Erweiterung repariert, um Ereignisse korrekt an Unterklassen weiterzugeben; erstellt auch keine doppelten Ereignis-Listener für Unterklassen.
Referenzen: #2180
[orm] ¶
Der Text der Nachricht, die erscheint, wenn der „identity“-Schlüssel beim Flush nicht erkannt wird, wurde angepasst, um die häufige Ursache einzuschließen, dass die Spalte nicht korrekt für die Erkennung von Auto-Inkrement eingerichtet ist;. Ebenfalls in 0.6.8.
Referenzen: #2170
[orm] ¶
Fehler behoben, bei dem die auf Transaktionsebene „gelöschte“ Sammlung nicht von entfernten Zuständen geleert wurde, was zu einem Fehler führte, wenn sie später transient wurden. Ebenfalls in 0.6.8.
Referenzen: #2182
engine¶
[engine] ¶
Schema-/SQL-orientierte Methoden auf Connection/Engine, die nie gut bekannt waren und redundant sind, sind veraltet: reflecttable(), create(), drop(), text(), engine.func
[engine] ¶
Die __contains__() Methode einer RowProxy-Ergebniszeile wurde angepasst, sodass intern keine Ausnahme ausgelöst wird; NoSuchColumnError() erzeugt ebenfalls seine Nachricht, unabhängig davon, ob die Spaltenkonstruktion in einen String umgewandelt werden kann oder nicht. Ebenfalls in 0.6.8.
Referenzen: #2178
sql¶
[sql] ¶
Fehler behoben, bei dem metadata.reflect(bind) eine als Bindungsargument übergebene Verbindung schloss. Regression aus 0.6.
[sql] ¶
Der Prozess, mit dem ein Select bestimmt, was sich in seiner `.c`-Sammlung befindet, wurde gestrafft. Das Verhalten ist identisch, außer dass eine rohe ClauseList(), die an select([]) übergeben wird (was ohnehin kein dokumentierter Fall ist), nun in ihre einzelnen Spaltenelemente expandiert wird, anstatt ignoriert zu werden.
postgresql¶
[postgresql] ¶
Einige Unit-Test-Korrekturen bezüglich numerischer Arrays, MATCH-Operator. Ein potenzielles Problem mit Ungenauigkeit von Fließkommazahlen wurde behoben, und bestimmte Tests des MATCH-Operators werden vorerst nur innerhalb einer EN-orientierten Locale ausgeführt. Ebenfalls in 0.6.8.
Referenzen: #2175
mysql¶
[mysql] ¶
Unit-Tests laufen 100% auf MySQL, das unter Windows installiert ist.
[mysql] ¶
Der Schritt „Groß-/Kleinschreibung anpassen“, der beim Spiegeln einer Tabelle unter MySQL unter Windows mit gemischter Groß-/Kleinschreibung fehlschlug, wurde entfernt. Nach einigen Experimenten mit einem Windows-MySQL-Server wurde festgestellt, dass dieser Schritt die Situation nicht wirklich viel verbesserte; MySQL gibt FK-Namen auf Nicht-Windows-Plattformen ebenfalls nicht mit korrekter Groß-/Kleinschreibung zurück, und das Entfernen des Schritts ermöglicht zumindest, dass die Spiegelung besser funktioniert als auf anderen Betriebssystemen. Eine Warnung wurde hier in Betracht gezogen, aber es ist schwierig zu bestimmen, unter welchen Bedingungen eine solche Warnung ausgelöst werden kann, daher wurde sie vorerst zurückgestellt – stattdessen wurden einige Dokumentationen hinzugefügt.
Referenzen: #2181
[mysql] ¶
supports_sane_rowcount wird auf False gesetzt, wenn MySQLdb verwendet wird und die DBAPI die Konstanten des CLIENT-Moduls nicht bereitstellt.
sqlite¶
[sqlite] ¶
Akzeptiert None von cursor.fetchone(), wenn „PRAGMA read_uncommitted“ aufgerufen wird, um den aktuellen Isolationsmodus zur Verbindungszeit zu ermitteln und standardmäßig auf SERIALIZABLE zu setzen; dies zur Unterstützung von SQLite-Versionen vor 3.3.0, die diese Funktion nicht hatten.
Referenzen: #2173
0.7.0¶
Veröffentlicht: Fr 20. Mai 2011orm¶
[orm] ¶
Behob eine Regression, die in 0.7b4 eingeführt wurde (!), bei der query.options(someoption(“nonexistent name”)) keinen Fehler auslöste. Zusätzliche Fehlerbehandlung wurde hinzugefügt für Fälle, in denen die Option versuchte, auf ein spaltenbasiertes Element aufzubauen, und einige der angepassten Fehlermeldungen wurden weiter korrigiert.
Referenzen: #2069
[orm] ¶
query.count() gibt „count(*)“ statt „count(1)“ aus.
Referenzen: #2162
[orm] ¶
Feinabstimmung der Query-Klauselanpassung bei from_self(), union() oder anderen „select from myself“-Operationen, sodass reine SQL-Ausdruckselemente, die zu filter(), order_by() usw. hinzugefügt werden und die in der verschachtelten „from myself“-Abfrage vorhanden sind, *auf die gleiche Weise* wie ein ORM-Ausdruckselement angepasst werden, da diese Elemente sonst schwer zugänglich sind.
Referenzen: #2155
[orm] ¶
Fehler behoben, bei dem die Bestimmung der „selbst-referenziellen“ Beziehung bei Joined-inh-Unterklassen, die sich auf sich selbst beziehen, oder bei Joined-inh-Unterklassen, die sich auf eine Unterklasse davon beziehen, ohne Spalten in der Unter-Unterklasse in der Join-Bedingung, fehlschlug, und es keine Umgehungslösung gab. Ebenfalls in 0.6.8.
Referenzen: #2149
[orm] ¶
mapper() ignoriert nicht konfigurierte Fremdschlüssel zu nicht verbundenen Tabellen bei der Bestimmung der Vererbungsbedingung zwischen Eltern- und Kindklasse, löst aber wie gewohnt Fehler für nicht aufgelöste Spalten und Tabellennamen bezüglich der geerbten Tabelle aus. Dies ist eine erweiterte Verallgemeinerung eines Verhaltens, das bereits zuvor für Deklarative angewendet wurde. 0.6.8 hat eine konservativere Version davon, die die Art und Weise, wie Join-Bedingungen bestimmt werden, nicht grundlegend verändert.
Referenzen: #2153
[orm] ¶
Es ist ein Fehler, query.get() aufzurufen, wenn die angegebene Entität keine einzelne, vollständige Klassenentität oder Mapper ist (d. h. eine Spalte). Dies ist eine Deprecationswarnung in 0.6.8.
Referenzen: #2144
[orm] ¶
Ein potenzieller KeyError, der unter bestimmten Umständen mit der Identitätszuordnung auftreten konnte, behoben, Teil von
Referenzen: #2148
[orm] ¶
Neue Methode Query.with_session() hinzugefügt, schaltet Query um, um eine andere Sitzung zu verwenden.
[orm] ¶
Horizontale Shard-Abfragen sollten Ausführungsoptionen pro Verbindung verwenden, gemäß
Referenzen: #2131
[orm] ¶
Ein Nicht-Primär-Mapper erbt die _identity_class des Primär-Mappers. Dies, damit ein Nicht-Primär-Mapper, der gegen eine Klasse eingerichtet ist, die normalerweise in einer Vererbungszuordnung steht, Ergebnisse liefert, die mit der Identitätszuordnung des Primär-Mappers kompatibel sind (ebenfalls in 0.6.8)
Referenzen: #2151
[orm] ¶
Die Fehlermeldung für „syncrule kann nicht für Zielspalte ‚q‘ ausgeführt werden; Mapper ‚X‘ bildet diese Spalte nicht ab“ wurde korrigiert, um den korrekten Mapper zu referenzieren. Ebenfalls in 0.6.8.
Referenzen: #2163
[orm] ¶
polymorphic_union() erhält eine Option „cast_nulls“, die die Verwendung von CAST deaktiviert, wenn die bezeichneten NULL-Spalten gerendert werden.
Referenzen: #1502
[orm] ¶
polymorphic_union() rendert die Spalten in ihrer ursprünglichen Tabellenreihenfolge, wie sie in der ersten Tabelle/auswählbaren Elemente in der Liste der polymorphen Vereinigungen, in denen sie erscheinen, vorkommen. (was selbst eine unsortierte Zuordnung ist, es sei denn, Sie übergeben eine OrderedDict).
[orm] ¶
Fehler behoben, bei dem ein Mapper, der auf einen anonymen Alias abgebildet war, bei Verwendung von Logging fehlschlug, aufgrund eines nicht maskierten %-Zeichens im Alias-Namen. Ebenfalls in 0.6.8.
Referenzen: #2171
examples¶
[examples] ¶
Die alten Beispiele für „polymorphe Assoziation“ wurden entfernt und durch aktualisierte Beispiele ersetzt, die deklarative Mixins und „generische Assoziationen“ verwenden. Jede präsentiert ein alternatives Tabellenlayout.
sql¶
[sql] ¶
Fehler behoben, bei dem die Verschachtelung eines Labels von einem select()-Objekt mit einem anderen Label darin zu falsch exportierten Spalten führte. Dies brach unter anderem eine ORM-column_property()-Zuordnung gegen eine andere column_property(). Ebenfalls in 0.6.8.
Referenzen: #2167
[sql] ¶
Die Handhabung bei der Bestimmung von Join-Bedingungen wurde geändert, sodass Fremdschlüsselfehler nur zwischen den beiden gegebenen Tabellen berücksichtigt werden. Das heißt, t1.join(t2) meldet FK-Fehler, die ‚t1‘ oder ‚t2‘ betreffen, aber alles, was ‚t3‘ betrifft, wird übersprungen. Dies betrifft join(), sowie ORM-Beziehungs- und Vererbungsbedingungslogik.
[sql] ¶
Einige Verbesserungen bei der Fehlerbehandlung innerhalb des Ausführungsverfahrens, um sicherzustellen, dass automatisch geschlossene Verbindungen wirklich geschlossen werden, wenn sehr ungewöhnliche DBAPI-Fehler auftreten.
[sql] ¶
metadata.reflect() und reflection.Inspector() hatten eine gewisse Abhängigkeit vom GC, um intern beschaffte Verbindungen zu schließen; dies wurde behoben.
[sql] ¶
Explizite Prüfung hinzugefügt für den Fall, dass Column .name als leerer String zugewiesen wird.
Referenzen: #2140
[sql] ¶
Fehler behoben, bei dem FetchedValue, wenn es an column server_onupdate übergeben wurde, nicht seinen übergeordneten „column“ zugewiesen bekam; Testabdeckung für alle Spalten-Standardzuweisungsmuster hinzugefügt. Ebenfalls in 0.6.8.
Referenzen: #2147
postgresql¶
mssql¶
misc¶
[no_tags] ¶
Dieser Abschnitt dokumentiert die Änderungen von 0.7b4 bis 0.7.0. Eine Übersicht über die Neuerungen in SQLAlchemy 0.7 finden Sie unter https://docs.sqlalchemy.de/en/latest/changelog/migration_07.html
[documentation] ¶
Die Verwendung von „collections.MutableMapping“ ABC aus der Dokumentation zu ext.mutable wurde entfernt, da sie falsch verwendet wurde und das Beispiel ohnehin schwerer verständlich machte.
Referenzen: #2152
[ext] ¶
Fehler in der Erweiterung sqlalchemy.ext.mutable behoben, bei denen None nicht angemessen behandelt wurde und Ersetzungsereignisse nicht angemessen behandelt wurden.
Referenzen: #2143
0.7.0b4¶
Veröffentlicht: So 17. Apr 2011general¶
[general] ¶
Änderungen am Format von CHANGES, dieser Datei. Die Formatänderungen wurden auf die 0.7er-Releases angewendet.
[general] ¶
Die „-declarative“-Änderungen werden nun direkt unter dem „-orm“-Abschnitt aufgeführt, da sie eng verwandt sind.
[general] ¶
Die Änderungen der 0.5er-Serie wurden in die Datei CHANGES_PRE_06 verschoben, die CHANGES_PRE_05 ersetzt.
[general] ¶
Das Changelog für 0.6.7 und folgende innerhalb der 0.6er-Serie wird nun nur noch in der CHANGES-Datei im 0.6er-Zweig aufgeführt. In der 0.7er CHANGES-Datei (d. h. dieser Datei) werden alle 0.6er-Änderungen inline im 0.7er-Abschnitt aufgeführt, in dem sie auch angewendet wurden (da alle 0.6er-Änderungen auch in 0.7 enthalten sind). Änderungen, die hier auf eine 0.6er-Version zutreffen, werden ebenso wie etwaige Unterschiede in Implementierung/Verhalten vermerkt.
orm¶
[orm] ¶
Einige Korrekturen bei der Auswertung von „evaluate“ und „fetch“, wenn query.update() und query.delete() aufgerufen werden. Der Abruf von Datensätzen erfolgt in allen Fällen nach dem autoflush und vor der Ausgabe von update/delete, wodurch vorhandene, nicht geflashte Daten sowie abgelaufene Objekte, die während der Auswertung fehlschlagen, geschützt werden.
Referenzen: #2122
[orm] ¶
Die Ausnahme, die ausgelöst wird, wenn ein Flush einer Unterklasse versucht wird, die nicht polymorph gegenüber dem Obertyp ist, wurde umformuliert.
Referenzen: #2063
[orm] ¶
Noch mehr Wortänderungen, wenn eine Query-Option die Zielentität nicht finden kann. Erklärt, dass der Pfad von einer der Root-Entitäten stammen muss.
[orm] ¶
Einige Korrekturen an der Zustandsbehandlung bezüglich Backrefs, typischerweise bei autoflush=False, wo die zurückreferenzierte Sammlung Add/Remove mit keiner Nettobeziehung nicht korrekt verarbeitete. Dank an Richard Murri für den Testfall + Patch. (Auch in 0.6.7).
Referenzen: #2123
[orm] ¶
Prüfungen innerhalb der UOW hinzugefügt, um die ungewöhnliche Bedingung zu erkennen, dass UPDATE oder DELETE auf einen Primärschlüsselwert angewendet werden soll, der NULL enthält.
Referenzen: #2127
[orm] ¶
Einige Verfeinerungen der Attributshistorie. Weitere Änderungen sind möglicherweise in 0.8 geplant, aber vorerst wurde die Historie so modifiziert, dass die skalare Historie keine „Nebenwirkung“ hat, indem sie None für einen nicht vorhandenen Wert auffüllt. Dies ermöglicht eine etwas bessere Unterscheidung zwischen einem gesetzten None und keiner tatsächlichen Änderung, was sich auch auswirkt.
Referenzen: #2127
[orm] ¶
Eine „having“-Klausel wurde von der inneren zur äußeren Abfrage kopiert, wenn from_self() verwendet wurde; insbesondere brach dies eine count()-Abfrage im 0.7-Stil. (Auch in 0.6.7).
Referenzen: #2130
[orm] ¶
Die Methode Query.execution_options() übergibt diese Optionen nun an die Connection und nicht an die SELECT-Anweisung, sodass alle verfügbaren Optionen einschließlich Isolationsstufe und kompiliertem Cache verwendet werden können.
Referenzen: #2131
engine¶
sql¶
[sql] ¶
Die Ausführungsoption „compiled_cache“ löst jetzt einen Fehler aus, wenn sie an eine SELECT-Anweisung und nicht an eine Connection übergeben wird. Zuvor wurde sie komplett ignoriert. Möglicherweise werden wir uns damit befassen, diese Option zu einem späteren Zeitpunkt pro Anweisung funktionieren zu lassen.
Referenzen: #2131
[sql] ¶
Der „catchall“-Konstruktor auf der Basisklasse TypeEngine wurde mit einer Deprecationswarnung wiederhergestellt. Dies, damit Code, der etwas wie Integer(11) tut, weiterhin funktioniert.
[sql] ¶
Fehler behoben, bei dem MetaData(), das nach dem Entpickeln zurückkam, keine neuen Elemente mehr verfolgte, die es jetzt verfolgt, z. B. Sammlungen von Sequence-Objekten, Listen von Schemanamen.
Referenzen: #2104
[sql] ¶
Die Schlüssel limit/offset für select() sowie der Wert, der an select.limit()/offset() übergeben wird, werden in Integer umgewandelt. (Auch in 0.6.7).
Referenzen: #2116
[sql] ¶
Fehler behoben, bei dem die „from“-Klauselsammlung aus einer over()-Klausel ein itertools.chain() und keine Liste war, was zu einem TypeError „can only concatenate list“ führte, wenn sie mit anderen Klauseln kombiniert wurde.
[sql] ¶
Falsche Verwendung eines „,“ in der over()-Klausel, die zwischen den „partition“- und „order by“-Klauseln platziert wurde, behoben.
Referenzen: #2134
[sql] ¶
Vor-/Nachereignisse für PrimaryKeyConstraint funktionieren jetzt, Tests für Vor-/Nachereignisse für alle Constraint-Typen hinzugefügt.
Referenzen: #2105
[sql] ¶
Explizite true()/false()-Konstrukte zur Ausdrucksbibliothek hinzugefügt – Konvertierungsregeln fangen „False“/„True“ in diese Konstrukte um. In 0.6 wurden die Konstrukte typischerweise direkt in Strings umgewandelt, was in 0.7 nicht mehr akzeptiert wurde.
Referenzen: #2117
schema¶
[schema] ¶
Das Flag „useexisting“ bei Table wurde durch ein neues Paar von Flags „keep_existing“ und „extend_existing“ ersetzt. „extend_existing“ ist äquivalent zu „useexisting“ – die vorhandene Tabelle wird zurückgegeben und zusätzliche Konstruktionselemente werden hinzugefügt. Bei „keep_existing“ wird die vorhandene Tabelle zurückgegeben, aber zusätzliche Konstruktionselemente werden nicht hinzugefügt – diese Elemente werden nur angewendet, wenn die Tabelle neu erstellt wird.
Referenzen: #2109
postgresql¶
sqlite¶
oracle¶
[oracle] ¶
Die Verwendung von Spaltennamen, die Anführungszeichen erfordern würden, entweder für die Spalte selbst oder für einen namensgenerierten Bindungsparameter, wie z. B. Namen mit Sonderzeichen, Unterstrichen, Nicht-ASCII-Zeichen, übersetzt nun korrekt Bindungsparameterschlüssel bei der Kommunikation mit cx_oracle. (Auch in 0.6.7).
Referenzen: #2100
[oracle] ¶
Der Oracle-Dialekt fügt das create_engine()-Flag use_binds_for_limits=False hinzu, rendert die LIMIT/OFFSET-Werte inline anstatt als Bindungen, was Berichten zufolge den von Oracle verwendeten Ausführungsplan modifiziert. (Auch in 0.6.7).
Referenzen: #2116
misc¶
[types] ¶
REAL wurde zu den Kern-Typen hinzugefügt. Unterstützt von PostgreSQL, SQL Server, MySQL, SQLite. Beachten Sie, dass die SQL Server- und MySQL-Versionen, die zusätzliche Argumente hinzufügen, weiterhin auch von diesen Dialekten verfügbar sind.
Referenzen: #2081
[types] ¶
Der Dekorator @event.listens_for() wurde hinzugefügt; unter Angabe von Ziel und Ereignisnamen wird die dekorierte Funktion als Listener angewendet.
Referenzen: #2106
[pool] ¶
AssertionPool speichert nun den Traceback, der anzeigt, wo die aktuell ausgecheckte Verbindung erworben wurde; dieser Traceback wird innerhalb der Assertion gemeldet, die bei einem zweiten gleichzeitigen Checkout ausgelöst wird; courtesy Gunnlaugur Briem
Referenzen: #2103
[pool] ¶
Die Funktion „pool.manage“ verwendet kein Pickle mehr, um die Argumente für jeden Pool zu hashen.
[documentation] ¶
SQLite DATE/TIME/DATETIME-Typen dokumentiert. (Auch in 0.6.7).
Referenzen: #2029
[documentation] ¶
Docs zur mutablen Erweiterung korrigiert, um die richtigen Typ-Assoziationsmethoden anzuzeigen.
Referenzen: #2118
0.7.0b3¶
Veröffentlicht: So 20. Mär 2011general¶
[general] ¶
Viele Korrekturen an Unit-Tests unter PyPy (courtesy Alex Gaynor).
orm¶
[orm] ¶
Der zugrunde liegende Ansatz für query.count() wurde geändert. query.count() ist jetzt in allen Fällen genau
- query.
from_self(func.count(literal_column(‘1’))). scalar()
Das heißt, „select count(1) from (<vollständige Abfrage>)“. Dies erzeugt in allen Fällen eine Unterabfrage, vereinfacht aber die bisherigen Zählversuche erheblich, die in vielen Szenarien, insbesondere bei der verknüpften Tabellenvererbung und anderen Joins, immer noch fehlschlugen. Wenn die für eine ansonsten sehr einfache Zählung erzeugte Unterabfrage wirklich ein Problem darstellt, verwenden Sie query(func.count()) als Optimierung.
Referenzen: #2093
[orm] ¶
Einige Änderungen an der Identitätszuordnung bezüglich seltener weakref-Callback-Funktionen während Iterationen. Der Mutex wurde entfernt, da er offenbar eine reentrant (d. h. in einem Thread) Deadlock verursachen kann, vielleicht wenn der GC Objekte zum Zeitpunkt der Iteration sammelt, um mehr Speicher zu gewinnen. Es ist zu hoffen, dass „Dictionary changed during iteration“ extrem selten sein wird, da Iterationsmethoden intern die vollständige Liste der Objekte in einem einzigen values()-Aufruf abrufen. Hinweis: 0.6.7 hat hier eine konservativere Korrektur, die den Mutex weiterhin beibehält.
Referenzen: #2087
[orm] ¶
Eine Anpassung der Unit of Work veranlasst sie, den Flush entlang von relationship()-Abhängigkeiten zu ordnen, auch wenn die gegebenen Objekte keine inter-Attribut-Referenzen im Speicher haben, was das Verhalten in 0.5 und früher war, sodass ein Flush von Parent/Child mit nur gesetztem Fremdschlüssel/Primärschlüssel erfolgreich ist. Dies unter Beibehaltung des Verhaltens von 0.6 und höher, keine Tonnen von nutzlosen internen Abhängigkeitsstrukturen innerhalb des Flushes zu generieren, die nicht dem Zustand entsprechen, der tatsächlich im aktuellen Flush vorhanden ist.
Referenzen: #2082
[orm] ¶
Verbesserungen an den Fehlermeldungen, die ausgegeben werden, wenn gegen reine Spaltenentitäten in Verbindung mit (typischerweise fälschlicherweise) verwendeten Loader-Optionen abgefragt wird, wo die Elternentität nicht vollständig vorhanden ist.
Referenzen: #2069
[orm] ¶
Fehler in query.options() behoben, bei dem ein Pfad, der auf einen lazyload mit String-Schlüsseln angewendet wurde, ein gleichnamiges Attribut auf der falschen Entität überlappen konnte. Hinweis: 0.6.7 hat hier eine konservativere Korrektur.
Referenzen: #2098
examples¶
[examples] ¶
Beispiele für Assoziationen und Assoziations-Proxys wurden aktualisiert, um Deklarative zu verwenden; ein neues Beispiel dict_of_sets_with_default.py wurde hinzugefügt, ein „pushing the envelope“-Beispiel für Assoziations-Proxy.
[examples] ¶
Das Beaker-Caching-Beispiel erlaubt ein „query_cls“-Argument für die Funktion query_callable(). (Auch in 0.6.7).
Referenzen: #2090
engine¶
sql¶
[sql] ¶
Eine vollständig beschreibende Fehlermeldung für den Fall hinzugefügt, dass Column unterklassifiziert wird und _make_proxy() aufgrund eines TypeError beim Konstruktor keine Kopie erstellen kann. Die Methode _constructor sollte in diesem Fall implementiert werden.
[sql] ¶
Neues Ereignis „column_reflect“ für Table-Objekte hinzugefügt. Empfängt die Info-Dictionary über eine Spalte, bevor das Objekt innerhalb der Spiegelung generiert wird, und ermöglicht die Änderung des Dictionarys zur Steuerung der meisten Aspekte der resultierenden Spalte, einschließlich Schlüssel, Name, Typ und Info-Dictionary.
Referenzen: #2095
[sql] ¶
Um zu helfen, dass das Ereignis „column_reflect“ mit bestimmten Tabellenobjekten und nicht mit allen Instanzen von Table verwendet wird, können Listener mit einem neuen Argument „listeners“, einer Liste von Tupeln der Form (<eventname>, <fn>), inline mit der Konstruktion eines Table-Objekts hinzugefügt werden, die vor Beginn des Reflexionsprozesses auf die Table angewendet werden.
[sql] ¶
Neue generische Funktion „next_value()“ hinzugefügt, die ein Sequenzobjekt als Argument akzeptiert und die entsprechende Zeichenfolge zur Generierung des „nächsten Werts“ auf der Zielplattform rendert, falls unterstützt. Bietet auch die Methode „.next_value()“ auf der Sequenz selbst.
Referenzen: #2085
[sql] ¶
func.next_value() oder andere SQL-Ausdrücke können direkt in ein insert()-Konstrukt eingebettet werden, und wenn implizites oder explizites „returning“ in Verbindung mit einer Primärschlüsselspalte verwendet wird, ist der neu generierte Wert in result.inserted_primary_key vorhanden.
Referenzen: #2084
[sql] ¶
Zugriffsmethoden für ResultProxy „returns_rows“, „is_insert“ (auch in 0.6.7) hinzugefügt
Referenzen: #2089
postgresql¶
mssql¶
[mssql] ¶
Die Abfrage zur Ermittlung der Definition einer Ansicht, typischerweise bei Verwendung der Inspector-Schnittstelle, wurde neu geschrieben, um sys.sql_modules anstelle des Information Schemas zu verwenden, wodurch Ansichtsdefinitionen mit mehr als 4000 Zeichen vollständig zurückgegeben werden können. (auch in 0.6.7)
Referenzen: #2071
misc¶
[declarative] ¶
Argumente in __mapper_args__, die nicht „hashable“ sind, werden nicht fälschlicherweise als immer-hashable, möglicherweise-Spalten-Argumente behandelt. (auch in 0.6.7)
Referenzen: #2091
[firebird] ¶
Das Flag „implicit_returning“ von create_engine() wird eingehalten, wenn es auf False gesetzt ist. (auch in 0.6.7)
Referenzen: #2083
[informix] ¶
RESERVED_WORDS für die Informix-Dialekt hinzugefügt. (auch in 0.6.7)
Referenzen: #2092
[ext] ¶
Die horizontal_shard ShardedSession-Klasse akzeptiert das gemeinsame Session-Argument „query_cls“ als Konstruktorargument, um eine weitere Unterklasse von ShardedQuery zu ermöglichen. (auch in 0.6.7)
Referenzen: #2090
0.7.0b2¶
Veröffentlicht: Sa 19. Februar 2011orm¶
[orm] ¶
Fehler behoben, bei dem Session.merge() das load()-Ereignis mit einem zu wenig Argument aufrief.
Referenzen: #2053
[orm] ¶
Logik hinzugefügt, die die Generierung von Ereignissen von MapperExtension oder SessionExtension verhindert, um leere Ereignisse für alle nicht überschriebenen Methoden zu generieren.
Referenzen: #2052
examples¶
[examples] ¶
Beaker-Beispiel berücksichtigt nun „limit“ und „offset“, Bindungsparameter in eingebetteten FROM-Klauseln (wie bei union() oder from_self()) bei der Generierung eines Cache-Schlüssels.
sql¶
[sql] ¶
Die Ereignisklasse EngineEvents wurde in ConnectionEvents umbenannt. Da diese Klassen niemals direkt vom Endbenutzercode aufgerufen werden, ist dies streng genommen eine Dokumentationsänderung für Endbenutzer. Außerdem wurde die Verknüpfung von Ereignissen mit Engines und Verbindungen intern vereinfacht.
Referenzen: #2059
[sql] ¶
Das Sequence()-Konstrukt, wenn ihm ein MetaData()-Objekt über sein ‚metadata‘-Argument übergeben wird, wird in CREATE/DROP-Anweisungen innerhalb von metadata.create_all() und metadata.drop_all() enthalten, einschließlich der „checkfirst“-Logik.
Referenzen: #2055
[sql] ¶
Die Methode Column.references() gibt nun True zurück, wenn sie einen Fremdschlüssel hat, der sich auf die angegebene Spalte bezieht und nicht nur auf ihre übergeordnete Tabelle.
Referenzen: #2064
postgresql¶
misc¶
[declarative] ¶
Regressionsfehler behoben, bei dem composite() mit inline platzierten Column-Objekten nicht initialisiert wurde. Die Column-Objekte können nun inline mit composite() oder extern sein und per Name oder Objektverweis abgerufen werden.
Referenzen: #2058
[declarative] ¶
Fehlermeldung, die sich auf den alten @classproperty-Namen bezog, wurde korrigiert, um @declared_attr zu referenzieren (auch in 0.6.7)
Referenzen: #2061
[declarative] ¶
Das Dictionary am Ende des __table_args__-Tupels ist jetzt optional.
Referenzen: #1468
[ext] ¶
Association proxy hat nun das korrekte Verhalten für any(), has() und contains(), wenn ein Many-to-One-Skalarattribut auf eine One-to-Many-Sammlung proxyt (d.h. das Gegenteil des „typischen“ Assocition-Proxy-Anwendungsfalls).
Referenzen: #2054
0.7.0b1¶
Veröffentlicht: Sa 12. Februar 2011general¶
[general] ¶
Neues Ereignissystem, ersetzt alle Erweiterungen, Listener usw.
Referenzen: #1902
[general] ¶
Protokollierungsverbesserungen
Referenzen: #1926
[general] ¶
Setup installiert kein Nose-Plugin mehr
Referenzen: #1949
[general] ¶
Der Alias „sqlalchemy.exceptions“ in sys.modules wurde entfernt. Basis-SQLA-Ausnahmen sind über „from sqlalchemy import exc“ verfügbar. Der Alias „exceptions“ für „exc“ verbleibt vorerst in „sqlalchemy“, er wird nur nicht in sys.modules eingepatcht.
orm¶
[orm] ¶
Prägnantere Form von query.join(target, onclause)
Referenzen: #1923
[orm] ¶
Hybrid-Attribute, implementiert/ersetzt synonym()
Referenzen: #1903
[orm] ¶
Neufassung von Composites
Referenzen: #2008
[orm] ¶
Mutation Event Extension, ersetzt „mutable=True“
[orm] ¶
PickleType und ARRAY-Mutabilität sind standardmäßig deaktiviert
Referenzen: #1980
[orm] ¶
Vereinfachte Zuweisung von polymorphic_on
Referenzen: #1895
[orm] ¶
Das Flushing von Waisenkindern, die keinen Elternteil haben, ist erlaubt
Referenzen: #1912
[orm] ¶
Der Flush-Buchhaltungsschritt wird bei autocommit=True vor dem Commit ausgeführt. Dies ermöglicht autocommit=True in Verbindung mit expire_on_commit=True und erlaubt Sitzungshooks nach dem Flush, im selben Transaktionskontext wie bei autocommit=False zu operieren.
Referenzen: #2041
[orm] ¶
Warnungen werden generiert, wenn Sammlungsmitglieder, skalare Referenten, die nicht Teil des Flush sind.
Referenzen: #1973
[orm] ¶
Nicht-Table-abgeleitete Konstrukte können abgebildet werden
Referenzen: #1876
[orm] ¶
Tuple-Labelnamen in Query verbessert
Referenzen: #1942
[orm] ¶
Abgebildete Spaltenattribute verweisen zuerst auf die spezifischste Spalte
Referenzen: #1892
[orm] ¶
Die Abbildung von Joins mit zwei oder mehr Spalten gleichen Namens erfordert eine explizite Deklaration
Referenzen: #1896
[orm] ¶
Mapper erfordert, dass die polymorphic_on-Spalte in der abgebildeten auswählbaren Einheit vorhanden ist
Referenzen: #1875
[orm] ¶
compile_mappers() wurde in configure_mappers() umbenannt, interne Konfiguration vereinfacht
Referenzen: #1966
[orm] ¶
Die Funktion aliased(), wenn ihr ein SQL FromClause-Element (d.h. keine abgebildete Klasse) übergeben wird, gibt element.alias() zurück, anstatt bei AliasedClass einen Fehler auszulösen.
Referenzen: #2018
[orm] ¶
Session.merge() prüft die Versions-ID des eingehenden Zustands gegen die der Datenbank, vorausgesetzt, die Abbildung verwendet Versions-IDs und der eingehende Zustand hat eine Version_id zugewiesen, und löst StaleDataError aus, wenn sie nicht übereinstimmen.
Referenzen: #2027
[orm] ¶
Session.connection(), Session.execute() akzeptieren „bind“, um Ausführungs-/Verbindungsoperationen explizit am offenen Transaktionskontext einer Engine teilnehmen zu lassen.
Referenzen: #1996
[orm] ¶
Query.join(), Query.outerjoin(), eagerload(), eagerload_all(), etc. erlauben keine Listen von Attributen als Argumente mehr (d.h. die Form option([x, y, z]), seit 0.5 veraltet).
[orm] ¶
ScopedSession.mapper ist entfernt (seit 0.5 veraltet).
[orm] ¶
Die horizontale Shard-Abfrage platziert „shard_id“ in context.attributes, wo sie für das „load()“-Ereignis zugänglich ist.
Referenzen: #2031
[orm] ¶
Ein einzelner contains_eager()-Aufruf über mehrere Entitäten hinweg zeigt an, dass alle Sammlungen auf diesem Pfad geladen werden sollen, anstatt separate contains_eager()-Aufrufe für jeden Endpunkt zu erfordern (was nie korrekt dokumentiert war).
Referenzen: #2032
[orm] ¶
Das Feld „name“, das in orm.aliased() verwendet wird, wird nun in der resultierenden SQL-Anweisung dargestellt.
[orm] ¶
Session weak_instance_dict=False ist veraltet.
Referenzen: #1473
[orm] ¶
Eine Ausnahme wird in dem ungewöhnlichen Fall ausgelöst, dass ein Anhang oder ein ähnliches Ereignis bei einer Sammlung auftritt, nachdem das Elternobjekt dereferenziert wurde, was verhindert, dass das Elternobjekt in der Sitzung als „dirty“ markiert wird. War in 0.6.6 eine Warnung.
Referenzen: #2046
[orm] ¶
Query.distinct() akzeptiert nun Spaltenausdrücke als *args, die von der PostgreSQL-Dialekt als DISTINCT ON (<expr>) interpretiert werden.
Referenzen: #1069
[orm] ¶
Zusätzliche Abstimmung bei „many-to-one“-Beziehungsabrufen während eines Flush(). Eine Änderung in Version 0.6.6 ([ticket:2002]) erforderte, dass mehr „unnötige“ m2o-Abrufe während eines Flush() auftreten könnten. Zusätzliche Lademodi wurden hinzugefügt, damit die für diesen spezifischen Anwendungsfall emittierte SQL gekürzt wird, während immer noch die für den Flush benötigten Informationen abgerufen werden, um nichts zu übersehen.
Referenzen: #2049
[orm] ¶
Der Wert von „passive“, der an attributes.get_history() übergeben wird, sollte eine der im attributes-Paket definierten Konstanten sein. Die Übergabe von True oder False ist veraltet.
[orm] ¶
Ein name-Argument wurde zu Query.subquery() hinzugefügt, um dem Alias-Objekt einen festen Namen zuweisen zu können. (auch in 0.6.7)
Referenzen: #2030
[orm] ¶
Eine Warnung wird ausgegeben, wenn ein Mapper für joined-table inheritance keine Primärschlüssel in der lokal abgebildeten Tabelle hat (aber PKs in der Superklassentabelle). (auch in 0.6.7)
Referenzen: #2019
[orm] ¶
Fehler behoben, bei dem die „mittlere“ Klasse in einer polymorphen Hierarchie keine ‚polymorphic_on‘-Spalte hatte, wenn sie keine ‚polymorphic_identity‘ spezifizierte, was zu seltsamen Fehlern beim Refresh und zur falschen Klasse führte, die beim Abfragen von diesem Ziel geladen wurde. Gibt auch das korrekte WHERE-Kriterium aus, wenn Single Table Inheritance verwendet wird. (auch in 0.6.7)
Referenzen: #2038
[orm] ¶
Fehler behoben, bei dem eine Spalte mit einem SQL- oder serverseitigen Standardwert, die mit include_properties oder exclude_properties von einer Abbildung ausgeschlossen wurde, zu einem UnmappedColumnError führte. (auch in 0.6.7)
Referenzen: #1995
[orm] ¶
Eine Warnung wird in dem ungewöhnlichen Fall ausgegeben, dass ein Anhang oder ein ähnliches Ereignis bei einer Sammlung auftritt, nachdem das Elternobjekt dereferenziert wurde, was verhindert, dass das Elternobjekt in der Sitzung als „dirty“ markiert wird. Dies wird in 0.7 eine Ausnahme sein. (auch in 0.6.7)
Referenzen: #2046
sql¶
[sql] ¶
Die Funktion over() und die Methode für FunctionElement-Klassen wurden hinzugefügt, die das _Over()-Konstrukt erzeugen, das wiederum „Fensterfunktionen“ generiert, d.h. „<window function> OVER (PARTITION BY <partition by>, ORDER BY <order by>)“.
Referenzen: #1844
[sql] ¶
LIMIT/OFFSET-Klauseln verwenden nun Bindungsparameter
Referenzen: #805
[sql] ¶
select.distinct() akzeptiert nun Spaltenausdrücke als *args, die von der PostgreSQL-Dialekt als DISTINCT ON (<expr>) interpretiert werden. Beachten Sie, dass dies bereits durch die Übergabe einer Liste an das distinct-Schlüsselwortargument von select() verfügbar war.
Referenzen: #1069
[sql] ¶
select.prefix_with() akzeptiert mehrere Ausdrücke (d.h. *expr), das Schlüsselwortargument ‚prefix‘ von select() akzeptiert eine Liste oder ein Tupel.
[sql] ¶
Die Übergabe eines Strings an das distinct-Schlüsselwortargument von select() zum Ausgeben spezieller MySQL-Schlüsselwörter (DISTINCTROW etc.) ist veraltet – verwenden Sie stattdessen prefix_with().
[sql] ¶
TypeDecorator funktioniert mit Primärschlüsselspalten
[sql] ¶
DDL()-Konstrukte maskieren nun Prozentzeichen
Referenzen: #1897
[sql] ¶
Table.c / MetaData.tables wurden etwas verfeinert, direkte Mutation wird nicht mehr zugelassen
[sql] ¶
Aufrufbare Objekte, die an bindparam() übergeben werden, werden nicht ausgewertet
Referenzen: #1950
[sql] ¶
types.type_map ist nun privat, types._type_map
Referenzen: #1870
[sql] ¶
Nicht-öffentliche Pool-Methoden werden unterstrichen
Referenzen: #1982
[sql] ¶
Unterstützung für NULLS FIRST und NULLS LAST wurde hinzugefügt. Sie wird als Erweiterung der Operatoren asc() und desc() implementiert und heißt nullsfirst() und nullslast().
Referenzen: #723
[sql] ¶
Das Index()-Konstrukt kann inline mit einer Table-Definition erstellt werden, wobei Zeichenfolgen als Spaltennamen verwendet werden, als Alternative zur Erstellung des Index außerhalb der Table.
[sql] ¶
execution_options() auf Connection akzeptiert das Argument „isolation_level“, setzt die Transaktionsisolationsstufe nur für diese Verbindung bis zur Rückgabe an den Connection-Pool, für Backends, die dies unterstützen (SQLite, PostgreSQL).
Referenzen: #2001
[sql] ¶
Ein TypeDecorator von Integer kann mit einer Primärschlüsselspalte verwendet werden, und die „autoincrement“-Funktion verschiedener Dialekte sowie das Flag „sqlite_autoincrement“ erkennen den zugrunde liegenden Datenbanktyp als Integer-basiert an.
Referenzen: #2005
[sql] ¶
Konsistenz wurde bei Vorhandensein von server_default auf einer Integer-PK-Spalte hergestellt. SQLA ruft diese nicht vorab ab, noch kommen sie in cursor.lastrowid (DBAPI) zurück. Es wurde sichergestellt, dass alle Backends für diese Fälle konsistent None in result.inserted_primary_key zurückgeben. Bezüglich der Reflexion für diesen Fall setzt die Reflexion einer Int-PK-Spalte mit server_default das Flag „autoincrement“ auf False, außer im Fall einer PG SERIAL-Spalte, wo wir einen Sequenzstandard erkannt haben.
[sql] ¶
Result-Row-Prozessoren werden auf vordefinierte SQL-Standards sowie auf cursor.lastrowid angewendet, wenn der Inhalt von result.inserted_primary_key bestimmt wird.
Referenzen: #2006
[sql] ¶
Bindungsparameter in der „Spaltenklausel“ einer SELECT-Anweisung werden nun wie andere „anonyme“ Klauseln automatisch beschriftet, was unter anderem ermöglicht, dass ihr „Typ“ bei Abruf der Zeile aussagekräftig ist, wie bei Result-Row-Prozessoren.
[sql] ¶
TypeDecorator ist im „sqlalchemy“-Importraum vorhanden.
[sql] ¶
Nicht-DBAPI-Fehler, die im Geltungsbereich eines execute()-Aufrufs auftreten, werden nun in sqlalchemy.exc.StatementError eingekapselt, und der Text der SQL-Anweisung sowie das repr() der Parameter sind enthalten. Dies erleichtert die Identifizierung von Anweisungsausführungen, die fehlschlagen, bevor die DBAPI involviert wird.
Referenzen: #2015
[sql] ¶
Das Konzept, eine „.bind“ direkt an ein ClauseElement zu binden, wurde explizit auf Executable verschoben, d.h. auf den Mixin, der ClauseElements beschreibt, die ausführbare Einheiten der Engine darstellen. Diese Änderung ist eine Verbesserung der internen Organisation und wird voraussichtlich keine Auswirkungen auf reale Anwendungsfälle haben.
Referenzen: #2048
[sql] ¶
Column.copy(), wie es in table.tometadata() verwendet wird, kopiert das Attribut ‚doc‘. (auch in 0.6.7)
Referenzen: #2028
[sql] ¶
Einige Definitionen wurden zur resultproxy.c-Erweiterung hinzugefügt, damit die Erweiterung auf Python 2.4 kompiliert und ausgeführt werden kann. (auch in 0.6.7)
Referenzen: #2023
[sql] ¶
Die Compiler-Erweiterung unterstützt nun die Überschreibung der Standardkompilierung von expression._BindParamClause, einschließlich der Tatsache, dass die automatisch generierten Bindungen innerhalb der VALUES/SET-Klausel einer insert()/update()-Anweisung ebenfalls die neuen Kompilierungsregeln verwenden.
Referenzen: #2042
[sql] ¶
Die SQLite-Dialekt verwendet nun NullPool für dateibasierte Datenbanken
Referenzen: #1921
[sql] ¶
Der Pfad, der als Speicherort einer SQLite-Datenbank angegeben wird, wird nun über os.path.abspath() normalisiert, so dass Verzeichniswechsel innerhalb des Prozesses den endgültigen Speicherort eines relativen Dateipfads nicht beeinflussen.
Referenzen: #2036
postgresql¶
[postgresql] ¶
Wenn die explizite Sequenzausführung den Namen der automatisch generierten Sequenz einer SERIAL-Spalte ableitet, was derzeit nur geschieht, wenn implicit_returning=False ist, wird nun auch dann damit umgegangen, wenn der Tabellen- + Spaltenname länger als 63 Zeichen ist, wobei die gleiche Logik wie bei PostgreSQL verwendet wird. (auch in 0.6.7)
Referenzen: #1083
[postgresql] ¶
Eine zusätzliche libpq-Nachricht wurde zur Liste der „disconnect“-Ausnahmen hinzugefügt: „could not receive data from server“ (auch in 0.6.7)
Referenzen: #2044
mysql¶
mssql¶
[mssql] ¶
die String/Unicode-Typen und ihre Gegenstücke VARCHAR/NVARCHAR geben „max“ als Länge aus, wenn keine Länge angegeben ist, sodass die Standardlänge, normalerweise „1“ gemäß der SQL Server-Dokumentation, stattdessen „unbeschränkt“ ist. Dies tritt auch für den VARBINARY-Typ auf.
Dieses Verhalten macht diese Typen besser mit dem VARCHAR-Typ von PostgreSQL kompatibel, der ebenfalls unbeschränkt ist, wenn keine Länge angegeben ist.
Referenzen: #1833
misc¶
[no_tags] ¶
Detaillierte Beschreibungen jeder der folgenden Änderungen finden Sie unter: https://docs.sqlalchemy.de/en/latest/changelog/migration_07.html
[declarative] ¶
Eine explizite Prüfung wurde hinzugefügt für den Fall, dass der Name „metadata“ für ein Spaltenattribut einer deklarativen Klasse verwendet wird. (auch in 0.6.7)
Referenzen: #2050
[firebird] ¶
Einige Anpassungen, damit auch Interbase unterstützt wird. FB/Interbase-Versions-Idents werden in eine Struktur wie (8, 1, 1, ‚interbase‘) oder (2, 1, 588, ‚firebird‘) geparst, damit sie unterschieden werden können.
Referenzen: #1885
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