0.3 Changelog

0.3.11

Veröffentlicht: So 14. Okt 2007

orm

  • [orm]

    Es wurde eine Prüfung hinzugefügt, die das Joins von A nach B über zwei verschiedene M2M-Tabellen mit `join()` abfängt. Dies führt in Version 0.3 zu einem Fehler, ist aber in Version 0.4 mit Aliases möglich.

    Referenzen: #687

  • [orm]

    Fehler beim Auslösen einer kleinen Ausnahme in `Session.merge()` behoben.

  • [orm]

    Fehler behoben, bei dem ein Mapper, der mit einem Join verbunden war, bei dem eine Tabelle keine PK-Spalten hatte, nicht erkannte, dass die verknüpfte Tabelle keine PK hatte.

  • [orm]

    Fehler bei der Bestimmung korrekter Synchronisationsklauseln aus benutzerdefinierten Vererbungsbedingungen behoben.

    Referenzen: #769

  • [orm]

    Die `backref`-Entfernungsoperation für Objekte schlägt nicht fehl, wenn die andere Sammlungsseite das Element nicht enthält. Unterstützt `noload` Sammlungen.

    Referenzen: #813

engine

  • [engine]

    Eine weitere gelegentliche Race Condition behoben, die bei Verwendung des Pools mit der Einstellung `threadlocal` auftreten konnte.

sql

  • [sql]

    Priorität von `DISTINCT` für Klauseln wie `func.count(t.c.col.distinct())` angepasst.

  • [sql]

    Erkennung interner '$'-Zeichen in `:bind$params` behoben.

    Referenzen: #719

  • [sql]

    Es wird nicht mehr davon ausgegangen, dass das Join-Kriterium nur aus Spaltenobjekten besteht.

    Referenzen: #768

  • [sql]

    Operator-Priorität von `NOT` angepasst, um mit `==` und anderen übereinzustimmen. Dadurch erzeugt `~(x==y)` `NOT (x=y)`, was mit MySQL < 5.0 kompatibel ist (welches "NOT x=y" nicht mag).

    Referenzen: #764

mysql

  • [mysql]

    Spezifikation von `YEAR`-Spalten bei der Generierung des Schemas behoben.

sqlite

  • [sqlite]

    Durchleitung für stringifizierte Daten.

mssql

  • [mssql]

    Unterstützung für `TIME`-Spalten hinzugefügt (simuliert durch `DATETIME`).

    Referenzen: #679

  • [mssql]

    Unterstützung für `BIGINT`, `MONEY`, `SMALLMONEY`, `UNIQUEIDENTIFIER` und `SQL_VARIANT` hinzugefügt.

    Referenzen: #721

  • [mssql]

    Indexnamen werden nun beim Löschen von reflektierten Tabellen in Anführungszeichen gesetzt.

    Referenzen: #684

  • [mssql]

    Es kann nun ein DSN für PyODBC angegeben werden, mit einer URI wie `mssql:///?dsn=bob`.

oracle

  • [oracle]

    `LONG_STRING`, `LONG_BINARY` aus "binary"-Typen entfernt, sodass Typobjekte nicht versuchen, ihre Werte als LOB zu lesen.

    Referenzen: #622, #751

misc

  • [postgres]

    Beim Reflektieren von Tabellen aus alternativen Schemas wird der "Standard" für den Primärschlüssel, d.h. normalerweise ein Sequenzname, bedingungslos mit dem "Schema"-Namen in Anführungszeichen gesetzt, sodass Schema-Namen, die Anführungszeichen benötigen, korrekt behandelt werden. Es ist etwas unnötig für Schema-Namen, die keine Anführungszeichen benötigen, aber nicht schädlich.

  • [firebird]

    `supports_sane_rowcount()` auf `False` gesetzt aufgrund von Ticket #370 (richtige Methode).

  • [firebird]

    Reflexion der `nullable`-Eigenschaft von Spalten behoben.

0.3.10

Veröffentlicht: Fr 20. Jul 2007

general

  • [general]

    Ein neuer Mutex, der in Version 0.3.9 hinzugefügt wurde, verursacht, dass die Funktion `pool_timeout` während einer Race Condition fehlschlägt. Threads würden sofort mit `TimeoutError` auslösen, ohne Verzögerung, wenn viele Threads gleichzeitig den Pool überlasten. Dieses Problem wurde behoben.

orm

  • [orm]

    Bereinigung von verbindungsorientierten Sessions, `SessionTransaction`.

sql

  • [sql]

    Verbindungsorientierte Metadaten haben mit impliziter Ausführung funktioniert.

  • [sql]

    Fremdschlüssel-Spezifikationen können beliebige Zeichen in ihren Bezeichnern enthalten.

    Referenzen: #667

  • [sql]

    Kommutativitätsbewusstsein zu binären Klauselvergleichen hinzugefügt, verbessert die ORM-Lazy-Load-Optimierung.

    Referenzen: #664

misc

  • [postgres]

    Maximale Bezeichnerlänge (63) behoben.

    Referenzen: #571

0.3.9

Veröffentlicht: So 15. Jul 2007

general

  • [general]

    Bessere Fehlermeldung für `NoSuchColumnError`.

    Referenzen: #607

  • [general]

    Setuptools-Version wurde endlich integriert und ist als `sqlalchemy.__version__` verfügbar.

    Referenzen: #428

  • [general]

    Die verschiedenen "engine"-Argumente wie "engine", "connectable", "engine_or_url", "bind_to" usw. sind vorhanden, aber veraltet. Sie werden alle durch den einzelnen Begriff "bind" ersetzt. Sie können auch "bind" von `MetaData` mit `metadata.bind = ` setzen.

orm

  • [orm]

    Vorwärtskompatibilität mit 0.4: `one()`, `first()` und `all()` zu `Query` hinzugefügt. Fast die gesamte Query-Funktionalität von 0.4 ist für die Vorwärtskompatibilität in 0.3.9 vorhanden.

  • [orm]

    `reset_joinpoint()` funktioniert dieses Mal wirklich, versprochen! Ermöglicht das erneute Verknüpfen vom Startpunkt aus: `query.join(['a', 'b']).filter().reset_joinpoint().join(['a', 'c']).filter().all()`. In 0.4 beginnen alle `join()`-Aufrufe vom "Startpunkt" aus.

  • [orm]

    Synchronisation zum `mapper()`-Konstruktionsschritt hinzugefügt, um Thread-Kollisionen zu vermeiden, wenn bereits vorhandene Mapper in einem anderen Thread kompiliert werden.

    Referenzen: #613

  • [orm]

    Ein Warnhinweis wird von `Mapper` ausgegeben, wenn zwei Primärschlüsselspalten mit demselben Namen zu einem einzigen Attribut zusammengeführt werden. Dies geschieht häufig beim Mapping zu Joins (oder Vererbungen).

  • [orm]

    Synonym()-Eigenschaften werden von allen `Query`-Joining/`with_parent`-Operationen vollständig unterstützt.

    Referenzen: #598

  • [orm]

    Ein sehr dummer Fehler beim Löschen von Elementen mit Many-to-Many-Beziehungen (`uselist=False`) behoben.

  • [orm]

    Erinnern Sie sich an all die Dinge über `polymorphic_union`? Für joined table inheritance? Komisch... Sie brauchen das eigentlich nicht für joined table inheritance, Sie können einfach alle Tabellen über `outerjoin()` zusammenfügen. Die UNION gilt weiterhin, wenn konkrete Tabellen beteiligt sind (da es nichts gibt, um sie zu verbinden).

  • [orm]

    Kleine Korrektur beim Eager Loading, um besser mit Eager Loads auf polymorphe Mapper zu funktionieren, die eine direkte `outerjoin`-Klausel verwenden.

sql

  • [sql]

    Ein `ForeignKey` zu einer Tabelle in einem anderen Schema als dem Standard erfordert, dass das Schema explizit angegeben wird; d.h. `ForeignKey('alt_schema.users.id')`.

  • [sql]

    `MetaData` kann nun mit einer Engine oder URL als erstem Argument konstruiert werden, genau wie `BoundMetaData`.

  • [sql]

    `BoundMetaData` ist nun veraltet und `MetaData` ist ein direkter Ersatz.

  • [sql]

    `DynamicMetaData` wurde in `ThreadLocalMetaData` umbenannt. Der Name `DynamicMetaData` ist veraltet und ein Alias für `ThreadLocalMetaData` oder ein reguläres `MetaData`, wenn `threadlocal=False`.

  • [sql]

    Ein zusammengesetzter Primärschlüssel wird als nicht-geschlüsselter Satz dargestellt, um zusammengesetzte Schlüssel aus Spalten mit demselben Namen zu ermöglichen; tritt innerhalb eines Joins auf. Hilft Vererbungsszenarien, korrekte PKs zu formulieren.

  • [sql]

    Verbesserte Fähigkeit, die "korrekte" und minimalste Menge an Primärschlüsselspalten aus einem Join zu erhalten, indem Fremdschlüssel und anderweitig gleichgesetzte Spalten gleichgesetzt werden. Dies dient hauptsächlich dazu, Vererbungsszenarien bei der Formulierung der besten Auswahl von Primärschlüsselspalten zu unterstützen.

    Referenzen: #185

  • [sql]

    Argument 'bind' zu `Sequence.create()/drop()` und `ColumnDefault.execute()` hinzugefügt.

  • [sql]

    Spalten können in einer reflektierten Tabelle mit einem "key"-Attribut, das sich vom Spaltennamen unterscheidet, überschrieben werden, auch für Primärschlüsselspalten.

    Referenzen: #650

  • [sql]

    Erkennung von "mehrdeutigen Spalten" behoben, wenn doppelte Spaltennamen in einem Ergebnis vorhanden sind.

    Referenzen: #657

  • [sql]

    Einige Verbesserungen an der "Spaltenausrichtung", der Fähigkeit, eine Spalte mit einer "korrespondierenden" Spalte in einem anderen wählbaren Objekt abzugleichen. Dies betrifft hauptsächlich die Fähigkeit des ORM, komplexe Joins abzubilden.

  • [sql]

    `MetaData` und alle `SchemaItems` sind sicher zu pickeln. Langsame Tabellenreflexionen können in eine gepickelte Datei gespeichert und später wiederverwendet werden. Verbinden Sie einfach die Engine nach dem Entpickeln wieder mit den Metadaten.

    Referenzen: #619

  • [sql]

    Mutex zum "Überlauf"-Berechnung von `QueuePool` hinzugefügt, um eine Race Condition zu verhindern, die `max_overflow` umgehen könnte.

  • [sql]

    Gruppierung von zusammengesetzten Selects behoben, um korrekte Ergebnisse zu liefern. Schlägt unter SQLite in einigen Fällen fehl, aber diese Fälle lieferten ohnehin falsche Ergebnisse, da SQLite gruppierte zusammengesetzte Selects nicht unterstützt.

    Referenzen: #623

  • [sql]

    Priorität von Operatoren behoben, damit Klammern korrekt angewendet werden.

    Referenzen: #620

  • [sql]

    Das Aufrufen von `.in_()` (d.h. ohne Argumente) gibt "CASE WHEN ( IS NULL) THEN NULL ELSE 0 END = 1)" zurück, sodass `NULL` oder `False` in allen Fällen zurückgegeben wird, anstatt einen Fehler auszulösen.

    Referenzen: #545

  • [sql]

    Der `where`/`from`-Kriterium von `select()` akzeptiert nun eine Unicode-Zeichenkette zusätzlich zur regulären Zeichenkette - beide werden in `text()` konvertiert.

  • [sql]

    Eine eigenständige `distinct()`-Funktion wurde zusätzlich zu `column.distinct()` hinzugefügt.

    Referenzen: #558

  • [sql]

    `result.last_inserted_ids()` sollte eine Liste zurückgeben, die die gleiche Größe wie die Primärschlüsselbeschränkung der Tabelle hat. Werte, die "passiv" erstellt wurden und nicht über `cursor.lastrowid` verfügbar sind, werden `None` sein.

  • [sql]

    Erkennung langer Bezeichner wurde korrigiert, um `>` statt `>=` für die maximale Bezeichnerlänge zu verwenden.

    Referenzen: #589

  • [sql]

    Fehler behoben, bei dem `selectable.corresponding_column(selectable.c.col)` nicht `selectable.c.col` zurückgab, wenn das wählbare Objekt ein Join einer Tabelle und eines weiteren Joins mit derselben Tabelle ist. Dies beeinträchtigte die ORM-Entscheidungsfindung.

    Referenzen: #593

  • [sql]

    Typ `Interval` zu `types.py` hinzugefügt.

    Referenzen: #595

mysql

  • [mysql]

    Einige Fehler, die auf eine getrennte Verbindung hindeuten, wurden behoben.

    Referenzen: #625

  • [mysql]

    Escaping des Modulo-Operators behoben.

    Referenzen: #624

  • [mysql]

    `fields` zu reservierten Wörtern hinzugefügt.

    Referenzen: #590

  • [mysql]

    Diverse Verbesserungen/Korrekturen bei der Reflexion.

sqlite

  • [sqlite]

    Dialektinitialisierung neu angeordnet, damit Zeit für Warnungen bezüglich zu altem PySQLite1 bleibt.

  • [sqlite]

    SQLite behandelt `datetime`/`date`/`time`-Objekte gemischt mit verschiedenen `Date`/`Time`/`DateTime`-Spalten besser.

  • [sqlite]

    String-PK-Spalten-Einfügungen werden nicht mit OID überschrieben.

    Referenzen: #603

mssql

  • [mssql]

    Port-Option für PyODBC behoben.

    Referenzen: #634

  • [mssql]

    Es können nun Start- und Inkrementwerte für Identitätsspalten reflektiert werden.

  • [mssql]

    Vorläufige Unterstützung für die Verwendung von `scope_identity()` mit PyODBC.

oracle

  • [oracle]

    Datum/Zeit-Korrekturen: `TIMESTAMP` mit Untersekunden wurde zum Laufen gebracht, `OracleDate` hinzugefügt, das `types.Date` mit nur Jahr/Monat/Tag unterstützt.

    Referenzen: #604

  • [oracle]

    Dialektflag `auto_convert_lobs` hinzugefügt, standardmäßig `True`; dadurch werden alle LOB-Objekte, die in einem Ergebnis-Set erkannt werden, zu `OracleBinary` gezwungen, sodass der LOB automatisch gelesen wird, wenn keine Typzuordnung vorhanden war (d.h. wenn eine textuelle Ausführung ausgestellt wurde).

  • [oracle]

    Der Modulo-Operator `%` erzeugt `MOD`.

    Referenzen: #624

  • [oracle]

    cx_oracle Datetime-Objekte werden in Python `datetime.datetime` konvertiert, wenn Python 2.3 verwendet wird.

    Referenzen: #542

  • [oracle]

    Unicode-Konvertierung im Oracle `TEXT`-Typ behoben.

misc

  • [ext]

    Die Iteration über Diktat-Assoziations-Proxies ist nun diktatähnlich, nicht `InstrumentedList`-ähnlich (z.B. über Schlüssel statt Werte).

  • [ext]

    Assoziations-Proxies binden sich nicht mehr fest an Quell-Sammlungen und werden stattdessen mit einem "Thunk" konstruiert.

    Referenzen: #597

  • [ext]

    `selectone_by()` zu `assignmapper` hinzugefügt.

  • [postgres]

    Escaping des Modulo-Operators behoben.

    Referenzen: #624

  • [postgres]

    Unterstützung für die Reflexion von Domänen hinzugefügt.

    Referenzen: #570

  • [postgres]

    Typen, die bei der Reflexion fehlen, werden zu `Null`-Typ aufgelöst, anstatt einen Fehler auszulösen.

  • [postgres]

    Die Korrektur in "schema" oben behebt die Reflexion von Fremdschlüsseln von einer `alt_schema`-Tabelle zu einer `public`-Schema-Tabelle.

0.3.8

Veröffentlicht: Sa 02. Jun 2007

orm

  • [orm]

    `reset_joinpoint()`-Methode zu `Query` hinzugefügt, verschiebt den "Join-Punkt" zurück zum Start-Mapper. 0.4 wird das Verhalten von `join()` ändern, um den "Join-Punkt" in allen Fällen zurückzusetzen, daher ist dies eine Übergangsmethode. Stellen Sie für die Vorwärtskompatibilität sicher, dass Joins über mehrere Beziehungen mit einem einzigen `join()` angegeben werden, d.h. `join(['a', 'b', 'c'])`.

  • [orm]

    Fehler in `query.instances()`, der nicht mehr als einen zusätzlichen Mapper oder eine zusätzliche Spalte handhaben konnte, behoben.

  • [orm]

    `"delete-orphan"` impliziert nicht mehr `"delete"`. Laufende Anstrengung, das Verhalten dieser beiden Operationen zu trennen.

  • [orm]

    Many-to-many-Beziehungen setzen den Typ von Bind-Parametern für Löschoperationen an der Assoziationstabelle korrekt.

  • [orm]

    Many-to-many-Beziehungen prüfen, ob die Anzahl der von einer Löschoperation aus der Assoziationstabelle gelöschten Zeilen den erwarteten Ergebnissen entspricht.

  • [orm]

    `session.get()` und `session.load()` leiten `**kwargs` an `query` weiter.

  • [orm]

    Korrektur für polymorphe Abfragen, die es erlauben, die ursprüngliche `polymorphic_union` in eine korrelierte Unterabfrage einzubetten.

    Referenzen: #577

  • [orm]

    Korrektur für `select_by(=)`-Style-Joins in Verbindung mit Many-to-Many-Beziehungen, Fehler eingeführt in r2556.

  • [orm]

    Das Argument "primary_key" für `mapper()` wird an den "polymorphen" Mapper weitergegeben. Primärschlüsselspalten in dieser Liste werden auf die lokale Tabelle des Mappers normalisiert.

  • [orm]

    Protokollierung von "lazy loading clause" im `sa.orm.strategies`-Logger wiederhergestellt, wurde in 0.3.7 entfernt.

  • [orm]

    Verbesserte Unterstützung für Eager Loading von Eigenschaften von Mappern, die auf `select()`-Statements gemappt sind; d.h. der Eagerloader ist besser darin, das korrekte wählbare Objekt zu finden, an das er seinen `LEFT OUTER JOIN` anhängen soll.

  • sql

    • [sql]

      Die Klasse `_Label` überschreibt `compare_self`, um ihr ultimatives Objekt zurückzugeben. Das bedeutet, wenn Sie `someexpr.label('foo') == 5` sagen, erzeugt dies das korrekte "someexpr == 5".

    • [sql]

      `_Label` propagiert `_hide_froms()`, sodass Skalar-Selects im Hinblick auf die FROM-Klausel besser funktionieren #574.

    • [sql]

      Korrektur der Generierung langer Namen bei Verwendung von `oid_column` als Sortierung (OIDs werden stark in Mapper-Abfragen verwendet).

    • [sql]

      Signifikante Geschwindigkeitsverbesserung von `ResultProxy`, zwischenspeichert `TypeEngine`-Dialektimplementierungen und spart Funktionsaufrufe pro Spalte.

    • [sql]

      Klammern werden Klauseln über ein neues `_Grouping`-Konstrukt hinzugefügt. Verwendet Operator-Priorität, um Klammern intelligenter anzuwenden, bietet sauberere Verschachtelung von Klauseln (mutiert keine Klauseln, die in anderen Klauseln platziert sind, d.h. kein 'parens'-Flag).

    • [sql]

      Schlüsselwort 'modifier' hinzugefügt, funktioniert wie `func.` außer dass keine Klammern hinzugefügt werden. z.B. `select([modifier.DISTINCT(...)])` etc.

    • [sql]

      Einschränkung "keine GROUP BYs in einem Select, das Teil eines UNION ist" entfernt.

      Referenzen: #578

    mysql

    • [mysql]

      Fast alle MySQL-Spaltentypen werden nun für Deklaration und Reflexion unterstützt. `NCHAR`, `NVARCHAR`, `VARBINARY`, `TINYBLOB`, `LONGBLOB`, `YEAR` hinzugefügt.

    • [mysql]

      Der `sqltypes.Binary`-Passthrough erstellt nun immer `BLOB` und vermeidet Probleme mit sehr alten Datenbankversionen.

    • [mysql]

      Unterstützung für Spalten-Level `CHARACTER SET`- und `COLLATE`-Deklarationen sowie die Kurzformen `ASCII`, `UNICODE`, `NATIONAL` und `BINARY`.

    misc

    • [engines]

      `detach()` zu `Connection` hinzugefügt, ermöglicht das Ablösen der zugrunde liegenden DBAPI-Verbindung vom Pool. Schließt bei Dereferenzierung/`close()` statt vom Pool wiederverwendet zu werden.

    • [engines]

      `invalidate()` zu `Connection` hinzugefügt, macht die Verbindung und ihre zugrunde liegende DBAPI-Verbindung sofort ungültig.

    • [firebird]

      Maximale Bezeichnerlänge auf 31 gesetzt.

    • [firebird]

      `supports_sane_rowcount()` auf `False` gesetzt aufgrund von Ticket #370. Die Funktion `versioned_id_col` funktioniert in FB nicht.

    • [firebird]

      Einige Ausführungskorrekturen.

    • [firebird]

      Neue Implementierung von Assoziations-Proxies, die vollständige Proxies für Listen-, Diktat- und Set-basierte Relationssammlungen implementiert.

    • [firebird]

      `orderinglist` hinzugefügt, eine benutzerdefinierte Listenklasse, die ein Objektattribut mit der Position dieses Objekts in der Liste synchronisiert.

    • [firebird]

      Kleine Korrektur an `SelectResultsExt`, um während `select()` nicht an sich selbst vorbeizugehen.

    • [firebird]

      `filter()`, `filter_by()` zu `assignmapper` hinzugefügt.

    0.3.7

    Veröffentlicht: So 29. Apr 2007

    orm

    • [orm]

      Kritische Problem behoben, bei dem der Mapper nach Verwendung von `options(eagerload())` immer das "Wrapping"-Verhalten für alle nachfolgenden `LIMIT`/`OFFSET`/`DISTINCT`-Abfragen anwendete, selbst wenn bei diesen nachfolgenden Abfragen keine Eager-Ladung angewendet wurde.

    • [orm]

      fügt die Methode query.with_parent(someinstance) hinzu. durchsucht die Zielinstanz unter Verwendung des "lazy join"-Kriteriums von der Elterninstanz. nimmt einen optionalen String "property", um die gewünschte Beziehung zu isolieren. fügt auch eine statische Version Query.query_from_parent(instance, property) hinzu.

      Referenzen: #541

    • [orm]

      verbesserte query.XXX_by(someprop=someinstance) Abfragen, um eine ähnliche Methodik wie bei with_parent zu verwenden, d.h. die "lazy"-Klausel, die verhindert, dass die Tabelle der entfernten Instanz zum SQL hinzugefügt wird, wodurch komplexere Bedingungen möglich werden.

      Referenzen: #554

    • [orm]

      generative Versionen von Aggregaten, d.h. sum(), avg() usw. zu query hinzugefügt. Verwendung über query.apply_max(), apply_sum() usw. #552

    • [orm]

      Behebung bei der Verwendung von distinct() oder distinct=True in Kombination mit join() und ähnlichem.

    • [orm]

      Entsprechend der Namensgenerierung von Label/Bindparam generieren Eager Loader deterministische Namen für die Aliase, die sie unter Verwendung von MD5-Hashes erstellen.

    • [orm]

      verbesserte/behobene benutzerdefinierte Collection-Klassen bei der Übergabe von "set"/ "sets.Set"-Klassen oder Unterklassen (suchte bei Lazy Loads immer noch nach append()-Methoden).

    • [orm]

      die alte ORM-Funktion "column_property()" (früher "column()" genannt) wiederhergestellt, um jede Spaltenexpression als Property auf einem Mapper zu erzwingen, insbesondere solche, die nicht in der gemappten wählbaren vorhanden sind. dies erlaubt, "skalare Ausdrücke" jeglicher Art als Beziehungen hinzuzufügen (obwohl sie Probleme mit Eager Loads haben).

    • [orm]

      Behebung bei vielen-zu-vielen-Beziehungen, die auf polymorphe Mapper abzielen.

      Referenzen: #533

    • [orm]

      Fortschritte bei session.merge() sowie bei der Kombination seiner Verwendung mit entity_name.

      Referenzen: #543

    • [orm]

      die üblichen Anpassungen von Beziehungen zwischen erbenden Mappern, in diesem Fall die Einrichtung von relation() zu Unterklassen-Mappern, bei denen die Join-Bedingungen aus der Tabelle der Oberklasse stammen.

    sql

    • [sql]

      Schlüssel von Ergebnismengenspalten werden nicht kleingeschrieben, sondern kommen exakt so zurück, wie sie in cursor.description ausgedrückt werden. beachten Sie, dass dies bei Oracle zu Großbuchstaben bei colnames führt.

    • [sql]

      vorläufige Unterstützung für Unicode-Tabellennamen, Spaltennamen und SQL-Anweisungen hinzugefügt, für Datenbanken, die diese unterstützen können. Bisher funktioniert dies mit sqlite und postgres. MySQL funktioniert *meistens*, außer dass die Funktion has_table() nicht funktioniert. Reflektion funktioniert ebenfalls.

    • [sql]

      der Unicode-Typ ist nun eine direkte Unterklasse von String, die nun die gesamte Logik von "convert_unicode" enthält. Dies hilft, die Vielzahl von Unicode-Situationen, die in DBs wie MS-SQL auftreten, besser zu handhaben und ermöglicht das Ableiten von Unterklassen des Unicode-Datentyps.

      Referenzen: #522

    • [sql]

      ClauseElements können nun in in_()-Klauseln verwendet werden, wie z.B. Bind-Parameter usw. #476

    • [sql]

      umgekehrte Operatoren für Elemente von CompareMixin implementiert, erlaubt Ausdrücke wie "5 + somecolumn" usw. #474

    • [sql]

      das "where"-Kriterium einer update() und delete() korreliert nun eingebettete select()-Anweisungen mit der zu aktualisierenden oder zu löschenden Tabelle. dies funktioniert genauso wie die Korrelation von verschachtelten select()-Anweisungen und kann über das Flag correlate=False auf der eingebetteten select() deaktiviert werden.

    • [sql]

      Spalten-Labels werden nun in der Kompilierungsphase generiert, was bedeutet, dass ihre Längen dialektabhängig sind. So wird bei Oracle ein Label, das auf 30 Zeichen gekürzt wird, bei Postgres auf 63 Zeichen erweitert. Außerdem ist der tatsächliche Labelname immer als Zugriffsattribut auf dem übergeordneten Selectable angehängt, so dass kein Bewusstsein für die "gekürzten" Labelnamen erforderlich ist.

      Referenzen: #512

    • [sql]

      Spalten-Label und Bind-Param-Kürzung generieren nun ebenfalls deterministische Namen, basierend auf ihrer Reihenfolge innerhalb der gesamten zu kompilierenden Anweisung. dies bedeutet, dass die gleiche Anweisung über Anwendungsneustarts hinweg denselben String erzeugt und die Abfrageplan-Cachings der DB besser funktionieren.

    • [sql]

      die "mini"-Spalten-Labels, die bei der Verwendung von Subqueries generiert werden, um fehlerhaftes SQLite-Verhalten zu umgehen, das "foo.id" nicht als gleichwertig mit "id" versteht, werden nun nur noch in dem Fall generiert, dass diese benannten Spalten aus (Teil von) ausgewählt werden.

      Referenzen: #513

    • [sql]

      die Label()-Methode auf ColumnElement wird den TypeEngine des Basiselements ordnungsgemäß an das Label weitergeben, einschließlich eines Labels(), das aus einer skalaren = True select()-Anweisung erstellt wurde.

    • [sql]

      MS-SQL erkennt nun besser, wann eine Abfrage eine Subquery ist und weiß, dass sie für diese keine ORDER BY-Phrasen generieren soll.

      Referenzen: #513

    • [sql]

      Korrektur, da das fetchmany()-Argument "size" bei den meisten DBAPIs positionsabhängig ist.

      Referenzen: #505

    • [sql]

      die Übergabe von None als Argument an func.<something> erzeugt ein Argument von NULL.

    • [sql]

      Abfragezeichenfolgen in Unicode-URLs werden für **kwargs-Kompatibilität in ASCII kodiert.

    • [sql]

      leichte Anpassung der raw execute()-Änderung, um auch Tupel für positionsabhängige Parameter zu unterstützen, nicht nur Listen.

      Referenzen: #523

    • [sql]

      Korrektur der case()-Konstruktion, um den Typ der ersten WHEN-Bedingung als Rückgabetyp der case-Anweisung weiterzugeben.

    extensions

    • [extensions]

      große Korrektur an AssociationProxy, so dass mehrere AssociationProxy-Objekte mit einer einzigen Association-Collection verknüpft werden können.

    • [extensions]

      assign_mapper benennt Methoden entsprechend ihren Schlüsseln (d.h. __name__) #551

    mysql

    • [mysql]

      Unterstützung für SSL-Argumente, die als Inline-Parameter in der URL-Query-Zeichenfolge mit dem Präfix "ssl_" übergeben werden, dank terjeros@gmail.com.

    • [mysql] [<schemaname>]

      MySQL verwendet "DESCRIBE.<tablename>" und fängt Ausnahmen ab, wenn die Tabelle nicht existiert, um festzustellen, ob eine Tabelle existiert. dies unterstützt Unicode-Tabellennamen sowie Schemanamen. getestet mit MySQL5, sollte aber auch mit der 4.1-Serie funktionieren. (#557)

    sqlite

    • [sqlite]

      dummes Verhalten entfernt, bei dem sqlite UNIQUE-Indizes als Teil des Primärschlüssels reflektierte (?!).

    mssql

    • [mssql]

      pyodbc ist nun die bevorzugte DB-API für MSSQL und wird bei einer Modulprüfung als erstes geladen, wenn kein Modul speziell angefordert wird.

    • [mssql]

      @@SCOPE_IDENTITY wird nun anstelle von @@IDENTITY verwendet. Dieses Verhalten kann mit dem Engine_connect-Schlüsselwortparameter "use_scope_identity" überschrieben werden, der auch in der DBURI angegeben werden kann.

    oracle

    • [oracle]

      kleine Korrektur, um aufeinanderfolgende Kompilierungen desselben SELECT-Objekts mit LIMIT/OFFSET zu ermöglichen. Der Oracle-Dialekt muss das Objekt so modifizieren, dass es ROW_NUMBER OVER hat und führte bei aufeinanderfolgenden Kompilierungen nicht alle Schritte aus.

    misc

    • [engines]

      Warnmodul wird für die Ausgabe von Warnungen verwendet (anstelle von Logging).

    • [engines]

      Bereinigung der DBAPI-Importstrategien über alle Engines hinweg.

      Referenzen: #480

    • [engines]

      Refactoring des Engine-Internals, das die Komplexität und Anzahl der Code-Pfade reduziert; mehr Statusinformationen in ExecutionContext platziert, um eine stärkere Dialektkontrolle über Cursor-Handling und Ergebnismengen zu ermöglichen. ResultProxy wurde vollständig refaktoriert und hat auch zwei Versionen von "buffered" Ergebnismengen, die für verschiedene Zwecke verwendet werden.

    • [engines]

      Server-seitige Cursor-Unterstützung in PostgreSQL vollständig funktionsfähig.

      Referenzen: #514

    • [engines]

      verbessertes Framework für die automatische Ungültigmachung von Verbindungen, die ihre zugrundeliegende Datenbank verloren haben, durch dialektspezifische Erkennung von Ausnahmen, die mit den Fehlermeldungen der Datenbank bezüglich Trennung korrespondieren. Zusätzlich wird, wenn eine Bedingung "Verbindung nicht mehr offen" erkannt wird, der gesamte Verbindungspool verworfen und durch eine neue Instanz ersetzt. #516

    • [engines]

      die Dialekte innerhalb von sqlalchemy.databases werden zu Setuptools Entry Points. Das Laden der integrierten Datenbankdialekte funktioniert wie immer, aber wenn keine gefunden werden, wird auf die Verwendung von pkg_resources zurückgegriffen, um ein externes Modul zu laden.

      Referenzen: #521

    • [engines]

      Engine enthält ein "url"-Attribut, das auf das von create_engine() verwendete url.URL-Objekt verweist.

    • [informix]

      Informix-Unterstützung hinzugefügt! Dank James Zhang, der viel Mühe investiert hat.

    0.3.6

    Veröffentlicht: Fr. 23. März 2007

    orm

    • [orm]

      der volle Funktionsumfang der SelectResults-Erweiterung wurde in eine neue Reihe von Methoden zusammengeführt, die über Query verfügbar sind. Diese Methoden bieten alle "generatives" Verhalten, bei dem die Query kopiert und eine neue zurückgegeben wird, mit hinzugefügtem Kriterium. Die neuen Methoden umfassen

      • filter() - wendet SELECT-Kriterien auf die Query an

      • filter_by() - wendet "by"-Stil-Kriterien auf die Query an

      • avg() - gibt die avg()-Funktion für die gegebene Spalte zurück

      • join() - join zu einer Eigenschaft (oder über eine Liste von Eigenschaften)

      • outerjoin() - wie join(), verwendet aber LEFT OUTER JOIN

      • limit()/offset() - wendet LIMIT/OFFSET Bereichsbasierte Zugriffe an, die limit/offset anwenden: session.query(Foo)[3:5]

      • distinct() - wendet DISTINCT an

      • list() - evaluiert das Kriterium und gibt die Ergebnisse zurück

      Es wurden keine inkompatiblen Änderungen an der API von Query vorgenommen und keine Methoden wurden als veraltet markiert. Bestehende Methoden wie select(), select_by(), get(), get_by() führen die Query sofort aus und geben die Ergebnisse wie immer zurück. join_to()/join_via() sind immer noch vorhanden, obwohl die generativen Methoden join()/outerjoin() einfacher zu verwenden sind.

    • [orm]

      der Rückgabewert für mehrere Mapper, die mit instances() verwendet werden, gibt nun ein kartesisches Produkt der angeforderten Liste von Mappern zurück, dargestellt als Liste von Tupeln. dies entspricht dem dokumentierten Verhalten. damit die Instanzen richtig übereinstimmen, wird die "Uniquing" deaktiviert, wenn diese Funktion verwendet wird.

    • [orm]

      Query hat generelle Methoden add_entity() und add_column(). diese fügen den gegebenen Mapper/die Klasse oder das ColumnElement zur Compile-Zeit zur Query hinzu und wenden sie auf die instances()-Methode an. der Benutzer ist dafür verantwortlich, sinnvolle Join-Bedingungen zu konstruieren (andernfalls kann es zu vollständigen kartesischen Produkten kommen). Ergebnismenge ist die Liste der Tupel, nicht eindeutig.

    • [orm]

      Zeichenketten und Spalten können auch an die *args von instances() übergeben werden, wo diese exakten Ergebnisspalten Teil der Tupel sein werden.

    • [orm]

      ein vollständiger select()-Konstrukt kann an query.select() übergeben werden (was sowieso funktionierte), aber auch query.selectfirst(), query.selectone(), die so wie sie sind verwendet werden (d.h. keine Query wird kompiliert). funktioniert ähnlich wie die Übergabe der Ergebnisse an instances().

    • [orm]

      Eager Loading wird keine "Alias"-Klauseln für "order by" erstellen, die vom Eager Loader selbst in die Select-Anweisung platziert wurden, um die Möglichkeit von Duplikatspalten zu beheben, wie in illustriert. Dies bedeutet jedoch, dass Sie sorgfältiger mit den Spalten umgehen müssen, die in der "order by"-Klausel von Query.select() platziert werden, und dass Sie diese explizit in Ihrem Kriterium benennen müssen (d.h. Sie können sich nicht darauf verlassen, dass der Eager Loader sie für Sie hinzufügt).

      Referenzen: #495

    • [orm]

      eine praktische Mehrzweckmethode "identity_key()" zur Session hinzugefügt, die die Generierung von Identitätsschlüsseln für Primärschlüsselwerte, Instanzen und Zeilen ermöglicht, dank Daniel Miller.

    • [orm]

      Many-to-Many-Tabellen werden auch für Operationen, die auf der "Backref"-Seite der Operation stattfinden, ordnungsgemäß behandelt.

      Referenzen: #249

    • [orm]

      der "refresh-expire"-Cascade wurde hinzugefügt. ermöglicht es, refresh() und expire() Aufrufe entlang von Beziehungen weiterzugeben.

      Referenzen: #492

    • [orm]

      weitere Korrekturen an polymorphen Beziehungen, einschließlich der ordnungsgemäßen Generierung von Lazy-Klauseln bei vielen-zu-eins-Beziehungen zu polymorphen Mappern. Auch Korrekturen bei der Erkennung der "Richtung", gezieltere Auswahl von Spalten, die zur polymorphen Union gehören, im Gegensatz zu denen, die es nicht tun.

      Referenzen: #493

    • [orm]

      einige Korrekturen an Beziehungsberechnungen bei Verwendung von "viewonly=True", um andere Tabellen in die Join-Bedingung einzubeziehen, die nicht Eltern/Kind-Mappings der Beziehung sind.

    • [orm]

      Flush-Korrekturen bei zyklisch-referenziellen Beziehungen, die Referenzen auf andere Instanzen außerhalb der zyklischen Kette enthalten, wenn einige der Objekte im Zyklus nicht tatsächlich Teil des Flushes sind.

    • [orm]

      eine aggressive Prüfung auf den Fehler "Objekt A mit einer Sammlung von B's flushen, aber Sie haben ein C in die Sammlung gelegt" hinzugefügt - **auch wenn C eine Unterklasse von B ist**, es sei denn, der Mapper von B lädt polymorph. Andernfalls wird die Sammlung später ein "B" laden, das ein "C" sein sollte (da es nicht polymorph ist), was bei bidirektionalen Beziehungen fehlschlägt (d.h. C hat sein A, aber das Backref von A wird es als eine andere Instanz des Typs "B" lazyladen). Diese Prüfung wird einige von Ihnen, die dies ohne Probleme tun, treffen, daher wird die Fehlermeldung auch ein Flag "enable_typechecks=False" zur Deaktivierung dieser Prüfung dokumentieren. Aber seien Sie sich bewusst, dass bidirektionale Beziehungen insbesondere ohne diese Prüfung fragil werden.

      Referenzen: #500

    sql

    • [sql]

      bindparam()-Namen sind nun wiederholbar! Geben Sie zwei verschiedene bindparam()-Objekte mit demselben Namen in einer einzigen Anweisung an, und der Schlüssel wird geteilt. ordnungsgemäße positionsabhängige/benannte Argumente werden zur Kompilierungszeit übersetzt. für das alte Verhalten des "Aliasing" von Bind-Parametern mit widersprüchlichen Namen geben Sie "unique=True" an - diese Option wird intern weiterhin für alle automatisch generierten (wertbasierten) Bind-Parameter verwendet.

    • [sql]

      etwas bessere Unterstützung für Bind-Parameter als Spaltenklauseln, entweder über bindparam() oder über literal(), d.h. select([literal('foo')])

    • [sql]

      MetaData kann über "url" oder "engine" kwargs an den Konstruktor gebunden werden oder durch Verwendung der connect()-Methode. BoundMetaData ist identisch mit MetaData, außer dass der Parameter engine_or_url erforderlich ist. DynamicMetaData ist dasselbe und bietet standardmäßig Thread-lokale Verbindungen.

    • [sql]

      exists() wird als eigenständige wählbare verwendet, nicht nur in einer WHERE-Klausel, d.h. exists([columns], criterion).select()

    • [sql]

      korrelierte Subqueries funktionieren innerhalb von ORDER BY, GROUP BY.

    • [sql]

      behoben: Funktionsausführung mit expliziten Verbindungen, d.h. conn.execute(func.dosomething())

    • [sql]

      das Flag use_labels auf select() erstellt keine Labels für Literal-Textspaltenelemente mehr automatisch, da wir keine Annahmen über den Text treffen können. Um Labels für Literal-Spalten zu erstellen, können Sie "somecol AS somelabel" sagen oder literal_column("somecol").label("somelabel") verwenden.

    • [sql]

      Die Anführungszeichen werden für Literal-Spalten nicht gesetzt, wenn sie in die Spaltensammlung für ihre wählbare "proxied" werden (is_literal-Flag wird weitergegeben). Literal-Spalten werden über literal_column("somestring") angegeben.

    • [sql]

      das boolesche Argument "fold_equivalents" wurde zu Join.select() hinzugefügt, das 'duplizierte' Spalten aus der resultierenden Spaltenklausel entfernt, die als äquivalent basierend auf der Join-Bedingung bekannt sind. Dies ist von großem Nutzen beim Konstruieren von Subqueries von Joins, über die sich Postgres beschwert, wenn doppelte Spaltennamen vorhanden sind.

    • [sql]

      das Flag use_alter auf ForeignKeyConstraint wurde korrigiert.

      Referenzen: #503

    • [sql]

      behoben: Verwendung von 2.4-nur "reversed" in topological.py

      Referenzen: #506

    • [sql]

      für Hacker wurde das "visitor"-System von ClauseElement und SchemaItem refaktoriert, so dass die Traversierung von Elementen durch den ClauseVisitor selbst gesteuert wird, mit der Methode visitor.traverse(item). accept_visitor()-Methoden können immer noch direkt aufgerufen werden, aber sie werden keine Traversierung von Kind-Elementen durchführen. ClauseElement/SchemaItem haben nun eine konfigurierbare get_children()-Methode, um die Sammlung von Kind-Elementen für jedes übergeordnete Objekt zurückzugeben. Dies ermöglicht eine klare und eindeutige Traversierung von Elementen (sowie Protokollierung) mit einer einfachen Methode zur Begrenzung einer Traversierung (einfach Flags übergeben, die von den entsprechenden get_children()-Methoden abgefangen werden).

      Referenzen: #501

    • [sql]

      der Parameter "else_" für die case-Anweisung funktioniert nun ordnungsgemäß, wenn er auf Null gesetzt ist.

    extensions

    • [extensions]

      die options()-Methode auf SelectResults wurde nun "generativ" implementiert, wie der Rest der SelectResults-Methoden. Aber Sie werden sowieso nur noch Query verwenden.

      Referenzen: #472

    • [extensions]

      die query()-Methode wird von assignmapper hinzugefügt. dies hilft bei der Navigation zu allen neuen generativen Methoden auf Query.

    mysql

    • [mysql]

      ein Catchall **kwargs zu MSString hinzugefügt, um die Reflexion obskurer Typen zu unterstützen (wie "varchar() binary" in MS 4.0).

    • [mysql]

      expliziter MSTimeStamp-Typ hinzugefügt, der wirksam wird, wenn types.TIMESTAMP verwendet wird.

    oracle

    • [oracle]

      binärdaten für jede Eingabegröße funktionsfähig gemacht! cx_oracle funktioniert gut, es lag an mir, da BINARY statt BLOB für setinputsizes übergeben wurde (auch die Unit-Tests haben keine Input-Größen gesetzt).

    • [oracle]

      auch CLOB Lese-/Schreibvorgänge in einem separaten ChangeSet korrigiert.

    • [oracle]

      auto_setinputsizes ist standardmäßig True für Oracle, korrigierte Fälle, in denen es falsche Typen weitergab.

    misc

    • [ms-sql]

      Sekunden-Input bei DATE-Spaltentypen entfernt (wahrscheinlich

      sollte die Zeit ganz entfernt werden)

    • [ms-sql]

      Nullwerte in Float-Feldern lösen keine Fehler mehr aus.

    • [ms-sql]

      LIMIT mit OFFSET löst nun einen Fehler aus (MS-SQL hat keine OFFSET-Unterstützung).

    • [ms-sql]

      eine Einrichtung hinzugefügt, um VARCHAR(max) vom MSSQL-Typ anstelle von TEXT für große unspezifizierte String-Felder zu verwenden. Verwenden Sie "text_as_varchar", um es zu aktivieren.

      Referenzen: #509

    • [ms-sql]

      ORDER BY-Klauseln ohne LIMIT werden nun in Subqueries gestrichen, da MS-SQL diese Verwendung verbietet.

    • [ms-sql]

      Bereinigung des Modul-Import-Codes; spezifizierbares DB-API-Modul; explizitere Reihenfolge der Modulpräferenzen.

      Referenzen: #480

    0.3.5

    Veröffentlicht: Do. 22. Februar 2007

    orm

    • [orm] [bugs]

      eine weitere Refaktorisierung der Beziehungsberechnung. Ermöglicht genaueres ORM-Verhalten bei Beziehungen von/zu/zwischen Mappern, insbesondere polymorphen Mappern, sowie deren Verwendung mit Query, SelectResults. Tickets beinhalten,.

      Referenzen: #439, #441, #448

    • [orm] [bugs]

      die veraltete Methode zur Angabe benutzerdefinierter Sammlungen in Klassen wurde entfernt; Sie müssen jetzt die Option "collection_class" verwenden. Der alte Weg begann, Konflikte zu erzeugen, wenn Leute assign_mapper() verwendeten, das jetzt eine "options"-Methode patcht, in Verbindung mit einer Beziehung namens "options". (Beziehungen haben Vorrang vor monkey-patched assign_mapper-Methoden).

    • [orm] [bugs]

      extension() Query-Option wird an die Mapper._instance()-Methode weitergegeben, so dass alle ladebezogenen Methoden aufgerufen werden.

      Referenzen: #454

    • [orm] [bugs]

      Eine Eager-Beziehung zu einem erbenden Mapper schlägt nicht fehl, wenn keine Zeilen für die Beziehung zurückgegeben werden.

    • [orm] [bugs]

      Eager-Beziehungs-Ladefehler behoben für Eager-Beziehung auf mehreren Nachkommenklassen.

      Referenzen: #486

    • [orm] [bugs]

      Korrektur für sehr große topologische Sortierungen, dank ants.aasma at gmail.

      Referenzen: #423

    • [orm] [bugs]

      Eager Loading ist etwas strenger bei der Erkennung von "selbst-referenziellen" Beziehungen, insbesondere zwischen polymorphen Mappern. Dies führt zu einem "eager degrade" zu Lazy Loading.

    • [orm] [bugs]

      verbesserte Unterstützung für komplexe Abfragen, die in "where"-Kriterien für query.select() eingebettet sind.

      Referenzen: #449

    • [orm] [bugs]

      Mapper-Optionen wie eagerload(), lazyload(), deferred() funktionieren für "synonym()"-Beziehungen.

      Referenzen: #485

    • [orm] [bugs]

      behobener Fehler, bei dem Cascade-Operationen fälschlicherweise gelöschte Sammlungsitems in die Cascade einbezogen.

      Referenzen: #445

    • [orm] [bugs]

      Beziehungs-Löschfehler behoben, wenn ein Kind-Item einer Eins-zu-viele-Beziehung in einem einzigen Arbeitsgang zu einem neuen Elternteil verschoben wird.

      Referenzen: #478

    • [orm] [bugs]

      Beziehungs-Löschfehler behoben, bei dem Eltern/Kind mit einer einzelnen Spalte als PK/FK am Kind einen "blank out the primary key"-Fehler auslöste, wenn es manuell gelöscht wurde oder eine "delete"-Cascade ohne "delete-orphan" verwendet wurde.

    • [orm] [bugs]

      Korrektur für Deferred, so dass der Ladevorgang nicht fälschlicherweise erfolgt, wenn nur PK-Spaltenattribute gesetzt sind.

    • [orm] [enhancements]

      implementiert `foreign_keys`-Argument für `mapper`. Verwendung in Verbindung mit `primaryjoin`/`secondaryjoin`-Argumenten zur Angabe/Überschreibung von Fremdschlüsseln, die auf der `Table`-Instanz definiert sind.

      Referenzen: #385

    • [orm] [verbesserungen]

      `contains_eager('foo')` impliziert automatisch `eagerload('foo')`

    • [orm] [verbesserungen]

      hinzugefügtes Argument "alias" zu `contains_eager()`. Verwenden Sie es, um den String-Namen oder die `Alias`-Instanz eines Alias anzugeben, der in der Abfrage für die eager geladenen Kindelemente verwendet wird. Einfacher zu verwenden als "decorator"

    • [orm] [verbesserungen]

      hinzugefügte Option `contains_alias()` für die Zuordnung von Ergebnismengen zu einem Alias der zugeordneten Tabelle

    • [orm] [verbesserungen]

      hinzugefügter Support für py2.5 "with"-Anweisung mit `SessionTransaction`

      Referenzen: #468

    sql

    • [sql]

      der Wert von "case_sensitive" ist jetzt standardmäßig True, unabhängig von der Groß-/Kleinschreibung des Bezeichners, es sei denn, er ist explizit auf False gesetzt. Dies liegt daran, dass das Objekt möglicherweise als etwas anderes mit gemischter Groß-/Kleinschreibung bezeichnet wird und die Weitergabe von "case_sensitive=False" dies bricht. Andere Korrekturen beim Quoting bei Verwendung von Labels und "Fake"-Spaltenobjekten

    • [sql]

      hinzugefügte Methode `supports_execution()` zu `ClauseElement`, damit einzelne Klauselarten ausdrücken können, ob sie für die Ausführung geeignet sind... wie z.B. kann eine "select"-Klausel ausgeführt werden, aber keine "Table" oder "Join".

    • [sql]

      behobene Übergabe von Argumenten an direkte textuelle `execute()` auf `engine`, `connection`. kann `*args` oder eine Listeninstanz für Positionsargumente, `**kwargs` oder eine Dictionary-Instanz für benannte Argumente oder eine Liste von Listen oder Dictionaries verarbeiten, um `executemany()` aufzurufen

    • [sql]

      kleine Korrektur an `BoundMetaData`, um Unicode- oder String-URLs zu akzeptieren

    • [sql]

      behobene Generierung benannter `PrimaryKeyConstraint` mit freundlicher Genehmigung von andrija at gmail

      Referenzen: #466

    • [sql]

      behobene Generierung von `CHECK`-Constraints für Spalten

      Referenzen: #464

    • [sql]

      Korrekturen für die `tometa()`-Operation zur Weitergabe von Constraints auf Spalten- und Tabellenebene

    extensions

    • [extensions]

      hinzugefügte `distinct()`-Methode zu `SelectResults`. Macht im Allgemeinen nur einen Unterschied bei der Verwendung von `count()`.

    • [extensions]

      hinzugefügte `options()`-Methode zu `SelectResults`, äquivalent zu `query.options()`

      Referenzen: #472

    • [extensions]

      optionales Dictionary `__table_opts__` zu `ActiveMapper` hinzugefügt, sendet `kw`-Optionen an `Table`-Objekte

      Referenzen: #462

    • [extensions]

      hinzugefügte `selectfirst()`, `selectfirst_by()` zu `assign_mapper`

      Referenzen: #467

    mysql

    • [mysql]

      Korrektur bei der Reflexion auf älteren DBs, die `array()`-Typ für "show variables like"-Anweisungen zurückgeben könnten

    mssql

    • [mssql]

      vorläufige Unterstützung für pyodbc (Juhu!)

      Referenzen: #419

    • [mssql]

      bessere Unterstützung für NVARCHAR-Typen hinzugefügt

      Referenzen: #298

    • [mssql]

      Korrektur für Commit-Logik bei pymssql

    • [mssql]

      Korrektur für `query.get()` mit Schema

      Referenzen: #456

    • [mssql]

      Korrektur für nicht-ganzzahlige Beziehungen

      Referenzen: #473

    • [mssql]

      DB-API-Modul ist jetzt zur Laufzeit wählbar

      Referenzen: #419

    • [mssql] [415] [481] [tickets:422]

      besteht jetzt viele weitere Unit-Tests

    • [mssql]

      bessere Kompatibilität von Unit-Tests mit ANSI-Funktionen

      Referenzen: #479

    • [mssql]

      verbesserte Unterstützung für implizite Sequenz-PK-Spalten mit Auto-Insert

      Referenzen: #415

    • [mssql]

      Korrektur für leeres Passwort in adodbapi

      Referenzen: #371

    • [mssql]

      Korrekturen, damit Unit-Tests mit pyodbc funktionieren

      Referenzen: #481

    • [mssql]

      Korrektur für `auto_identity_insert` bei DB-URL-Abfragen

    • [mssql]

      hinzugefügte `query_timeout` zu den DB-URL-Abfrageparametern. Funktioniert derzeit nur für pymssql

    • [mssql]

      getestet mit pymssql 0.8.0 (das jetzt LGPL ist)

    oracle

    • [oracle]

      Wenn "rowid" als ORDER BY-Spalte zurückgegeben wird oder in Verbindung mit ROW_NUMBER OVER verwendet wird, prüft der Oracle-Dialekt die auswählbare Klausel, auf die es angewendet wird, und wechselt zur Tabellen-PK, wenn sie nicht anwendbar ist, d.h. für ein UNION. Die Prüfung auf DISTINCT, GROUP BY (andere Stellen, an denen rowid ungültig ist) ist weiterhin ein TODO. Ermöglicht das Funktionieren von polymorphen Zuordnungen.

      Referenzen: #436

    • [oracle]

      Sequenzen für eine Nicht-PK-Spalte werden bei INSERT korrekt ausgelöst

    • [oracle]

      hinzugefügte `PrefetchingResultProxy`-Unterstützung zum Vorabrufen von LOB-Spalten, wenn bekannt ist, dass sie vorhanden sind, Korrekturen

      Referenzen: #435

    • [oracle]

      implementierte Reflexion von Tabellen basierend auf Synonymen, einschließlich über dblinks hinweg

      Referenzen: #379

    • [oracle]

      gibt eine Protokollwarnung aus, wenn eine zugehörige Tabelle aufgrund bestimmter Berechtigungsprobleme nicht reflektiert werden kann

      Referenzen: #363

    misc

    • [postgres]

      bessere Reflexion von Sequenzen für `Table`s mit alternativen Schemata

      Referenzen: #442

    • [postgres]

      Sequenzen für eine Nicht-PK-Spalte werden bei INSERT korrekt ausgelöst

    • [postgres]

      hinzugefügte `PGInterval`-Typ, `PGInet`-Typ

      Referenzen: #444, #460

    0.3.4

    Veröffentlicht: Di, 23. Jan 2007

    general

    • [general]

      globale Änderung von "insure" zu "ensure". Im US-Englischen sind "insure" und "ensure" weitgehend austauschbar (laut Wörterbuch), also bin ich nicht völlig analphabetisch, aber "ensure" ist definitiv weniger mehrdeutig.

    orm

    • [orm]

      das erste Loch in die Büchse der Pandora gestoßen: wenn `query.select_by(somerelationname=someinstance)` verwendet wird, wird der Join der Primärschlüsselspalten, die vom Mapper von "somerelationname" repräsentiert werden, mit dem tatsächlichen Primärschlüssel in "someinstance" erstellt.

    • [orm]

      überarbeitet, wie Beziehungen mit "polymorphen" Mappern interagieren, d.h. Mapper, die eine `select_table` sowie polymorphe Flags haben. Bessere Bestimmung der richtigen Join-Bedingungen, Interaktion mit benutzerdefinierten Join-Bedingungen und Unterstützung für selbstbezügliche polymorphe Mapper.

    • [orm]

      bezüglich der Beziehungen der polymorphen Abbildung, einige tiefere Fehlerprüfungen bei der Kompilierung von Beziehungen, um einen mehrdeutigen "primaryjoin" zu erkennen, falls beide Seiten der Beziehung Fremdschlüsselreferenzen in der primaryjoin-Bedingung haben. Außerdem wurden die Bedingungen zur Ermittlung der "relation direction" verschärft, wobei der "foreignkey" der Beziehung mit dem "primaryjoin" verknüpft wird.

    • [orm]

      Eine kleine Verbesserung am Konzept einer "konkreten" Vererbungsmabbildung, obwohl dieses Konzept noch nicht gut ausgearbeitet ist (Testfall hinzugefügt, um konkrete Mapper auf einem polymorphen Basisobjekt zu unterstützen).

    • [orm]

      Korrektur für das Verhalten von `proxy=True` bei `synonym()`

    • [orm]

      behobener Fehler, bei dem delete-orphan bei vielen-zu-vielen-Beziehungen im Grunde nicht funktionierte, das Vorhandensein von backref verbarg im Allgemeinen das Symptom

      Referenzen: #427

    • [orm]

      Mutex zum Mapper-Kompilierungsschritt hinzugefügt. Ich war zögerlich, irgendwelche Threading-Elemente zu SA hinzuzufügen, aber dies ist ein Bereich, in dem es wirklich benötigt wird, da Mapper typischerweise "global" sind und obwohl ihr Zustand während des normalen Betriebs nicht geändert wird, ändert dieser anfängliche Kompilierungsschritt den internen Zustand erheblich und dieser Schritt tritt normalerweise nicht zum Zeitpunkt der Modulinitialisierung auf (es sei denn, Sie rufen `compile()` auf), sondern zum Zeitpunkt der ersten Anfrage.

    • [orm]

      grundlegende Idee von "session.merge()" tatsächlich implementiert. Benötigt weitere Tests.

    • [orm]

      hinzugefügte Funktion `compile_mappers()` als Abkürzung zum Kompilieren aller Mapper

    • [orm]

      Korrektur für `MapperExtension.create_instance`, damit `entity_name` korrekt mit der neuen Instanz verknüpft wird

    • [orm]

      Geschwindigkeitsverbesserungen bei der Instanziierung von ORM-Objekten, Eager-Loading von Zeilen

    • [orm]

      ungültige Optionen, die an den String 'cascade' übergeben werden, lösen eine Ausnahme aus

      Referenzen: #406

    • [orm]

      behobener Fehler bei `mapper refresh/expire`, bei dem Eager-Loader die Elementlisten nicht ordnungsgemäß wieder auffüllten

      Referenzen: #407

    • [orm]

      Korrektur für `post_update`, um sicherzustellen, dass Zeilen auch für Nicht-Insert/Delete-Szenarien aktualisiert werden

      Referenzen: #413

    • [orm]

      eine Fehlermeldung hinzugefügt, wenn versucht wird, Primärschlüsselwerte einer Entität zu ändern und diese dann zu flushen

      Referenzen: #412

    sql

    • [sql]

      hinzugefügte `fetchmany()`-Unterstützung für `ResultProxy`

    • [sql]

      hinzugefügte Unterstützung für das Spaltenattribut "key" zur Verwendung in `row[]`/`row.`

    • [sql]

      geändert, dass `BooleanExpression` von `BinaryExpression` erbt, damit boolesche Ausdrücke auch Spalten-Klausel-Verhalten folgen können (d.h. `label()`, etc.).

    • [sql]

      nachgestellte Unterstriche werden bei `func.`-Aufrufen (wie `func.if_()`) gekürzt

    • [sql]

      Korrektur für die Korrelation von Subqueries, wenn die Spaltenliste der SELECT-Anweisung mit einzelnen Aufrufen von `append_column()` konstruiert wird; dies behebt einen ORM-Fehler, bei dem verschachtelte SELECT-Anweisungen nicht mit der Haupt-SELECT korreliert wurden, die vom Query-Objekt generiert wurde.

    • [sql]

      weitere Korrektur für die Subquery-Korrelation, so dass eine Subquery mit nur einem FROM-Element dieses einzelne Element *nicht* korreliert, da mindestens ein FROM-Element in einer Abfrage erforderlich ist.

    • [sql]

      Die Standardeinstellung "timezone" ist jetzt False. Dies entspricht dem Verhalten von Python `datetime` sowie den `timestamp`/`time`-Typen von Postgres (was derzeit der einzige zeitzonenempfindliche Dialekt ist)

      Referenzen: #414

    • [sql]

      Die Funktion "op()" wird jetzt als "Operation" behandelt, anstatt als "Vergleich". Der Unterschied besteht darin, dass eine Operation einen `BinaryExpression` erzeugt, von dem weitere Operationen ausgehen können, während ein Vergleich den restriktiveren `BooleanExpression` erzeugt.

    • [sql]

      Der Versuch, eine reflektierte Primärschlüsselspalte als Nicht-Primärschlüssel neu zu definieren, löst einen Fehler aus

    • [sql]

      Das Typsystem wurde leicht modifiziert, um `TypeDecorators` zu unterstützen, die vom Dialekt überschrieben werden können (ok, das ist nicht sehr klar, es ermöglicht die untenstehende mssql-Anpassung).

    extensions

    • [extensions]

      hinzugefügtes Argument `validate=False` zu `assign_mapper`, wenn True, wird sichergestellt, dass nur zugeordnete Attribute benannt sind

      Referenzen: #426

    • [extensions]

      `assign_mapper` erhält die Funktionen `options` und `instances` (d.h. `MyClass.instances()`).

    mysql

    • [mysql]

      MySQL ist inkonsistent in Bezug auf die Art der Anführungszeichen, die es in Fremdschlüsseln während eines `SHOW CREATE TABLE` verwendet, die Reflexion wurde aktualisiert, um alle drei Stile zu berücksichtigen

      Referenzen: #420

    • [mysql]

      MySQL `Table`-Erstellungsoptionen funktionieren jetzt über einen generischen Passthrough, d.h. `Table(..., mysql_engine='InnoDB', mysql_collate="latin1_german2_ci", mysql_auto_increment="5", mysql_<somearg>...)`, hilft.

      Referenzen: #418

    mssql

    • [mssql]

      hinzugefügt wurde ein `NVarchar`-Typ (produziert `NVARCHAR`), sowie `MSUnicode`, das Unicode-Übersetzung für `NVarchar` unabhängig von der `convert_unicode`-Einstellung des Dialekts bietet.

    oracle

    • [oracle]

      leichte Unterstützung für Binärdaten, aber es muss noch geklärt werden, wie vernünftigerweise große Werte (über 4K) eingefügt werden. Erfordert `auto_setinputsizes=True` für `create_engine()`, Zeilen müssen einzeln vollständig abgerufen werden, etc.

    misc

    • [postgres]

      Korrektur für die anfängliche Prüfung von Tabellen, um das aktuelle Schema zu berücksichtigen

      Referenzen: #424

    • [postgres]

      Postgres hat ein optionales Flag `server_side_cursors=True`, das serverseitige Cursor verwendet. Diese eignen sich zum Abrufen von nur teilweisen Ergebnissen und sind notwendig für die Arbeit mit sehr großen, unbegrenzten Ergebnismengen. Obwohl wir möchten, dass dies das Standardverhalten ist, scheinen verschiedene Umgebungen unterschiedliche Ergebnisse zu liefern und die Ursachen wurden nicht isoliert, daher lassen wir die Funktion vorerst deaktiviert. Verwendet ein anscheinend undokumentiertes Verhalten von psycopg2, das kürzlich in der psycopg-Mailingliste entdeckt wurde.

    • [postgres]

      hinzugefügte `BIGSERIAL`-Unterstützung für PostgreSQL-Tabellen mit `PGBigInteger`/`autoincrement`

    • [postgres]

      Korrekturen für die PostgreSQL-Reflexion, um die Behandlung von Schemanamen zu verbessern; Dank an jason (at) ncsmags.com

      Referenzen: #402

    • [firebird]

      Reihenfolge der Constraint-Erstellung setzt den Primärschlüssel vor alle anderen Constraints; erforderlich für Firebird, keine schlechte Idee für andere.

      Referenzen: #408

    • [firebird]

      Firebird-Korrektur für die automatische Ladung von mehrfeldigen Fremdschlüsseln

      Referenzen: #409

    • [firebird]

      Der Firebird `NUMERIC`-Typ behandelt einen Typ ohne Präzision ordnungsgemäß

      Referenzen: #409

    0.3.3

    Veröffentlicht: Fr, 15. Dez 2006
    • [no_tags]

      Zeichenketten-basierte FROM-Klauseln korrigiert, z.B. `select(..., from_obj=["sometext"])`

    • [no_tags]

      Korrekturen für das Flag `passive_deletes`, das Flag `lazy=None` (noload)

    • [no_tags]

      Beispiel/Dokumentation zum Umgang mit großen Sammlungen hinzugefügt

    • [no_tags]

      Methode `object_session()` zum SQLAlchemy-Namespace hinzugefügt

    • [no_tags]

      behobener `QueuePool`-Fehler, wodurch Verbindungen zu einer nicht erreichbaren Datenbank besser wiederhergestellt werden können (dank Sébastien Lelong), und die `dispose()`-Methode wurde ebenfalls korrigiert

    • [no_tags]

      Patch, der den MySQL `rowcount` korrekt funktionieren lässt!

      Referenzen: #396

    • [no_tags]

      Korrektur beim Abfangen von Fehlern 2006/2014 in MySQL, um die `OperationalError`-Ausnahme ordnungsgemäß erneut auszulösen

    0.3.2

    Veröffentlicht: So, 10. Dez 2006
    • [no_tags]

      großer Fehler im Verbindungspool behoben. behebt MySQL-Synchronisationsfehler, verhindert auch, dass Transaktionen in allen DBs versehentlich zurückgerollt werden

      Referenzen: #387

    • [no_tags]

      große Geschwindigkeitsverbesserungen im Vergleich zu 0.3.1, um die Geschwindigkeit wieder auf das Niveau von 0.2.8 zu bringen

    • [no_tags]

      Viele Debug-Protokollaufrufe wurden bedingt gemacht, die zeitaufwendig waren, um Protokollnachrichten zu generieren

    • [no_tags]

      behobener Fehler bei den Cascade-Regeln, bei denen der gesamte Objektgraph unnötigerweise bei der `save/update`-Cascade weitergegeben werden konnte

    • [no_tags]

      verschiedene Geschwindigkeitsverbesserungen im `attributes`-Modul

    • [no_tags]

      Die Identitätszuordnung in `Session` referenziert standardmäßig *nicht mehr schwach*. Um eine schwache Referenzierung zu haben, verwenden Sie `create_session(weak_identity_map=True)` Korrekturen

      Referenzen: #388

    • [no_tags]

      MySQL erkennt die Fehler 2006 (Server ist weg) und 2014 (Befehle nicht synchron) und macht die Verbindung, auf der sie aufgetreten sind, ungültig.

    • [no_tags]

      MySQL `bool`-Typ-Korrektur

      Referenzen: #307

    • [no_tags]

      Postgres-Reflexionskorrekturen

      Referenzen: #349, #382

    • [no_tags]

      Schlüsselwörter für EXCEPT, INTERSECT, EXCEPT ALL, INTERSECT ALL hinzugefügt

      Referenzen: #247

    • [no_tags]

      `assign_mapper` in der `assignmapper`-Erweiterung gibt den erstellten Mapper zurück

      Referenzen: #2110

    • [no_tags]

      hinzugefügte Funktion `label()` zur `Select`-Klasse, wenn `scalar=True` verwendet wird, um eine skalare Subquery zu erstellen, d.h. "select x, y, (select max(foo) from table) AS foomax from table"

    • [no_tags]

      hinzugefügte Schlüsselwörter `onupdate` und `ondelete` zu `ForeignKey`; werden an die zugrunde liegende `ForeignKeyConstraint` weitergegeben, falls vorhanden. (Werden jedoch nicht in die andere Richtung weitergegeben)

    • [no_tags]

      Korrektur für `session.update()`, um den "dirty"-Status des eingehenden Objekts beizubehalten

    • [no_tags]

      Das Übergeben eines auswählbaren Elements an ein IN über die `in_()`-Funktion erstellt keine "union" mehr aus mehreren SELECTs; nur ein auswählbares Element für die `in_()`-Funktion ist jetzt erlaubt (erstellen Sie selbst eine union, wenn eine union benötigt wird)

    • [no_tags]

      verbesserte Unterstützung für das Deaktivieren der `save-update`-Cascade über `cascade="none"` etc.

    • [no_tags]

      hinzugefügtes Argument `remote_side` zu `relation()`, das nur bei selbstbezüglichen Mappern verwendet wird, um die Richtung der Eltern/Kind-Beziehung zu erzwingen. Ersetzt die Verwendung des "foreignkey"-Parameters zum "Umschalten" der Richtung. Das Argument "foreignkey" ist für alle Verwendungen veraltet und wird schließlich durch ein Argument ersetzt, das der `ForeignKey`-Spezifikation auf Mappern gewidmet ist.

    0.3.1

    Veröffentlicht: Mo, 13. Nov 2006

    orm

    • [orm]

      Die "delete"-Cascade lädt alle Kindobjekte, falls sie noch nicht geladen waren. Dies kann (d.h. das alte Verhalten) deaktiviert werden, indem `passive_deletes=True` auf einer `relation()` gesetzt wird.

    • [orm]

      Anpassungen an der überarbeiteten Eager-Query-Generierung, um bei zirkulären Eager-geladenen Beziehungen (wie Backrefs) nicht zu fehlschlagen

    • [orm]

      behobener Fehler, bei dem die Option `eagerload()` (noch `lazyload()`) der `Query` nicht ordnungsgemäß mitteilte, ob "Verschachtelung" bei der Erzeugung einer LIMIT-Abfrage verwendet werden soll oder nicht.

    • [orm]

      behobener Fehler bei der Sortierung zirkulärer Abhängigkeiten beim Flush; wenn Objekt A eine zirkuläre Many-to-One-Beziehung zu Objekt B enthielt und Objekt B gerade an Objekt A angehängt war, *aber* Objekt B selbst nicht geändert wurde, erfolgte keine Synchronisierung der Many-to-One-Beziehung von Bs Primärschlüsselattribut zum A-Fremdschlüsselattribut.

      Referenzen: #360

    • [orm]

      implementiertes `from_obj`-Argument für `query.count`, verbessert die `count`-Funktion für `selectresults`

      Referenzen: #325

    • [orm]

      eine Assertion im "cascade"-Schritt von ORM-Beziehungen hinzugefügt, um zu prüfen, ob die Klasse des an ein Elternobjekt angehängten Objekts geeignet ist (d.h. wenn A.items B-Objekte speichert, wird ein Fehler ausgelöst, wenn ein C an A.items angehängt wird)

    • [orm]

      neue Erweiterung `sqlalchemy.ext.associationproxy`, bietet transparente "Association Object"-Zuordnungen. Ein neues Beispiel `examples/association/proxied_association.py` illustriert dies.

    • [orm]

      Verbesserung der Single-Table-Inheritance, um vollständige Hierarchien unterhalb der Zielklasse zu laden

    • [orm]

      Korrektur für eine subtile Bedingung in der topologischen Sortierung, bei der ein Knoten zweimal erscheinen konnte, für

      Referenzen: #362

    • [orm]

      weitere Überarbeitung der topologischen Sortierung, Refactoring, für

      Referenzen: #365

    • [orm]

      „delete-orphan“ für einen bestimmten Typ kann auf mehr als eine Elternklasse gesetzt werden; die Instanz ist ein „Waisenkind“, wenn sie nicht an *eine* dieser Eltern angehängt ist

    Diverse

    • [engine/pool]

      einige neue Pool-Hilfsklassen, aktualisierte Dokumentation

    • [engine/pool]

      „use_threadlocal“ bei Pool ist standardmäßig False (wie bei create_engine)

    • [engine/pool]

      direkte Ausführung von Compiled-Objekten behoben

    • [engine/pool]

      create_engine() wurde überarbeitet, um strenge Anforderungen an eingehende **kwargs zu stellen. Alle Schlüsselwortargumente müssen von einem der Konstruktoren für Dialekt, Connection Pool und Engine verbraucht werden, andernfalls wird ein TypeError ausgelöst, der die vollständige Liste der ungültigen kwargs im Verhältnis zur ausgewählten Dialekt-/Pool-/Engine-Konfiguration beschreibt.

    • [databases/types]

      MySQL fängt Ausnahme bei „describe“ ab und meldet sie als NoSuchTableError

    • [databases/types]

      weitere Korrekturen an SQLite-Booleschen Werten, die nicht als Standardwerte funktionierten

    • [databases/types]

      Korrektur für PostgreSQL-Sequenz-Quoting bei Verwendung von Schemas

    0.3.0

    Veröffentlicht: So 22. Okt 2006

    Allgemein

    • [general]

      Logging wird jetzt über das Standard-Python-Modul „logging“ implementiert. Die Schlüsselwortparameter „echo“ sind weiterhin funktionsfähig, setzen aber Log-Level für die jeweiligen Klassen/Instanzen. Jegliches Logging kann direkt über die Python-API gesteuert werden, indem INFO- und DEBUG-Level für Logger im Namensraum „sqlalchemy“ gesetzt werden. Klassen-Logging befindet sich unter „sqlalchemy.<modul>.<klassenname>“, Instanz-Logging unter „sqlalchemy.<modul>.<klassenname>.0x..<00-FF>“. Die Testsuite enthält die Argumente „–log-info“ und „–log-debug“, die unabhängig von –verbose/–quiet funktionieren. Logging wurde zum ORM hinzugefügt, um die Konfiguration von Mappern und die Zeileniteration zu verfolgen.

    • [general]

      Das System zur Dokumentationsgenerierung wurde grundlegend überarbeitet, um es einfacher zu gestalten und stärker in Markdown zu integrieren

    orm

    • [orm]

      Die Attributverfolgung wurde modifiziert, um Änderungen intelligenter zu erkennen, insbesondere bei veränderlichen Typen. TypeEngine-Objekte spielen nun eine größere Rolle bei der Definition, wie zwei skalare Instanzen verglichen werden sollen, einschließlich der Hinzufügung eines MutableType-Mixins, der von PickleType implementiert wird. Die Unit-of-Work verfolgt nun die „dirty“-Liste als Ausdruck aller persistenten Objekte, bei denen der Attributmanager Änderungen erkennt. Das grundlegende behobene Problem ist die Erkennung von Änderungen an PickleType-Objekten, aber es werden auch allgemeiner Typbehandlung und die Überprüfung „modifizierter“ Objekte vollständiger und erweiterbarer gemacht.

    • [orm]

      eine breite Refaktorierung der Architekturen „attribute loader“ und „options“. ColumnProperty und PropertyLoader definieren ihr Ladeverhalten durch umschaltbare „Strategien“, und MapperOptions verwenden nicht mehr das Kopieren von Mapper/Property, um zu funktionieren; stattdessen werden sie zur Abfrage-/Instanzzeit über QueryContext- und SelectionContext-Objekte weitergegeben. Das gesamte interne Kopieren von Mappern und Properties, das zur Handhabung von Vererbung sowie von options() verwendet wurde, wurde entfernt; die Struktur von Mappern und Properties ist nun viel einfacher und im neuen Modul „interfaces“ klar dargestellt.

    • [orm]

      im Zusammenhang mit der Überarbeitung von Mapper/Property, interne Refaktorierung der Methode „mapper.instances()“ zur Verwendung eines SelectionContext-Objekts zur Verfolgung des Zustands während des Vorgangs. LEICHTE API-ÄNDERUNG: Die Methoden „append_result()“ und „populate_instances()“ von MapperExtension haben aufgrund der Änderung nun eine leicht andere Methodensignatur; wir hoffen, dass diese Methoden noch nicht weit verbreitet sind.

    • [orm]

      Die Methode „instances()“ wurde nun zu Query verschoben; eine abwärtskompatible Version verbleibt auf Mapper.

    • [orm]

      enthält „contains_eager()“ MapperOption, die in Verbindung mit „instances()“ verwendet wird, um Eigenschaften anzugeben, die aus dem Ergebnissatz eager geladen werden sollen, standardmäßig unter Verwendung ihrer reinen Spaltennamen oder übersetzt durch eine benutzerdefinierte Zeilenübersetzungsfunktion.

    • [orm]

      weitere Umgestaltungen des Unit-of-Work-Commit-Schemas, um Abhängigkeiten innerhalb zirkulärer Flushes besser zu ermöglichen…aktualisierte Implementierung der Aufgabenverfolgung/Protokollierung

    • [orm]

      polymorphe Mapper (d.h. unter Verwendung von Vererbung) erzeugen nun INSERT-Anweisungen in der Reihenfolge der Tabellen über alle vererbten Klassen hinweg

      Referenzen: #321

    • [orm]

      eine automatische „Zeilenwechsel“-Funktion zum Mapping hinzugefügt, die ein ausstehendes Instanz-/gelöschtes Instanzpaar mit demselben Identitätsschlüssel erkennt und den INSERT/DELETE in ein einziges UPDATE umwandelt

    • [orm]

      „association“-Mappings vereinfacht, um die automatische „Zeilenwechsel“-Funktion zu nutzen

    • [orm]

      „custom list classes“ werden jetzt über das Schlüsselwortargument „collection_class“ bei relation() implementiert. Der alte Weg funktioniert immer noch, ist aber veraltet

      Referenzen: #212

    • [orm]

      ein Flag „viewonly“ zu relation() hinzugefügt, das die Konstruktion von Relationen ermöglicht, die keine Auswirkungen auf den flush()-Prozess haben.

    • [orm]

      ein Argument „lockmode“ zu den Basis-Query-Funktionen select/get hinzugefügt, einschließlich der Funktion „with_lockmode“ zur Erlangung einer Query-Kopie mit einem Standard-Sperrmodus. „read“-/„update“-Argumente werden auf der Selektionsseite in ein „for_update“-Argument übersetzt.

      Referenzen: #292

    • [orm]

      Implementierung der „Version Check“-Logik in Query/Mapper, die verwendet wird, wenn version_id_col aktiv ist und query.with_lockmode() zum Abrufen einer bereits geladenen Instanz verwendet wird

    • [orm]

      Die Verhalten von post_update wurde verbessert; es tut besser, nicht zu viele Zeilen zu aktualisieren, und aktualisiert nur die erforderlichen Spalten

      Referenzen: #208

    • [orm]

      Anpassungen an der Eager-Ladung, damit ihre „Eager-Kette“ getrennt von der normalen Mapper-Einrichtung gehalten wird, wodurch Konflikte mit dem Lazy-Loader-Betrieb verhindert werden, Korrekturen

      Referenzen: #308

    • [orm]

      Korrektur der Deferred-Group-Ladung

    • [orm]

      session.flush() schließt keine Verbindung, die sie geöffnet hat

      Referenzen: #346

    • [orm]

      ein Flag „batch=True“ zum Mapper hinzugefügt; wenn False, speichert save_obj ein Objekt nach dem anderen vollständig, einschließlich Aufrufen von before_XXXX und after_XXXX

    • [orm]

      ein Argument „column_prefix=None“ zum Mapper hinzugefügt; stellt dem angegebenen String (typischerweise ‚_‘) Spalten-basierte Attribute vor, die automatisch aus der Tabelle des Mappers eingerichtet werden

    • [orm]

      die Angabe von Joins im from_obj-Argument von query.select() ersetzt die Haupttabelle der Abfrage, wenn die Tabelle irgendwo innerhalb des gegebenen from_obj liegt. dies macht es möglich, benutzerdefinierte Joins und Outerjoins in Abfragen zu erstellen, ohne dass die Haupttabelle doppelt hinzugefügt wird.

      Referenzen: #315

    • [orm]

      Eagerloading wurde angepasst, um seine LEFT OUTER JOINs bedachter an die gegebene Abfrage anzuhängen und nach benutzerdefinierten „FROM“-Klauseln zu suchen, die möglicherweise bereits eingerichtet wurden.

    • [orm]

      die transformativen Methoden join_to und outerjoin_to wurden zu SelectResults hinzugefügt, um Join/Outerjoin-Bedingungen basierend auf Eigenschaftsnamen zu erstellen. außerdem wurde select_from hinzugefügt, um den from_obj-Parameter explizit festzulegen.

    • [orm]

      das Flag „is_primary“ wurde aus dem Mapper entfernt.

    sql

    • [sql] [construction]

      Der Parameter „for_update“ wurde geändert, um False/True/„nowait“ und „read“ zu akzeptieren, wobei die beiden letzteren nur von Oracle und MySQL interpretiert werden

      Referenzen: #292

    • [sql] [construction]

      die Funktion extract() wurde zum SQL-Dialekt hinzugefügt (SELECT extract(field FROM expr))

    • [sql] [construction]

      BooleanExpression enthält ein neues Argument „negate“, um den entsprechenden Negationsoperator anzugeben, falls einer verfügbar ist.

    • [sql] [construction]

      Das Aufrufen einer Negation für eine „IN“- oder „IS“-Klausel führt zu „NOT IN“, „IS NOT“ (im Gegensatz zu NOT (x IN y)).

    • [sql] [construction]

      Funktionsobjekte wissen nun, was sie in einer FROM-Klausel tun sollen. Ihr Verhalten sollte dasselbe sein, außer dass Sie jetzt Dinge wie select([‚*‘], from_obj=[func.my_function()]) tun können, um mehrere Spalten aus dem Ergebnis zu erhalten, oder sogar sql.column()-Konstrukte verwenden können, um die Rückgabespalten zu benennen

      Referenzen: #172

    schema

    • [schema]

      eine ganze Menge Bereinigung im Schema-Paket, Entfernung mehrdeutiger Methoden, Methoden, die nicht mehr benötigt werden. etwas eingeschränktere Nutzung, größere Betonung auf Explizitheit

    • [schema]

      Das Attribut „primary_key“ von Table und anderen wählbaren Objekten wird zu einem mengenähnlichen ColumnCollection-Objekt; es ist geordnet, aber nicht numerisch indiziert. Eine Vergleichsklausel zwischen zwei PKs, die aus denselben zugrundeliegenden Tabellen abgeleitet sind (d.h. wie zwei Alias-Objekte), kann über table1.primary_key==table2.primary_key generiert werden

    • [schema]

      ForeignKey(Constraint) unterstützt „use_alter=True“, um einen Fremdschlüssel über ALTER zu erstellen/löschen. dies ermöglicht die Einrichtung zirkulärer Fremdschlüsselbeziehungen.

    • [schema]

      append_item()-Methoden wurden aus Table und Column entfernt; Konstruktion von Table/Column/verwandten Objekten inline wird bevorzugt, aber falls erforderlich, verwenden Sie append_column(), append_foreign_key(), append_constraint() usw.

    • [schema]

      table.create() gibt das Table-Objekt nicht mehr zurück, sondern hat keinen Rückgabewert. Der übliche Fall ist, dass Tabellen über Metadaten erstellt werden, was vorzuziehen ist, da dies Tabellenabhängigkeiten handhabt.

    • [schema]

      UniqueConstraint (auf Tabellenebene), CheckConstraint (auf Tabellen- oder Spaltenebene) hinzugefügt.

    • [schema]

      index=False/unique=True auf Column erstellt jetzt eine UniqueConstraint, index=True/unique=False erstellt einen einfachen Index, index=True/unique=True auf Column erstellt einen eindeutigen Index. ‚index‘ und ‚unique‘ Schlüsselwortargumente für Spalten sind jetzt nur noch boolesch; für explizite Namen und Gruppierungen von Indizes oder eindeutigen Einschränkungen verwenden Sie explizit die Konstrukte UniqueConstraint/Index.

    • [schema]

      autoincrement=True zu Column hinzugefügt; deaktiviert die Schema-Generierung von SERIAL/AUTO_INCREMENT/identity seq für PostgreSQL/MySQL/MSSQL, wenn es explizit auf False gesetzt ist

    • [schema]

      TypeEngine-Objekte haben jetzt Methoden zum Kopieren und Vergleichen von Werten ihres spezifischen Typs. Derzeit vom ORM verwendet, siehe unten.

    • [schema]

      behobene Bedingung, die bei der Reflexion auftrat, wenn eine primäre Schlüsselspalte explizit überschrieben wurde, wobei die PrimaryKeyConstraint sowohl die reflektierte als auch die programmatische Spalte verdoppelt erhielt

    • [schema]

      Das Attribut „foreign_key“ auf Column und ColumnElement im Allgemeinen ist veraltet und wird durch das listen-/mengenbasierten Attribut „foreign_keys“ ersetzt, das mehrere Fremdschlüssel pro Spalte berücksichtigt. „foreign_key“ gibt das erste Element in der Liste/dem Set „foreign_keys“ oder None zurück, wenn die Liste leer ist.

    sqlite

    • [sqlite]

      Der SQLite-Boolesche Datentyp konvertiert False/True standardmäßig in 0/1

    • [sqlite]

      Korrekturen an den Typen Date/Time (SLDate/SLTime); funktioniert jetzt genauso gut wie bei PostgreSQL

      Referenzen: #335

    oracle

    • [oracle]

      Oracle bietet experimentelle Unterstützung für cx_Oracle.TIMESTAMP, was einen setinputsizes()-Aufruf auf dem Cursor erfordert, der jetzt über das Flag ‚auto_setinputsizes‘ für den Oracle-Dialekt aktiviert ist.

    misc

    • [ms-sql]

      behebt Bug 261 (Tabellenreflexion defekt für MS-SQL-Datenbanken mit Groß-/Kleinschreibung)

    • [ms-sql]

      kann jetzt den Port für pymssql angeben

    • [ms-sql]

      führt die neue Option „auto_identity_insert“ zur automatischen Umschaltung zwischen „SET IDENTITY_INSERT“-Modus ein, wenn Werte für IDENTITY-Spalten angegeben werden

    • [ms-sql]

      unterstützt jetzt Fremdschlüssel mit mehreren Spalten

    • [ms-sql]

      Korrektur bei der Reflexion von Date/Datetime-Spalten

    • [ms-sql]

      Unterstützung für NCHAR und NVARCHAR hinzugefügt

    • [firebird]

      Aliase verwenden nicht „AS“

    • [firebird]

      löst korrekt NoSuchTableError aus, wenn eine nicht existierende Tabelle reflektiert wird

    • [connections/pooling/execution]

      Der Connection Pool verfolgt offene Cursor und schließt sie automatisch, wenn die Verbindung mit noch geöffneten Cursorn an den Pool zurückgegeben wird. Kann von Optionen beeinflusst werden, die stattdessen einen Fehler auslösen oder nichts tun. behebt Probleme mit MySQL und anderen

    • [connections/pooling/execution]

      behobener Fehler, bei dem Connection seinen Transaction nach commit/rollback nicht verlor

    • [connections/pooling/execution]

      fügt die Methode scalar() zu ComposedSQLEngine und ResultProxy hinzu

    • [connections/pooling/execution]

      ResultProxy schließt den zugrundeliegenden Cursor, wenn ResultProxy selbst geschlossen wird. Dies schließt automatisch Cursor für ResultProxy-Objekte, von denen alle Zeilen abgerufen wurden (oder scalar() aufgerufen wurde).

    • [connections/pooling/execution]

      ResultProxy.fetchall() verwendet intern DBAPI fetchall() für bessere Effizienz, auch zur Mapper-Iteration hinzugefügt (mit freundlicher Genehmigung von Michael Twomey)

    Vorher: 0.4 Changelog Nächste: 0.2 Changelog