0.7 Changelog

0.7.11

no release date

orm

  • [orm] [bug]

    Исправлена ошибка, из-за которой инструментарий списков не мог корректно представить фрагмент множества [0:0], что, в частности, могло происходить при использовании insert(0, item) с прокси ассоциации. Из-за некоторой причуды в коллекциях Python эта проблема была гораздо более вероятна в Python 3, а не 2.

    References: #2807

  • [orm] [bug]

    Исправлена ошибка, когда запрос вида: query(SubClass).options(subqueryload(Baseclass.attrname)), где SubClass является объединенным входом BaseClass, не применял JOIN внутри подзапроса на загрузку атрибутов, создающих картезианское произведение. При этом заполненные результаты, как правило, оставались корректными, поскольку дополнительные строки просто игнорировались, поэтому данная проблема может проявляться как снижение производительности в приложениях, которые в остальном работают корректно.

    References: #2699

  • [orm] [bug]

    Исправлена ошибка в единице работы, при которой подкласс с объединенным наследованием мог вставить строку для «под» таблицы перед родительской таблицей, если между двумя таблицами не были установлены ограничения ForeignKey.

    References: #2689

  • [orm] [bug]

    Улучшено сообщение об ошибке, выдаваемое при обнаружении «петли обратной ссылки», т.е. когда событие атрибута вызывает двунаправленное присвоение между двумя другими атрибутами без конца. Такое состояние может возникнуть не только при присвоении объекта неправильного типа, но и при неправильной настройке атрибута на обратную ссылку в существующую пару обратных ссылок.

    References: #2674

  • [orm] [bug]

    Предупреждение выдается при назначении MapperProperty, заменяющего существующее свойство, если эти свойства не являются обычными свойствами, основанными на столбцах. Замена свойств отношений редко (никогда?) является целью и обычно относится к неправильной конфигурации отображателя. Это также предупреждает, если обратная ссылка конфигурируется поверх существующей в отношениях наследования (что является ошибкой в 0.8).

    References: #2674

engine

  • [engine] [bug]

    Regexp, используемый функцией make_url(), теперь разбирает ipv6-адреса, например, окруженные скобками.

    References: #2851

sql

  • [sql] [bug]

    Исправлена ошибка, восходящая к 0.7.9, в результате которой имя CTE могло не заключаться в кавычки, если на него ссылались в нескольких предложениях FROM.

    References: #2801

  • [sql] [bug] [cte]

    Исправлена ошибка в системе общих табличных выражений, когда если CTE использовался только как конструкция alias(), то при использовании ключевого слова WITH он не выводился.

    References: #2783

  • [sql] [bug]

    Исправлена ошибка в DDL CheckConstraint, когда флаг «quote» из объекта Column не распространялся.

    References: #2784

postgresql

  • [postgresql] [feature]

    Добавлена поддержка традиционного для PostgreSQL синтаксиса функции SUBSTRING, которая при использовании обычного func.substring() отображается как «SUBSTRING(x FROM y FOR z)». Предоставлено Gunnlaugur Þór Briem.

    References: #2676

mysql

  • [mysql] [bug]

    Обновления зарезервированных слов MySQL для версий 5.5, 5.6, любезно предоставленные Ханно Шлихтингом (Hanno Schlichting).

    References: #2791

tests

  • [tests] [bug]

    Исправлен импорт «logging» в test_execute, который не работал на некоторых платформах linux.

    References: #2669, pull request 41

0.7.10

Released: Thu Feb 7 2013

orm

  • [orm] [bug]

    Исправлена потенциальная утечка памяти, которая могла произойти при создании произвольного количества объектов sessionmaker. Анонимный подкласс, созданный сеансовым диспетчером, при разыменовании не собирал мусор из-за оставшихся ссылок на уровне класса из пакета событий. Эта проблема также относится к любой пользовательской системе, использующей специальные подклассы совместно с диспетчером событий.

    References: #2650

  • [orm] [bug]

    <<<Теперь Query.merge_result() может загружать строки из внешнего объединения, в котором сущность может быть None, без возникновения ошибки.

    References: #2640

  • [orm] [bug]

    Тип MutableComposite не позволял использовать метод MutableBase.coerce(), хотя код, казалось, указывал на это, так что теперь это работает, и добавлен краткий пример. Как побочный эффект, механика этого обработчика событий была изменена таким образом, что новые типы MutableComposite больше не добавляют глобальные обработчики событий для каждого типа. Также в 0.8.0b2.

    References: #2624

  • [orm] [bug]

    Исправлена ошибка учета сессий, при которой замена удаленного объекта в карте идентификации на другой объект с тем же первичным ключом приводила к ошибке «конфликтующее состояние» при откате(), если замененный первичный ключ был установлен либо через не связанный с работой оператор INSERT, либо путем переключения первичного ключа другого экземпляра.

    References: #2583

engine

  • [engine] [bug]

    Исправлено MetaData.reflect() для корректного использования заданного Connection, если оно задано, без открытия второго соединения из Engine этого соединения.

    References: #2604

sql

  • [sql] [bug]

    Резервная корректировка __repr__ для TypeDecorator до 0.7, позволяет PickleType производить чистый repr() для помощи в работе с Alembic.

    References: #2584, #2594

  • [sql] [bug]

    Исправлена ошибка, при которой Table.tometadata() приводил к ошибке, если Column имел как внешний ключ, так и альтернативное имя «.key» для столбца.

    References: #2643

  • [sql] [bug]

    Исправлена ошибка, при которой использование server_onupdate=<FetchedValue|DefaultClause> без передачи флага «for_update=True» приводило к применению объекта по умолчанию к server_default, уничтожая все, что там было. Явный аргумент for_update=True при таком использовании не нужен (тем более что в документации приведен пример без его использования), поэтому теперь, если флаг не установлен на то, что соответствует этому аргументу, он организуется внутренне, используя копию данного объекта по умолчанию.

    References: #2631

  • [sql] [gae] [mysql]

    Добавлен условный импорт в диалект gaerdbms, который пытается импортировать rdbms_apiproxy вместо rdbms_googleapi для работы на платформах dev и production. Также теперь учитывается атрибут instance. Любезно предоставлено Шоном Линчем. Также перенесены улучшения, позволяющие использовать имя пользователя/пароль, а также исправлена интерпретация кода ошибки из 0.8.

    References: #2649

mysql

  • [mysql] [feature]

    В диалект OurSQL добавлен флаг «raise_on_warnings».

    References: #2523

  • [mysql] [feature]

    В диалект MySQLdb добавлен флаг «read_timeout».

    References: #2554

sqlite

  • [sqlite] [bug]

    В 0.7.9 была выпущена дополнительная доработка, связанная с SQLite, для перехвата устаревших символов кавычек SQLite при отражении внешних ключей. Помимо перехвата двойных кавычек, теперь перехватываются и другие символы кавычек, такие как скобки, обратные знаки и одинарные кавычки.

    References: #2568

mssql

  • [mssql] [bug]

    Исправлена ошибка, при которой использование «key» с Column в сочетании со «schema» для таблицы-владельца приводило к невозможности найти строки результата из-за того, что логика «рендеринга схемы» диалекта MSSQL не учитывала .key.

  • [mssql] [bug]

    Добавлено Py3K-условие вокруг ненужного вызова .decode() в информационной схеме mssql, исправлено отражение в Py3k.

    References: #2638

oracle

  • [oracle] [bug]

    Тип Oracle LONG, являясь неограниченным текстовым типом, не использует тип cx_Oracle.LOB при возврате строк результатов, поэтому диалект был исправлен, чтобы исключить применение к LONG фильтрации cx_Oracle.LOB.

    References: #2620

  • [oracle] [bug]

    Исправлено использование .prepare() в связке с cx_Oracle таким образом, что при возврате значения False вызов connection.commit() не производится, что позволяет избежать ошибок «нет транзакции». В настоящее время доказана возможность рудиментарной работы двухфазных транзакций с SQLAlchemy и cx_oracle, однако при этом существуют оговорки, связанные с драйвером; подробности можно узнать из документации.

    References: #2611

  • [oracle] [bug]

    изменен список типов cx_oracle, которые исключаются из шага setinputsizes(), теперь в него входят только STRING и UNICODE; CLOB и NCLOB удалены. Это сделано для того, чтобы обойти поведение cx_oracle, которое нарушается при вызове executemany(). В 0.8 применено то же самое изменение, однако оно настраивается с помощью аргумента exclude_setinputsizes.

    References: #2561

0.7.9

Released: Mon Oct 01 2012

orm

  • [orm] [bug]

    Исправлена ошибка, в основном локальная для нового помощника AbstractConcreteBase, когда атрибут «type» из суперкласса не переопределялся в подклассе, чтобы выдать сообщение об ошибке «reserved for base», а вместо этого помещал туда атрибут do-nothing. Это было несовместимо с использованием ConcreteBase, а также со всем поведением классических конкретных отображений, где столбец «type» из полиморфной базы был бы явно отключен в подклассах, если бы не был переопределен явно.

  • [orm] [bug]

    Предупреждение выдается, когда lazy=“dynamic“ сочетается с uselist=False. Это исключение повышено в версии 0.8.

  • [orm] [bug]

    Исправлена ошибка, при которой ошибка пользователя в присваивании related-object могла привести к переполнению рекурсии, если присваивание вызывало обратную ссылку на одноименный двунаправленный атрибут некорректного класса на ту же цель. Теперь выдается информативная ошибка.

  • [orm] [bug]

    Исправлена ошибка, из-за которой при использовании функции «версия» в ORM передавалась некорректная информация о типе при связывании столбца «версия». Тесты предоставлены Дэниелом Миллером.

    References: #2539

  • [orm] [bug]

    В «промывку», выполняемую в рамках Session.commit(), была добавлена дополнительная логика: дополнительное состояние, добавленное хуком after_flush() или after_flush_postexec(), также будет промыто в последующей промывке, до завершения «фиксации». Последующие вызовы flush() будут продолжаться до тех пор, пока крючки after_flush не перестанут добавлять новое состояние. Также имеется счетчик «переполнения», равный 100, на случай, если неработающий крючок after_flush() будет каждый раз добавлять новое содержимое.

    References: #2566

engine

  • [engine] [feature]

    Значительно улучшено использование памяти системой событий; коллекции уровня экземпляра больше не создаются для определенного типа событий до тех пор, пока для этого события не будут созданы слушатели уровня экземпляра.

    References: #2516

  • [engine] [bug]

    Исправлена ошибка, в результате которой при выполнении функции disconnect detect + dispose, когда в пуле QueuePool есть потоки, ожидающие соединения, эти потоки оставались в ожидании в течение всего времени таймаута старого пула (или неопределенного времени, если таймаут был отключен). Теперь исправление уведомляет ожидающих в специальном исключительном случае и заставляет их перейти на новый пул.

    References: #2522

  • [engine] [bug]

    В mysql/__init__.py добавлен импорт gaerdbms, отсутствие которого препятствовало загрузке нового диалекта GAE.

    References: #2529

  • [engine] [bug]

    Исправлена ошибка cextension, при которой «ошибка неоднозначного столбца» не работала, если заданный индекс был объектом Column, а не строкой. Обратите внимание, что здесь все еще существуют некоторые проблемы с нацеливанием на столбцы, которые будут исправлены в 0.8.

    References: #2553

  • [engine] [bug]

    Исправлен repr() Enum для включения флагов «name» и «native_enum». Помогает автогенерации Alembic.

sql

  • [sql] [bug]

    Исправлена конструкция DropIndex для поддержки индекса, связанного с таблицей в удаленной схеме.

    References: #2571

  • [sql] [bug]

    Исправлена ошибка в конструкции over(), при которой передача пустого списка для partition_by или order_by, а не None, приводила к некорректной генерации. Предоставлено Гуннлаугуром Þór Бримом.

    References: #2574

  • [sql] [bug]

    Исправлена ошибка CTE, при которой позиционно связанные параметры, присутствующие в самих CTE, нарушали общий порядок связанных параметров. В первую очередь это касалось SQL Server как платформы с поддержкой позиционных привязок + CTE.

    References: #2521

  • [sql] [bug]

    Исправлены неинтуитивные ошибки в CTE, которые не позволяли ссылаться на CTE в объединении с самим собой без его алиасинга. CTE теперь рендерится уникально по имени, рендерится только крайний CTE данного имени - все остальные ссылки рендерятся просто как имя. Это касается даже других CTE/SELECT, которые ссылаются на различные версии одного и того же объекта CTE, например, SELECT или UNION ALL этого SELECT. В данном случае мы несколько ослабляем обычную связь между идентичностью объекта и лексической идентичностью. Истинный конфликт имен между двумя несвязанными CTE теперь приводит к ошибке.

  • [sql] [bug]

    Кавычки применяются к именам столбцов внутри предложения WITH RECURSIVE общего табличного выражения в соответствии с правилами кавычек для исходного столбца.

    References: #2512

  • [sql] [bug]

    Исправлена ошибка, появившаяся в 0.7.6, из-за которой список FROM оператора SELECT мог быть некорректным в некоторых сценариях «клон+замена».

    References: #2518

  • [sql] [bug]

    Исправлена ошибка, при которой использование UNION или подобного ему внутри вложенного подзапроса мешало нацеливанию на столбец-результат в случае, если столбец-результат имел такое же конечное имя, как и имя внутри вложенного UNION.

    References: #2552

  • [sql] [bug]

    Исправлена регрессия с версии 0.6, связанная с таргетингом строк результатов. Должна быть возможность использовать оператор select() со строковыми столбцами, то есть select([„id“, „name“]).select_from(„mytable“), и чтобы этот оператор был нацелен на объекты Column с такими именами; именно по такому механизму работает query(MyClass).from_statement(some_statement). В какой-то момент конкретный случай использования select([„id“]), который эквивалентен select([literal_column(„id“)]), здесь перестал работать, поэтому он был восстановлен и, конечно, протестирован.

    References: #2558

  • [sql] [bug]

    В базу ColumnOperators добавлены отсутствующие операторы is_(), isnot(), чтобы эти давно доступные операторы присутствовали в виде методов, как и все остальные операторы.

    References: #2544

postgresql

  • [postgresql] [bug]

    Теперь столбцы, отраженные в ограничении первичного ключа, возвращаются в том порядке, в котором их определяет само ограничение, а не в том, в котором они упорядочены в таблице. Любезно предоставлено Gunnlaugur Þór Briem…

    References: #2531

  • [postgresql] [bug]

    В список сообщений, используемых для обнаружения разрыва связи с PG, добавлено сообщение „terminating connection“, которое в некоторых версиях появляется при перезапуске сервера.

    References: #2570

mysql

  • [mysql] [bug]

    Обновлен интерфейс mysqlconnector для использования обновленных API «client flag» и «charset», любезно предоставленных Дэвидом Макнелисом.

sqlite

  • [sqlite] [feature]

    Добавлена поддержка SQL-функции localtimestamp(), реализованной в SQLite, любезно предоставленная Ричардом Митчеллом.

  • [sqlite] [bug]

    Исправлено очень старое исправление, которое пыталось обойти проблему SQLite, «исправленную» в sqlite 3.6.14, касающуюся кавычек вокруг имени таблицы при использовании прагмы «foreign_key_list». Исправление было скорректировано таким образом, чтобы не мешать кавычкам, которые действительно находятся в имени столбца или таблицы, насколько это возможно; sqlite по-прежнему не возвращает корректный результат для функции foreign_key_list(), если целевая таблица действительно имеет кавычки, окружающие ее имя, как часть ее имени (например, «»»mytable»»»).

    References: #2568

  • [sqlite] [bug]

    Скорректирован код отражения значений по умолчанию столбцов для преобразования нестроковых значений в строковые, что позволяет использовать старые версии SQLite, в которых информация по умолчанию не передается в виде строки.

    References: #2265

mssql

  • [mssql] [bug]

    Исправлена ошибка компилятора, при которой использование коррелированного подзапроса в ORDER BY приводило к некорректному отображению, если в операторе также использовались LIMIT/OFFSET, из-за неправильного рендеринга в предложении ROW_NUMBER() OVER. Исправление любезно предоставлено sayap

    References: #2538

  • [mssql] [bug]

    Исправлена ошибка компилятора, при которой заданный select() модифицировался, если имел атрибут «offset», что приводило к некорректной компиляции конструкции во второй раз.

    References: #2545

  • [mssql] [bug]

    Исправлена ошибка, при которой отражение ограничения первичного ключа приводило к дублированию столбцов, если одно и то же ограничение/таблица существовали в нескольких схемах.

0.7.8

Released: Sat Jun 16 2012

orm

  • [orm] [feature]

    Аргумент „objects“ для flush() больше не является устаревшим, так как были выявлены некоторые допустимые варианты его использования.

  • [orm] [bug]

    Исправлена ошибка, при которой загрузка подзапроса() из полиморфного отображения в целевое приводила к новому вызову запроса для каждого отдельного класса, встречающегося в полиморфном результате.

    References: #2480

  • [orm] [bug]

    Исправлена ошибка в декларативной части, из-за которой приоритет столбцов в объединенной таблице, составной столбец (обычно для id) не мог быть корректным, если столбцы содержали имена, отличные от имен их атрибутов. Это приводило к тому, что такие вещи, как условия первичного соединения, сделанные для атрибутов сущности, оказывались некорректными. Связано это с тем, что должно было быть частью этой темы.

    References: #1892, #2491

  • [orm] [bug]

    Исправлена функция identity_key(), которая не принимала скалярный аргумент для идентификатора. .

    References: #2508

  • [orm] [bug]

    Исправлена ошибка, из-за которой опция populate_existing не распространялась на загрузчики подзапросов. .

    References: #2497

engine

  • [engine] [bug]

    Исправлена утечка памяти в C-версии result proxy, в результате которой DBAPI, не предоставляющие кортежи на чистом Python для строк результата, не могли корректно декрементировать refcounts. Наиболее заметной проблемой является pyodbc.

    References: #2489

  • [engine] [bug]

    Исправлена ошибка, затрагивающая Py3K, при которой строковые позиционные параметры, передаваемые в движок/соединение execute(), не интерпретировались корректно из-за наличия __iter__ в строке Py3K.

    References: #2503

sql

  • [sql] [bug]

    добавлены BIGINT в types.__all__, BIGINT, BINARY, VARBINARY в пространство имен модуля sqlalchemy, плюс тест, чтобы убедиться, что эта поломка не повторится.

    References: #2499

  • [sql] [bug]

    Исправлено отображение общих табличных выражений для корректной работы, когда оператор SELECT содержит UNION или другие составные выражения, любезно предоставленные btbuilder.

    References: #2490

  • [sql] [bug]

    Исправлена ошибка, из-за которой функция append_column() некорректно работала в клонированной конструкции select(), любезно предоставлено Gunnlaugur Þór Briem.

    References: #2482

postgresql

  • [postgresql] [bug]

    удалена лишняя табличная оговорка при отражении перечислений. Любезно предоставлено Гуннлаугуром Þór Брим.

    References: #2510

mysql

  • [mysql] [feature]

    Добавлен новый диалект для Google App Engine. Предоставлено Ричи Форманом.

    References: #2484

oracle

  • [oracle] [bug]

    Добавлен ROWID в файл oracle.*.

    References: #2483

0.7.7

Released: Sat May 05 2012

orm

  • [orm] [feature]

    В Query добавлен метод prefix_with(), вызывающий select().prefix_with() для размещения директив MySQL SELECT в операторах. Предоставлено Дианой Кларк

    References: #2443

  • [orm] [feature]

    Добавлен новый флаг в @validates include_removes. При значении True события collection remove и attribute del будут также отправляться в функцию валидации, которая при использовании этого флага принимает дополнительный аргумент «is_remove».

  • [orm] [bug]

    Исправлена проблема в единице работы, когда при установке самореферентного отношения «многие-к-одному» в значение None не сохранялось изменение, если прежнее значение еще не было загружено.

    References: #2477

  • [orm] [bug]

    Исправлена ошибка в 0.7.6, из-за которой не работала column_mapped_collection, используемая против столбцов, которые были отображены как joins или другие косвенные selectables.

    References: #2409

  • [orm] [bug]

    Исправлена ошибка, при которой столбец polymorphic_on, не отображенный на класс, некорректно включался в операцию merge(), вызывая ошибку.

    References: #2449

  • [orm] [bug]

    Исправлена ошибка в механике аннотаций выражений, которая могла приводить к некорректному отображению операторов SELECT с псевдонимами и объединениями, особенно при использовании функции column_property().

    References: #2453

  • [orm] [bug]

    Исправлена ошибка, из-за которой OrderingList не мог быть pickleable. Предоставлено Джеффом Дайрики

    References: #2454

  • [orm] [bug]

    Исправлена ошибка в сравнениях отношений, когда вызов нереализованных методов типа SomeClass.Someerelationship.like() приводил к переполнению рекурсии, а не к ошибке NotImplementedError.

sql

  • [sql] [feature]

    Добавлено новое событие подключения dbapi_error(). Вызывается для всех ошибок уровня DBAPI, передавая исходное исключение DBAPI, перед тем как SQLAlchemy изменит состояние курсора.

  • [sql] [bug]

    Убрано предупреждение о том, что индекс создается без столбцов; хотя это может быть не то, что задумал пользователь, это вполне допустимый случай использования, поскольку индекс может быть заполнителем для простого индекса с определенным именем.

  • [sql] [bug]

    Если при вызове «with engine.begin()» произошел сбой conn.begin(), то вновь полученное соединение закрывается явным образом перед нормальным распространением исключения дальше.

  • [sql] [bug]

    Добавить BINARY, VARBINARY в types.__all__.

    References: #2474

postgresql

  • [postgresql] [feature]

    Добавлены новые опции for_update/with_lockmode() для PostgreSQL: for_update=»read»/ with_lockmode(«read»), for_update=»read_nowait»/ with_lockmode(«read_nowait»). Они выдают сообщения «FOR SHARE» и «FOR SHARE NOWAIT» соответственно. Предоставлено Дианой Кларк

    References: #2445

  • [postgresql] [bug]

    удалена лишняя табличная оговорка при отражении доменов.

    References: #2473

mysql

  • [mysql] [bug]

    Исправлена ошибка, при которой имя столбца в предложении «KEY» для автоинкрементного составного столбца в InnoDB заключалось в двойные кавычки, а имя являлось зарезервированным словом. Предоставлено Джеффом Дайрики.

    References: #2460

  • [mysql] [bug]

    Исправлена ошибка, из-за которой функция get_view_names() для схемы «information_schema» не получала представления, помеченные как «SYSTEM VIEW». любезно предоставлено Мэтью Турландом.

  • [mysql] [bug]

    Исправлена ошибка, из-за которой при использовании cast() для SQL-выражения, тип которого не поддерживается cast() и, соответственно, CAST не отображается диалектом, порядок оценки мог измениться, если приведенное выражение требовало группировки; теперь группировка применяется к таким выражениям.

    References: #2467

sqlite

  • [sqlite] [feature]

    Добавлена опция выполнения SQLite «sqlite_raw_colnames=True», позволяющая обойти попытки удаления «.» из имен столбцов, возвращаемых SQLite cursor.description.

    References: #2475

  • [sqlite] [bug]

    При замене столбца первичного ключа таблицы, например, с помощью функции extend_existing, происходит сброс столбца «auto increment», используемого конструкциями insert(). Ранее он продолжал ссылаться на предыдущий столбец первичного ключа.

    References: #2525

mssql

  • [mssql] [feature]

    В диалект PyODBC добавлен промежуточный флаг create_engine supports_unicode_binds, позволяющий определить, передает ли диалект юникодные литералы Python в PyODBC или нет.

  • [mssql] [bug]

    Исправлен флаг use_scope_identity create_engine() при использовании диалекта pyodbc. Ранее этот флаг игнорировался, если был установлен в False. Если флаг установлен в False, то после каждого INSERT для получения последнего вставленного идентификатора будет выполняться «SELECT @@identity» для тех таблиц, у которых «implicit_returning» установлен в False.

  • [mssql] [bug]

    Синтаксис UPDATE..FROM в SQL Server требует, чтобы обновляемая таблица присутствовала в предложении FROM, если псевдоним этой таблицы также присутствует в предложении FROM. Теперь обновленная таблица всегда присутствует в предложении FROM, если FROM присутствует в нем в первую очередь. Любезно предоставлено sayap.

    References: #2468

0.7.6

Released: Wed Mar 14 2012

orm

  • [orm] [feature]

    В сессию добавлен контекстный менеджер «no_autoflush», который при использовании с with: временно отключает автопромывку.

  • [orm] [feature]

    В Query добавлен метод cte(), вызывающий поддержку общих табличных выражений из ядра (см. ниже).

    References: #1859

  • [orm] [feature]

    Добавлена возможность запроса имен столбцов, связанных с таблицей, при использовании query(sometable).filter_by(colname=value).

    References: #2400

  • [orm] [bug]

    Исправлена ошибка регистрации событий, которая проявлялась в том, что события не регистрировались экземплярами sessionmaker(), созданными после того, как событие было связано с классом Session.

    References: #2424

  • [orm] [bug]

    Исправлена ошибка, из-за которой условие primaryjoin, содержащее «литерал», вызывало ошибку при компиляции некоторых видов глубоко вложенных выражений, в которых также требовалось вывести одно и то же имя связанного параметра более одного раза.

    References: #2425

  • [orm] [bug]

    Убрана проверка количества затронутых строк при выполнении мультиудаления для отображаемых объектов. Если между двумя строками существует ON DELETE CASCADE, то мы не можем получить точный подсчет строк от DBAPI; в любом случае, этот подсчет не поддерживается большинством DBAPI, MySQLdb является ярким примером, где он поддерживается.

    References: #2403

  • [orm] [bug]

    Исправлена ошибка, из-за которой объекты, использующие attribute_mapped_collection или column_mapped_collection, не могли быть замаринованы.

    References: #2409

  • [orm] [bug]

    Исправлена ошибка, из-за которой MappedCollection не получала соответствующего инструментария коллекции, если она использовалась только в пользовательском подклассе, использующем @collection.internally_instrumented.

    References: #2406

  • [orm] [bug]

    Исправлена ошибка, из-за которой в очень вложенном сценарии, включающем объединенное наследование, объединенную загрузку(), limit() и производную функцию в предложении columns, происходила ошибка адаптации SQL-механики.

    References: #2419

  • [orm] [bug]

    Исправлена функция repr() для CascadeOptions на refresh-expire. Также переработано представление CascadeOptions в виде <frozenset>.

    References: #2417

  • [orm] [bug]

    Улучшен пример «декларативного отражения» для поддержки наследования одной таблицы, нескольких вызовов prepare(), таблиц, присутствующих в альтернативных схемах, установления только подмножества классов в качестве отражаемых.

  • [orm] [bug]

    Уменьшен тест, применяемый в flush() для проверки UPDATE против частично NULL PK в одной таблице, чтобы UPDATE происходил только в том случае, если UPDATE действительно должен произойти.

    References: #2390

  • [orm] [bug]

    Исправлена ошибка, из-за которой при конфликте имени метода с именем колонки возникала ошибка TypeError, когда картограф пытался проверить метод __get__() на объекте метода.

    References: #2352

examples

  • [examples] [bug]

    Функция _params_from_query() в примере Beaker была изменена таким образом, чтобы извлекать bindparams из полностью скомпилированного оператора, что позволяет быстро получить все, включая подзапросы в предложении columns и т.д.

engine

  • [engine] [feature]

    Добавлена опция выполнения «no_parameters=True» для соединений. При отсутствии параметров оператор передается как cursor.execute(statement), тем самым вызывая поведение DBAPIs при отсутствии коллекции параметров; для psycopg2 и mysql-python это означает отсутствие интерпретации знаков % в строке. Это происходит только при данной опции, а не только в том случае, если список параметров пуст, поскольку в противном случае это привело бы к несовместимому поведению SQL-выражений, которые обычно обходятся без знаков процента (и при компиляции не могут заранее знать, будут ли присутствовать параметры в некоторых случаях).

    References: #2407

  • [engine] [feature]

    В create_engine добавлен аргумент pool_reset_on_return, позволяющий контролировать поведение «возврата соединения». Также в pool.reset_on_return добавлены новые аргументы „rollback“, „commit“, None, позволяющие контролировать активность возврата соединения.

    References: #2378

  • [engine] [feature]

    Добавлены достойные контекстные менеджеры в Engine, Connection:

    with engine.begin() as conn:
        # <work with conn in a transaction>
        ...

    и:

    with engine.connect() as conn:
        # <work with conn>
        ...

    Оба закрывают соединение по завершении работы, фиксируют или откатывают транзакцию с ошибками на engine.begin().

  • [engine] [bug]

    Добавлен вызов execution_options() для MockConnection (т.е. используемого со стратегией=»mock»), который работает как проходной для аргументов.

sql

  • [sql] [feature]

    Добавлена поддержка общих табличных выражений (CTE) стандарта SQL, позволяющая использовать в качестве источника CTE объекты SELECT (DML пока не поддерживается). Для этого используется метод cte() в любой конструкции select().

    References: #1859

  • [sql] [bug]

    Исправлена утечка памяти в ядре, которая возникала при использовании расширений C с определенными типами поиска результатов, в частности, при вызове orm query.count().

    References: #2427

  • [sql] [bug]

    Исправлена проблема, при которой обращение к столбцу на основе атрибутов в строке вызывало ошибку AttributeError в версии, отличной от C, и NoSuchColumnError в версии C. Теперь в обоих случаях выдается ошибка AttributeError.

    References: #2398

  • [sql] [bug]

    Добавлена поддержка использования .key столбца в качестве строкового идентификатора в строке набора результатов. В настоящее время .key указывается как «альтернативное» имя столбца, которое заменяется именем столбца, имеющего это ключевое значение в качестве своего обычного имени. В следующем крупном выпуске SQLAlchemy мы можем изменить этот приоритет, чтобы .key имел приоритет, но это еще не решено.

    References: #2392

  • [sql] [bug]

    Предупреждение выдается, если в предложении values() конструкции insert() или update() указывается несуществующий столбец. В 0.8 будет переведено в исключение.

    References: #2413

  • [sql] [bug]

    Существенное изменение в способе применения маркировки к столбцам в операторах SELECT позволяет «усеченным» меткам, то есть именам меток, сгенерированным в Python и превышающим максимальную длину идентификатора (обратите внимание, что это настраивается через label_length в create_engine()), правильно ссылаться при выводе внутри подзапроса, а также присутствовать в строке набора результатов, используя свои оригинальные имена на языке Python.

    References: #2396

  • [sql] [bug]

    Исправлена ошибка в новом флаге «autoload_replace», из-за которой не сохранялось ограничение первичного ключа отражаемой таблицы.

    References: #2402

  • [sql] [bug]

    Index будет предупреждать, если переданные аргументы не могут быть интерпретированы как столбцы или выражения. Выдаст предупреждение, если индекс создается вообще без столбцов.

    References: #2380

mysql

  • [mysql] [feature]

    Добавлена поддержка типов ограничений MySQL index и primary key constraint (т.е. USING) с помощью нового параметра mysql_using в Index и PrimaryKeyConstraint, любезно предоставленного Дианой Кларк.

    References: #2386

  • [mysql] [feature]

    Добавлена поддержка параметра «isolation_level» для всех диалектов MySQL. За патч спасибо mu_mind.

    References: #2394

sqlite

  • [sqlite] [bug]

    Исправлена ошибка в расширениях C, из-за которой строковый формат не применялся к числовому значению, возвращаемому в виде целого числа; в первую очередь это касалось SQLite, который не поддерживает настройки числовой шкалы.

    References: #2432

mssql

  • [mssql] [feature]

    Добавлена поддержка хинтов таблиц MSSQL INSERT, UPDATE и DELETE с помощью нового метода with_hint() в UpdateBase.

    References: #2430

oracle

  • [oracle] [feature]

    Добавлен новый флаг create_engine() coerce_to_decimal=False, отключающий обработку точных чисел, которая может привести к большим накладным расходам при преобразовании всех числовых значений в десятичную систему.

    References: #2399

  • [oracle] [bug]

    Добавлена поддержка недостающей компиляции для LONG

    References: #2401

  • [oracle] [bug]

    В список зарезервированных слов для Oracle добавлено слово „LEVEL“.

    References: #2435

0.7.5

Released: Sat Jan 28 2012

orm

  • [orm] [feature]

    Добавлен аргумент «class_registry» для функции declarative_base(). Позволяет двум или более декларативным базам совместно использовать один и тот же реестр имен классов.

  • [orm] [feature]

    query.filter() принимает несколько критериев, которые объединяются через AND, т.е. query.filter(x==y, z>q, …)

  • [orm] [feature]

    В опции загрузчика отношений добавлена возможность использования стратегий загрузчика «по умолчанию». Передайте „*“ любому из вариантов joinedload(), lazyload(), subqueryload() или noload(), и это станет стратегией загрузчика, используемой для всех отношений, кроме тех, которые явно указаны в запросе. Спасибо начинающему контрибьютору Кенту Бауэру за исчерпывающий и хорошо написанный набор тестов!

    References: #2351

  • [orm] [feature]

    Добавлен новый пример декларативного отражения, иллюстрирующий, как лучше сочетать табличное отражение с декларативным, а также использующий некоторые новые возможности из.

    References: #2356

  • [orm] [bug]

    Исправлена проблема, при которой измененное состояние сеанса, установленное после неудачного flush, фиксировалось в рамках последующей транзакции, автоматически начинающейся после ручного вызова rollback(). Состояние сессии проверяется в рамках функции rollback(), и если в ней появилось новое состояние, то выдается предупреждение и restore_snapshot() вызывается второй раз, отбрасывая эти изменения.

    References: #2389

  • [orm] [bug]

    Исправлена ошибка из 0.7.4, в результате которой использование уже инструментированного столбца из суперкласса в качестве «polymorphic_on» не приводило к разрешению базового столбца Column.

    References: #2345

  • [orm] [bug]

    Вызывает исключение, если функция xyzload_all() используется не по назначению с двумя не связанными отношениями.

    References: #2370

  • [orm] [bug]

    Исправлена ошибка, из-за которой event.listen(SomeClass) заставлял компилировать совершенно ненужный маппер, что затрудняло настройку событий при импорте модуля (никто этого не заметил ??)

    References: #2367

  • [orm] [bug]

    Исправлена ошибка, из-за которой hybrid_property не работал в качестве аргумента kw в any(), has().

  • [orm] [bug]

    обеспечить pickleability всех ORM-исключений для совместимости с многопроцессорными системами.

    References: #2371

  • [orm] [bug]

    реализована стандартная ошибка AttributeError «cannot set attribute» / «can’t delete attribute» при использовании setattr/delattr на гибриде, не определяющем fset или fdel.

    References: #2353

  • [orm] [bug]

    Исправлена ошибка, при которой у распикированного объекта не было достаточно настроенного состояния для корректной работы в событии unpickle(), установленном расширением mutable object, если объекту требовался доступ к атрибутам ORM в __eq__() или подобном.

    References: #2362

  • [orm] [bug]

    Исправлена ошибка, при которой каскад «слияние» мог неверно интерпретировать незагруженный атрибут, если в relationship() использовался флаг load_on_pending. Спасибо Кенту Боуэру за тесты.

    References: #2374

  • [orm]

    Исправлена ошибка из 0.6, в результате которой при использовании флага relationship() «load_on_pending» в тех случаях, когда на отложенный объект требовалось выдать ленивое предложение не «get()», он не загружался.

examples

  • [examples] [feature]

    Немного упростил пример с версионированием, чтобы вместо метакласса + SessionExtension использовать декларативный миксин, а также слушатель событий.

    References: #2313

  • [examples] [bug]

    В файле large_collection.py исправлено закрытие сессии перед сбросом таблиц.

    References: #2346

engine

  • [engine] [bug]

    Добавлено __reduce__ к ошибкам StatementError, DBAPIError, ошибкам колонок, чтобы исключения были pickleable, как при использовании многопроцессорной обработки. Однако пока это поддерживают не все DBAPI, например, psycopg2.

    References: #2371

  • [engine] [bug]

    Улучшены сообщения об ошибках, когда любому из процессоров даты/времени, используемых SQLite, включая версии на C и Python, передается нестрока или недопустимая строка.

    References: #2382

  • [engine] [bug]

    Исправлена ошибка, из-за которой привязанный к таблице объект Column с именем «<a>_<b>», соответствующий столбцу, помеченному как «<tablename>_<colname>», мог не соответствовать при нацеливании в строку набора результатов.

    References: #2377

  • [engine] [bug]

    Исправлена ошибка в стратегии «mock», при которой не вызывался правильный метод посещения DDL, что приводило к дублированию операторов «CREATE/DROP SEQUENCE»

    References: #2384

sql

  • [sql] [feature]

    Новая функция отражения «autoload_replace»; если для таблицы установлено значение False, то таблица может быть автозагружена без замены существующих столбцов. Позволяет строить более гибкие цепочки построения/отражения таблиц, в том числе помогает сочетать декларативное и табличное отражение. См. новый пример в вики.

    References: #2356

  • [sql] [feature]

    В пространство имен sqlalchemy.sql добавлены конструкции выражений «false()» и «true()», хотя пока они не являются частью __all__.

  • [sql] [feature]

    Диалект-специфичные компиляторы теперь выдают CompileError для всех проблем компиляции типов/выражений вместо InvalidRequestError или ArgumentError. DDL для CREATE TABLE будет повторно выдавать CompileError, чтобы включить информацию о таблице/столбце для проблемного столбца.

    References: #2361

  • [sql] [bug]

    Улучшен API для add_column() таким образом, что если тот же самый столбец добавляется в собственную таблицу, то ошибка не возникает и ограничения не дублируются. Это также помогает при работе с некоторыми паттернами отражения/декларации.

    References: #2356

  • [sql] [bug]

    Исправлена проблема, при которой исключение «required» не возникало для bindparam() с required=True, если в операторе вообще не было параметров.

    References: #2381

mysql

  • [mysql] [bug]

    исправлен regexp, отфильтровывающий предупреждения для неотраженных директив «PARTITION», спасибо Джорджу Рейли

    References: #2376

sqlite

  • [sqlite] [bug]

    »Имя» FK-ограничения в SQLite отражается как «None», а не «0» или другое целочисленное значение. Похоже, что SQLite не поддерживает именование ограничений в любом случае.

    References: #2364

  • [sqlite] [bug]

    sql.false() и sql.true() компилируются в sqlite в 0 и 1, соответственно

    References: #2368

  • [sqlite] [bug]

    устранена ошибочная «прибавка» в диалекте SQLite при получении имен таблиц и представлений, где имеется логика возврата к старой версии SQLite, в которой отсутствует таблица «sqlite_temp_master».

mssql

  • [mssql] [bug]

    Скорректирован regexp, используемый в типе mssql.TIME, чтобы в части значения «microseconds» получалось только шесть цифр, что ожидается в Python’овской datetime.time(). Заметим, что поддержка отправки микросекунд, по крайней мере, в pyodbc, пока невозможна.

    References: #2340

  • [mssql] [bug]

    Отказались от ограничения в 30 символов для pymssql, основываясь на сообщениях о том, что в настоящее время он работает лучше. pymssql не был хорошо протестирован, и, поскольку DBAPI находится в движении, до сих пор не ясно, каково состояние этого драйвера и как должна адаптироваться реализация SQLAlchemy.

    References: #2347

oracle

  • [oracle] [bug]

    В бесконечный список ошибок oracle «connection lost» добавлена ошибка ORA-03135

    References: #2388

misc

  • [bug] [core]

    Изменен LRUCache, используемый mapper’ом для кэширования операторов INSERT/UPDATE/DELETE, чтобы использовать инкрементный счетчик вместо временной метки для отслеживания записей, для большей надежности по сравнению с использованием time.time(), что может привести к сбоям в тестировании на некоторых платформах.

    References: #2379

  • [bug] [core]

    Добавлена булева проверка функции «finalize» в обратном вызове weakref прокси соединения пула перед ее вызовом, чтобы не выдавалось предупреждение о том, что эта функция None, когда приложение завершается и gc удалил функцию из модуля до вызова обратного вызова weakref.

    References: #2383

  • [bug] [py3k]

    Исправлено некорректное использование флага util.py3k и он переименован в util.py3k_warning, так как этот флаг предназначен только для обнаружения ограничений импорта серии флагов -3.

    References: #2348

0.7.4

Released: Fri Dec 09 2011

orm

  • [orm] [feature]

    polymorphic_on теперь принимает множество новых типов значений:

    • самостоятельные выражения, не имеющие других отображений

    • объекты column_property()

    • строковые имена любых column_property() или атрибутов отображаемого Column

    В документации приведен пример с использованием конструкции case(), которая, вероятно, часто используется здесь. и часть

    Автономные выражения в polymorphic_on распространяются на подклассы с однотабличным наследованием, поэтому они используются в предложении WHERE /JOIN для ограничения строк этим подклассом, как это обычно и происходит.

    References: #2238, #2345

  • [orm] [feature]

    IdentitySet поддерживает оператор - как то же самое, что и difference(), что удобно при работе с Session.dirty и т.д.

    References: #2301

  • [orm] [feature]

    Добавлено новое значение для автоинкремента столбца под названием «ignore_fk», которое может быть использовано для принудительного автоинкремента столбца, который все еще является частью ForeignKeyConstraint. Новый пример в документации по отношениям иллюстрирует его использование.

  • [orm] [bug]

    Исправлено поведение обратной ссылки при «выталкивании» значения из many-to-one в ответ на удаление из устаревшего one-to-many - операция пропускалась, так как many-to-one уже был обновлен.

    References: #2315

  • [orm] [bug]

    После нескольких лет отсутствия этого функционала добавлена более детальная проверка «является ли X родителем Y», которая используется при определении необходимости «обнуления» FK на «Y», а также при удалении «Y» с помощью каскада delete-orphan. Теперь тест учитывает Python-идентификатор родителя, а также его идентификационный ключ, чтобы определить, является ли последний известный родитель Y определенно X. Если решение не может быть принято, то выдается ошибка StaleDataError. Условия, при которых возникает эта ошибка, довольно редки: требуется, чтобы предыдущий родитель был собран в мусор, и ранее можно было неправомерно обновить/удалить запись, которая после этого перешла к новому родителю, хотя возможны случаи, когда ранее происходил «тихий успех», который теперь будет возникать в условиях неоднозначности. Истечение срока действия «Y» сбрасывает «родительский» трекер, что означает, что X.remove(Y) может привести к удалению Y, даже если X устарел, но это то же самое поведение, что и раньше; в этом случае рекомендуется также истекать срок действия X.

    References: #2264

  • [orm] [bug]

    исправлена некорректная оценка объекта user-mapped в булевом контексте в query.get(). Также в 0.6.9.

    References: #2310

  • [orm] [bug]

    Добавлена недостающая запятая в символ PASSIVE_RETURN_NEVER_SET

    References: #2304

  • [orm] [bug]

    Cls.column.collate(«some collation») теперь работает. Также в 0.6.9

    References: #1776

  • [orm] [bug]

    значение составного атрибута теперь не регенерируется на месте, а истекает после операции вставки или обновления. Это гарантирует, что значение столбца, срок действия которого истек в рамках операции flush, будет загружено первым, прежде чем композит будет регенерирован с использованием этого значения.

    References: #2309

  • [orm] [bug]

    Исправление также выдает событие «refresh» при загрузке составного значения при доступе, даже если все значения столбцов уже присутствовали, как и положено. Это исправляет «мутабельное» расширение, которое полагается на событие «load» для обеспечения актуальности словаря _parents, исправления. Спасибо Скотту Торборгу за приведенный здесь тестовый пример.

    References: #2308, #2309

  • [orm] [bug]

    Исправлена ошибка, при которой подкласс подкласса, использующего конкретное наследование в сочетании с новыми ConcreteBase или AbstractConcreteBase, не мог применить подклассы глубже одного уровня к «полиморфному загрузчику» каждой базы

    References: #2312

  • [orm] [bug]

    Исправлена ошибка, из-за которой подкласс подкласса, использующего новый AbstractConcreteBase, не получал корректный атрибут «base_mapper» при генерации маппера «base», что приводило к сбоям в дальнейшей работе.

    References: #2312

  • [orm] [bug]

    Исправлена ошибка, из-за которой колонка column_property(), созданная на уровне ORM, могла рассматриваться как отдельная сущность при создании некоторых видов объединений join-inh.

    References: #2316

  • [orm] [bug]

    Исправлено форматирование ошибок, возникающих при случайной передаче кортежа в session.query(). Также в 0.6.9.

    References: #2297

  • [orm] [bug]

    Вызовы query.join() к подклассу наследования одной таблицы теперь отслеживаются и используются для устранения дополнительного критерия WHERE… IN, который обычно добавляется при наследовании одной таблицы, поскольку соединение должно его учитывать. Это позволяет OUTER JOIN к подклассу одной таблицы выдавать корректные результаты, и в целом будет создаваться меньше критериев WHERE при работе с подклассами наследования одной таблицы.

    References: #2328

  • [orm] [bug]

    Теперь __table_args__ можно передавать как в виде пустого кортежа, так и в виде пустого dict. За исправление спасибо Фаязу Юсуфу Хану.

    References: #2339

  • [orm] [bug]

    Обновлено предупреждение при установке delete-orphan без delete, теперь оно не относится к 0.6, так как мы так и не смогли перевести его в исключения. В идеале лучше было бы сделать это исключением, но в любом случае это не критично.

    References: #2325

  • [orm] [bug]

    Исправлена ошибка в функции get_history() при обращении к составному атрибуту, не имеющему значения; добавлено покрытие для функции get_history() относительно составных атрибутов, которая в остальном является просто пользовательской функцией.

examples

  • [examples] [bug]

    Исправлена ошибка в примере history_meta.py, когда флаг «unique» не снимался с подкласса наследования одной таблицы, генерирующего колонки для размещения на базе.

engine

  • [engine] [bug]

    Исправлена ошибка, при которой transaction.rollback() выдавал ошибку при недействительном соединении, если транзакция была двухфазной или транзакцией с точкой сохранения. Для обычных транзакций откат() не приводит к ошибке, если соединение недействительно, поэтому, хотя и не было на 100% ясно, должна ли она приводить к ошибке, по крайней мере, теперь интерфейс согласован.

    References: #2317

sql

  • [sql] [feature]

    Конструкция update() теперь может содержать несколько таблиц в предложении WHERE, что приведет к появлению конструкции «UPDATE..FROM», распознаваемой PostgreSQL и MSSQL. При компиляции на MySQL вместо этого будет сгенерирована конструкция «UPDATE t1, t2, …». MySQL дополнительно может выполнять рендеринг по нескольким таблицам в предложении SET, если в качестве ключей в параметре «values» или генеративном методе используются объекты Column.

    References: #1944, #2166

  • [sql] [feature]

    Добавлен аксессор к типам «python_type», возвращающий рудиментарный объект типа Python для конкретного экземпляра TypeEngine, если он известен, в противном случае выдающий ошибку NotImplementedError.

    References: #77

  • [sql] [bug]

    связанные с этим, внесли некоторые коррективы в изменения, касающиеся списка «from» в select(). Коллекция _froms больше не мемоизируется, так как это упрощает различные случаи использования и устраняет необходимость в «предупреждении», если столбец присоединяется к таблице после того, как он уже использовался в выражении - конструкция select() теперь всегда будет выдавать правильное выражение. Вероятно, реального ущерба производительности здесь нет; объекты select() почти всегда создаются ad-hoc, и системы, желающие оптимизировать повторное использование select(), будут использовать функцию «compiled_cache». Уменьшилась ошибка, возникающая при вызове select.bind, но подавляющее большинство пользователей все равно не должны использовать «связанные метаданные» :).

    References: #2261, #2316

  • [sql] [bug]

    дополнительная доработка исправления из, чтобы генеративные методы работали немного лучше после клонирования (впрочем, это почти не используется). В частности, это позволяет функции with_only_columns() вести себя более последовательно. Добавлена дополнительная документация к функции with_only_columns(), чтобы прояснить ожидаемое поведение, которое изменилось в результате.

    References: #2261, #2319

schema

  • [schema] [feature]

    Добавлена поддержка удаленных «схем»:

  • [schema] [feature]

    Флаг «extend_existing» для Table теперь позволяет отразить процесс для объекта Table, который уже был определен; когда autoload=True и extend_existing=True установлены одновременно, полный набор столбцов будет отражен от таблицы, которая затем перезапишет уже присутствующие столбцы, а не произойдет никаких действий. При этом столбцы, присутствующие непосредственно в автозагрузке, будут использоваться как обычно.

    References: #1410

  • [schema] [bug]

    Исправлена ошибка, при которой TypeDecorator возвращал устаревшее значение для _type_affinity при использовании TypeDecorator, который «переключает» типы, например, тип CHAR/UUID.

  • [schema] [bug]

    Исправлена ошибка, при которой опция «order_by=“foreign_key“» в Inspector.get_table_names не реализовывала сортировку должным образом, заменена на существующий алгоритм сортировки

  • [schema] [bug]

    »Имя» CHECK-ограничения на уровне столбцов, если оно присутствует, теперь выводится в операторе CREATE TABLE с помощью «CONSTRAINT <имя> CHECK <выражение>».

    References: #2305

  • [schema]

    MetaData() принимает аргументы «schema» и «quote_schema», которые будут применяться к одноименным аргументам таблицы или последовательности, оставляя их по умолчанию равными None.

  • [schema]

    Последовательность принимает аргумент «quote_schema»

  • [schema]

    tometadata() для Table будет использовать «схему» входящих метаданных для новой таблицы, если аргумент schema явно равен «None»

  • [schema]

    Добавлены DDL-конструкции CreateSchema и DropSchema - они принимают только строковое имя схемы и флаг «quote».

  • [schema]

    При использовании «схемы» по умолчанию в MetaData, ForeignKey также будет принимать схему «по умолчанию» при размещении удаленной таблицы. Это позволяет применять аргумент «схема» в MetaData к любому набору объектов Table, которые в противном случае не имеют «схемы».

  • [schema]

    метод «has_schema» был реализован на dialect, но пока работает только на PostgreSQL. Предоставлено Манлио Перилло.

    References: #1679

postgresql

  • [postgresql] [feature]

    В pg.ENUM добавлен аргумент конструктора create_type. При значении False в рамках события создания/удаления таблицы не будет выполняться ни CREATE/DROP, ни проверка типа; это будут делать только методы create()/drop)(), вызываемые напрямую. Помогает при работе с «автономными» скриптами Alembic.

  • [postgresql] [bug]

    Диалект PostgreSQL запоминает, что во время последовательности create/drop был обработан ENUM с определенным именем. Это позволяет последовательности create/drop работать без каких-либо вызовов «checkfirst», а также означает, что при включенной «checkfirst» проверка на наличие ENUM должна выполняться только один раз.

    References: #2311

mysql

  • [mysql] [bug]

    Корректировки юникода позволяют последней версии pymysql (пост. 0.4) проходить 100% проверку на Python 2.

mssql

  • [mssql] [feature]

    снято ограничение на SAVEPOINT для SQL Server. Все тесты проходят с его использованием, однако неизвестно, есть ли более глубокие проблемы.

    References: #822

  • [mssql] [bug]

    Исправлена функция with_hint(), которая была некорректно реализована на MSSQL - обычно она используется для подсказки «WITH (NOLOCK)» (которую все равно не стоит использовать! используйте вместо нее изоляцию моментальных снимков :) ).

    References: #2336

  • [mssql] [bug]

    использовать новое определение версии pyodbc для опции _need_decimal_fix.

    References: #2318

  • [mssql] [bug]

    не приводить «имя таблицы» к виду NVARCHAR на SQL Server 2000. Однако до сих пор не ясно, какие заклинания нужны для полноценной работы PyODBC с FreeTDS 0.91.

    References: #2343

  • [mssql] [bug]

    Декодирование входящих значений при получении списка имен индексов и имен столбцов в этих индексах.

    References: #2269

misc

  • [feature] [ext]

    В документацию по гибридам добавлен пример «трансформатора» - гибрида, возвращающего преобразующий запрос вызываемый элемент в сочетании с пользовательским компаратором. Используется новый метод Query под названием with_transformation(). Приведенный здесь вариант использования является достаточно экспериментальным, но добавляет в Query всего одну строку кода.

  • [bug] [pyodbc]

    Диалекты, основанные на pyodbc, теперь точно разбирают pyodbc в части наблюдаемых строк pyodbc, включая такие, как «py3-3.0.1-beta4»

    References: #2318

  • [bug] [ext]

    декоратор @compiles при отсутствии обработчика компиляции «по умолчанию» выдает информативное сообщение об ошибке, а не KeyError.

0.7.3

Released: Sun Oct 16 2011

general

  • [general]

    Настроен механизм «importlater», который используется для разрешения циклов импорта, таким образом, что использование __import__ завершается при импорте sqlalchemy или sqlalchemy.orm, что позволяет избежать использования __import__ после запуска новых потоков, исправления. Также в 0.6.9.

    References: #2279

orm

  • [orm]

    Усовершенствована функция query.join(), в результате чего «левая» сторона может быть более гибкой, например, подзапросом. Теперь в качестве левой стороны будет использоваться selectable, помещенный в select_from(), что предпочтительнее неявного использования сопоставленной сущности. Если объединение все еще не работает из-за отсутствия внешних ключей, сообщение об ошибке будет содержать эту информацию. Спасибо brianrhude на IRC за тестовый пример.

    References: #2298

  • [orm]

    Добавлено событие сессии after_soft_rollback(). Это событие срабатывает безусловно при вызове функции rollback(), независимо от того, произошел ли реальный откат на уровне DBAPI. Это событие специально разработано для того, чтобы позволить продолжить операции с сессией после отката, если параметр Session.is_active равен True.

    References: #2241

  • [orm]

    добавлен булевский флаг «adapt_on_names» в конструкцию orm.aliased(). Позволяет конструкции aliased() связывать ORM-сущность с селектом, содержащим агрегаты или другие производные формы определенного атрибута, при условии, что его имя совпадает с именем отображаемого столбца сущности.

  • [orm]

    В функцию column_property() добавлен новый флаг expire_on_flush=False, отмечающий, что те свойства, которые в противном случае считались бы «readonly», т.е. полученными из SQL-выражений, сохраняют свое значение после промывки, в том числе если родительский объект был вовлечен в обновление.

  • [orm]

    Усовершенствован инструментарий в ORM для поддержки нового стиля аргументов Py3K «required kw arguments», т.е. fn(a, b, *, c, d), fn(a, b, *args, c, d). Сигнатуры аргументов метода __init__ сопоставленного объекта будут сохранены, включая правила обязательных kw-аргументов.

    References: #2237

  • [orm]

    Исправлена ошибка в модуле работы, из-за которой определение «циклов» среди классов в сильно взаимосвязанных паттернах не давало детерминированного результата, что иногда приводило к пропуску некоторых узлов, которые должны считаться циклами, и вызывало дополнительные проблемы в дальнейшем. Обратите внимание, что эта ошибка есть и в 0.6; в настоящее время она не перенесена.

    References: #2282

  • [orm]

    Исправлен ряд регрессий, связанных с synonym()в версии 0.6:

    • создание синонима против синонима теперь работает.

    • Синонимы, созданные на основе отношения(), могут быть переданы в query.join(), опции - в query.options(), по имени - в query.with_parent().

  • [orm]

    Исправлена ошибка, при которой атрибут mapper.order_by игнорировался во «внутреннем» запросе внутри подзапроса, требующего дополнительной загрузки. . Также в 0.6.9.

    References: #2287

  • [orm]

    Identity map .discard() использует dict.pop(,None) вместо «del», чтобы избежать KeyError/предупреждения при неопределенном сносе gc

    References: #2267

  • [orm]

    Исправлена ошибка в новом композитном рерайте, когда опция deferred=True не работала из-за отсутствия импорта

    References: #2253

  • [orm]

    Восстановлен аргумент «comparator_factory» в composite(), удаленный при выпуске 0.7.

    References: #2248

  • [orm]

    Исправлена ошибка в query.join(), которая возникала в сложных сценариях с несколькими пересекающимися путями, когда одна и та же таблица могла быть присоединена дважды. Огромное спасибо Дэйву Витеку за отличное исправление.

    References: #2247

  • [orm]

    Query преобразует значение OFFSET, равное нулю, при нарезке в None, чтобы не вызывать ненужные предложения OFFSET.

  • [orm]

    Исправлена ситуация, когда отображатель не мог полностью обновить внутреннее состояние, когда отношение на новом отображателе устанавливало обратную ссылку на первый отображатель.

  • [orm]

    Исправлена ошибка, из-за которой при переопределении __eq__() ленивая загрузка отношения многие-к-одному попадала на __eq__() и терпела неудачу. Не относится к версии 0.6.9.

    References: #2260

  • [orm]

    Вызов class_mapper() и передача объекта, который не является «типом» (т.е. классом, который потенциально может быть отображен), теперь вызывает информативную ошибку ArgumentError, а не UnmappedClassError.

    References: #2196

  • [orm]

    Новый крючок событий, MapperEvents.after_configured(). Вызывается после завершения шага configure() и фактического воздействия на мапперы. Теоретически это событие вызывается один раз для каждого приложения, если только не создаются новые отображения после того, как существующие уже были использованы.

  • [orm]

    Когда открытая сессия очищается от мусора, оставшиеся в ней объекты считаются отсоединенными при добавлении их в новую сессию. Это достигается дополнительной проверкой того, что предыдущий «session_key» не существует в пуле сессий.

    References: #2281

  • [orm]

    Новые декларативные возможности:

    • Метод __declare_last__() устанавливает слушателя событий для метода класса, который будет вызываться, когда картографы завершат последний шаг «configure».

    • Флаг __abstract__. При наличии этого флага класс вообще не будет отображаться.

    • Новые вспомогательные классы ConcreteBase, AbstractConcreteBase. Позволяют использовать конкретные отображения с помощью декларативных, которые автоматически устанавливают «polymorphic_union» при вызове шага «configure» mapper.

    • Сам отображатель имеет полуприватные методы, которые позволяют назначить выбираемый параметр «with_polymorphic» отображателю после того, как он уже сконфигурирован.

    References: #2239

  • [orm]

    Declarative будет предупреждать, если база подкласса использует @declared_attr для обычного столбца - этот атрибут не распространяется на подклассы.

    References: #2283

  • [orm]

    Целое число «id», используемое для связи отображаемого экземпляра с принадлежащей ему сессией, теперь генерируется функцией генерации последовательности, а не id(Session), чтобы исключить возможность того, что переработанные значения id() приведут к некорректному результату, нет необходимости проверять, что объект действительно находится в сессии.

    References: #2280

  • [orm]

    Поведенческое улучшение: пустые конъюнкции, такие как and_() и or_(), будут сглаживаться в контексте вложенной конъюнкции, т.е. and_(x, or_()) будет давать „X“, а не „X AND ()“.

    References: #2257

  • [orm]

    Исправлена ошибка, связанная с вычислением списка «from» для элемента select(). Теперь вычисление списка «from» происходит с задержкой, так что если в конструкции используется объект Column, который еще не привязан к таблице, но впоследствии будет привязан к таблице, то SQL будет генерироваться с использованием таблицы в качестве FROM. Это изменение довольно сильно повлияло на механику вычисления списка FROM, а также коллекции «коррелятов», поскольку некоторые схемы «адаптации клаузеров» (они очень активно используются в ORM) полагались на то, что коллекция «froms» обычно кэшируется до завершения адаптации. Переработка позволяет сделать так, что коллекция «froms» может быть очищена и сгенерирована заново в любое время.

    References: #2261

  • [orm]

    Исправлена ошибка, из-за которой метод with_only_columns() в Select не выполнялся, если передавался selectable. Также в 0.6.9.

    References: #2270

examples

  • [examples]

    Скорректирован пример dictlike-polymorphic.py для применения CAST таким образом, чтобы он работал на PG, других базах данных. Также в 0.6.9.

    References: #2266

engine

  • [engine]

    Метод recreate() во всех классах пулов использует self.__class__ для получения типа создаваемого пула в случае подклассификации. Обратите внимание, что обычно нет необходимости в подклассах пулов.

    References: #2254

  • [engine]

    Улучшена журнализация многопараметрических операторов, длинные списки связанных наборов параметров будут сжиматься с информативным индикатором происходящего сжатия. В сообщениях об исключениях используется то же улучшенное форматирование.

    References: #2243

  • [engine]

    Добавлен необязательный аргумент «sa_pool_key» в pool.manage(dbapi).connect(), так что сериализация args не требуется.

  • [engine]

    Разрешение точек входа, поддерживаемое функцией create_engine(), теперь поддерживает разрешение отдельных драйверов DBAPI поверх встроенного или разрешенного в качестве точки входа диалекта, используя стандартную нотацию „+“ - перед разрешением в качестве точки входа она преобразуется в „.“.

    References: #2286

  • [engine]

    Добавлено исключение catch + предупреждение для шага «return unicode detection» в connect, позволяющее базам данных, аварийно завершающим работу с NVARCHAR, продолжить инициализацию, предполагая, что тип NVARCHAR не реализован.

    References: #2299

schema

  • [schema]

    Модифицирована функция Column.copy() для использования _constructor(), которая по умолчанию использует self.__class__ для создания нового объекта. Это позволяет упростить поддержку подклассов Column.

    References: #2284

  • [schema]

    В классы SchemaItem добавлена несколько более удобная функция __repr__(). Обратите внимание, что repr здесь не может полностью поддерживать идею «repr - это конструктор», поскольку элементы схемы могут быть очень глубоко вложенными/циклическими, иметь позднюю инициализацию некоторых вещей и т.д.

    References: #2223

postgresql

  • [postgresql]

    В Index() добавлен аргумент «postgresql_using», производящий предложение USING для указания реализации индекса для PG. . За исправление спасибо Райану П. Келли.

    References: #2290

  • [postgresql]

    Добавлен параметр client_encoding в create_engine() при использовании диалекта postgresql+psycopg2; при подключении вызывается метод psycopg2 set_client_encoding() с указанным значением.

    References: #1839

  • [postgresql]

    Исправлена ошибка, связанная с тем, что аналогичное поведение модифицированного индекса в PG 9 влияло на отражение первичного ключа по переименованному столбцу. Также в 0.6.9.

    References: #2141, #2291

  • [postgresql]

    Функции отражения для таблиц, последовательностей больше не чувствительны к регистру. Имена могут отличаться только регистром и будут корректно различаться.

    References: #2256

  • [postgresql]

    Использование атомарного счетчика в качестве источника «случайных чисел» для имен курсоров на стороне сервера; в редких случаях были зарегистрированы конфликты.

  • [postgresql]

    Сужено допущение при отражении таблицы со ссылкой на внешний ключ со схемой в текущем пути поиска; явная схема будет применена к таблице со ссылкой только в том случае, если она действительно совпадает со схемой ссылающейся таблицы, которая также имеет явную схему. Ранее предполагалось, что «текущая» схема является синонимом полного пути_поиска.

    References: #2249

mysql

  • [mysql]

    в CREATE TABLE опция COLLATE будет стоять после CHARSET, что, по-видимому, является частью произвольных правил MySQL относительно того, будет ли это работать или нет. Также в 0.6.9.

    References: #2225

  • [mysql]

    В конструкцию Index добавлен параметр mysql_length, задающий «длину» для индексов.

    References: #2293

sqlite

  • [sqlite]

    Обеспечена выдача одинаковой ошибки ValueError для недопустимой строки даты/времени/времени, разобранной из базы данных, независимо от того, используются ли расширения C или нет.

mssql

  • [mssql]

    Изменения, направленные на поддержку FreeTDS 0.91 с помощью Pyodbc. В частности, при обнаружении FreeTDS 0.91 строковые привязки передаются как объекты Python unicode, а при обнаружении таблицы используется CAST(? AS NVARCHAR). Тем не менее, я бы продолжал характеризовать поведение Pyodbc + FreeTDS 0.91 как довольно плохое, все еще существует множество запросов, таких как используемые в reflection, которые вызывают дамп ядра в Linux, и они вообще не могут быть использованы в OSX, MemoryErrors в изобилии и просто сломанная поддержка unicode.

    References: #2273

  • [mssql]

    Начиная с версии 0.8 поведение =/!= при сравнении скалярного select со значением больше не будет выдавать IN/NOT IN; это поведение является слишком жестким (используйте in_(), если хотите выдать IN) и теперь выдает предупреждение об устаревании. Чтобы сразу получить поведение 0.8 и убрать предупреждение, на сайте https://www.sqlalchemy.org/docs/07/dialects/mssql.html#scalar-select-comparisons приведен рецепт компилятора, позволяющий переопределить поведение функции visit_binary().

    References: #2277

  • [mssql]

    »0» принимается в качестве аргумента для функции limit(), которая выдает «TOP 0».

    References: #2222

oracle

  • [oracle]

    Исправлен ReturningResultProxy для диалекта zxjdbc… Регрессия по сравнению с 0.6.

    References: #2272

  • [oracle]

    Тип String теперь генерирует VARCHAR2 в Oracle, который рекомендуется использовать в качестве VARCHAR по умолчанию. В диалект Oracle также добавлены явные VARCHAR2 и NVARCHAR2. Использование NVARCHAR по-прежнему генерирует «NVARCHAR2» - на Oracle нет «NVARCHAR» - это остается небольшим нарушением политики «прописные типы всегда дают именно это». VARCHAR по-прежнему генерирует «VARCHAR», что соответствует политике. Если Oracle когда-нибудь определит «VARCHAR» как что-то другое, как они утверждают (IMHO этого никогда не произойдет), то тип будет доступен.

    References: #2252

misc

  • [types]

    Дополнительные ключевые слова-аргументы к базовому типу Float, помимо «precision» и «asdecimal», игнорируются; добавлено предупреждение об устаревании здесь и дополнительная документация, связанная с

    References: #2258

  • [ext]

    SQLSoup не будет включен в версию 0.8 SQLAlchemy; несмотря на его полезность, мы хотели бы, чтобы сам SQLAlchemy был ориентирован на одну парадигму использования ORM. Мы надеемся, что SQLSoup вскоре будет вытеснен сторонним проектом.

    References: #2262

  • [ext]

    В AssociationProxy добавлены аксессоры local_attr, remote_attr, attr, обеспечивающие быстрый доступ к проксируемым атрибутам на уровне класса.

    References: #2236

  • [ext]

    Изменен метод update() для ассоциативного прокси-словаря, в котором для различения update({}) и update((a, b)) используется подход «утиной типизации», т.е. проверка на «ключи». Ранее передача словаря, содержащего кортежи в качестве ключей, неверно интерпретировалась как последовательность.

    References: #2275

0.7.2

Released: Sun Jul 31 2011

orm

  • [orm]

    Расширение возможностей: при загрузке объединенных и подзапросов теперь будет выполняться обход уже присутствующих связанных объектов и коллекций в поисках незаполненных атрибутов во всем диапазоне заданной ускоренной загрузки, так что ускоренная загрузка, заданная через отображения или опции запроса, безоговорочно выполняется для всей глубины, заполняя все, что еще не заполнено. Ранее такой обход останавливался, если связанный объект или коллекция уже присутствовали, что приводило к противоречивому поведению (хотя и позволяло сэкономить на загрузках/циклах для уже загруженного графа). Для subqueryload это означает, что дополнительные операторы SELECT, выдаваемые subqueryload, будут вызываться безоговорочно, независимо от того, какая часть существующего графа уже присутствует (отсюда и противоречивость). Прежнее поведение «остановки» остается в силе, когда запрос является результатом инициированной атрибутами lazyload, поскольку в противном случае итерация коллекции в стиле «N+1» может стать неоправданно дорогой, когда один и тот же связанный объект встречается неоднократно. Существует также пока непубличный генеративный метод Query _with_invoke_all_eagers(), который выбирает старое/новое поведение

    References: #2213

  • [orm]

    Переработка «обхода с заменой» в ORM при изменении селектов на псевдонимы вещей (т.е. адаптация клаузул) включает исправление многократно вложенных конструкций any()/has() в структуре объединенных таблиц.

    References: #2195

  • [orm]

    Исправлена ошибка, при которой запрос query.join() + aliased=True из объединенной структуры inh в себя на relationship() с условием join на дочерней таблице неправомерно преобразовывал ведущую сущность в объединенную. Также в 0.6.9.

    References: #2234

  • [orm]

    Исправлена ошибка из 0.6, когда при выполнении Session.add() по отношению к объекту, содержащему None в коллекции, возникало внутреннее исключение. Вернули это к поведению 0.6, которое заключается в том, что None принимается, но, очевидно, ничего не сохраняется. В идеале, коллекции с присутствующим None или при append() должны, по крайней мере, выдавать предупреждение, что рассматривается в 0.8.

    References: #2205

  • [orm]

    Загрузка атрибута deferred() для объекта, в котором не удается найти строку, вызывает ошибку ObjectDeletedError вместо последующего отказа; улучшено сообщение в ObjectDeletedError для включения других условий, кроме простого «delete».

    References: #2191

  • [orm]

    Исправлена регрессия из 0.6, при которой операция get history для некоторых атрибутов, основанных на relationship(), не выполнялась, когда выдавалась lazyload; при определенных условиях это могло срабатывать внутри flush(). Спасибо пользователю, приславшему отличный тест на эту проблему.

    References: #2224

  • [orm]

    Исправлена ошибка, проявляющаяся только в Python 3, при которой сортировка постоянных и отложенных объектов при флеше приводила к некорректному сравнению, если первичный ключ постоянного объекта не являлся целым числом. Также в 0.6.9

    References: #2228

  • [orm]

    Исправлена ошибка, при которой исходное предложение, используемое query.join(), было несовместимо с выражением по столбцу, объединяющим несколько сущностей. Также в 0.6.9

    References: #2197

  • [orm]

    Исправлена ошибка, из-за которой, если в сопоставленном классе переопределялись __hash__() или __eq__() на нестандартные, что является поддерживаемым случаем использования, так как SQLA никогда не должна обращаться к ним, методы обращались к ним, если класс был частью «составного» (т.е. не являющегося единичным) набора результатов. Также в 0.6.9.

    References: #2215

  • [orm]

    В Mapper добавлен публичный атрибут «.validators», представляющий собой неизменяемый словарь всех атрибутов, украшенных декоратором @validates. любезно предоставленный Стефано Фонтанелли

    References: #2240

  • [orm]

    Исправлена тонкая ошибка, приводившая к разрыву SQL при возникновении: column_property() против подзапроса + joinedload + LIMIT + order by the column property(). . Также в 0.6.9

    References: #2188

  • [orm]

    Условие присоединения, создаваемое с помощью функции with_parent, а также при использовании «динамического» отношения к родителю будет генерировать уникальные bindparam, а не некорректно повторять один и тот же bindparam. . Также в 0.6.9.

    References: #2207

  • [orm]

    В mapper.polymorphic_on добавлена та же проверка «только столбцы», которая используется при получении пользовательских аргументов для relationship.order_by, foreign_keys, remote_side и т.д.

  • [orm]

    Исправлена ошибка, при которой сравнение выражения столбца с запросом Query() не вызывало функцию as_scalar() в операторе SELECT для создания скалярного подзапроса, как это происходит при вызове этой функции в Query().subquery().

    References: #2190

  • [orm]

    Исправлена ошибка декларативного характера, когда класс, наследующий от одноименного суперкласса, не работал из-за лишнего поиска имени в реестре _decl_class_registry.

    References: #2194

  • [orm]

    Исправлено утверждение «no statement condition» в Query, которое пыталось подняться, если после вызова from_statement() вызывался генеративный метод. Также в 0.6.9.

    References: #2199

examples

  • [examples]

    Исправлена программа запуска тестов examples/versioning, чтобы не полагаться на тестовые либы SQLAlchemy, nosetests должен запускаться из examples/versioning, чтобы обойти поломку setup.cfg.

  • [examples]

    Исправление в примерах/версиях для выбора правильного внешнего ключа в ситуации с многоуровневым наследованием.

  • [examples]

    Исправлен пример с осколками атрибутов для корректной проверки возможности вызова bind param в стиле 0.7.

engine

  • [engine]

    Контекстный менеджер, предоставляемый Connection.begin(), будет выдавать rollback() при неудачном выполнении commit(), а не только при возникновении исключения.

  • [engine]

    Использование urllib.parse_qsl() в Python 2.6 и выше, отсутствие предупреждения об устаревании cgi.parse_qsl()

    References: #1682

  • [engine]

    Добавлен класс миксина sqlalchemy.ext.DontWrapMixin. Определяемые пользователем исключения этого типа никогда не оборачиваются в StatementException, если они возникают в контексте выполнения оператора.

  • [engine]

    Обертка StatementException будет отображать в сообщении исходный класс исключения.

  • [engine]

    Сбои при подключении, вызывающие ошибку dbapi.Error, будут передавать ошибку в dialect.is_disconnect() и устанавливать флаг «connection_invalidated», если диалект знает, что это потенциально «повторное» условие. Пока реализован только Oracle ORA-01033.

    References: #2201

sql

  • [sql]

    Исправлены две тонкие ошибки, связанные с соответствием столбцов в селекте, одна из которых связана с повторением подзапроса с одной и той же меткой, а другая - с тем, что метка «группируется» и теряет себя. Затронуты.

    References: #2188

schema

  • [schema]

    Новая возможность: метод with_variant() для всех типов. Выдает экземпляр Variant(), специального TypeDecorator, который выбирает использование другого типа в зависимости от используемого диалекта.

    References: #2187

  • [schema]

    Добавлено информативное сообщение об ошибке, когда ForeignKeyConstraint ссылается на имя столбца в родителе, которое не найдено. Также в 0.6.9.

  • [schema]

    Исправлена ошибка, при которой адаптация старой функции append_ddl_listener() передавала неожиданные **kw в событие Table. Таблица не получает kws, событие MetaData в 0.6 получало «tables=somecollection», это поведение сохранено.

    References: #2206

  • [schema]

    Исправлена ошибка, при которой определение «автоинкремента» в таблице Table не срабатывало, если тип не имел значения «affinity», в частности, это происходило при использовании примера UUID на сайте, использующем TypeEngine в качестве «impl».

  • [schema]

    В объекты TypeEngine добавлена улучшенная функция repr(), которая отображает только позиционные аргументы конструктора или kwargs, отклоняющиеся от значения по умолчанию.

    References: #2209

postgresql

  • [postgresql]

    В Index добавлен новый аргумент «postgresql_ops», позволяющий указывать классы операторов PostgreSQL для индексированных столбцов. Предоставлено Филипом Зызневским.

    References: #2198

mysql

  • [mysql]

    Исправлен диалект OurSQL на использование анси-нейтрального символа кавычек «“» для команд XA вместо „»“. . Также в 0.6.9.

    References: #2186

sqlite

  • [sqlite]

    Диалект SQLite больше не убирает кавычки из отражаемого значения по умолчанию, что позволяет работать с CREATE TABLE в обе стороны. Это соответствует другим диалектам, которые также сохраняют точную форму значения по умолчанию.

    References: #2189

mssql

  • [mssql]

    Настроен диалект pyodbc таким образом, что при обнаружении unix-драйверов «Easysoft» связанные значения передаются как байты, а не как юникод. Это поведение аналогично поведению FreeTDS. При определенных обстоятельствах Easysoft дает сбой, если передаются юникоды Python.

oracle

  • [oracle]

    Добавлен ORA-00028 для кодов отключения, для получения кода используйте cx_oracle _Error.code. Также в 0.6.9.

    References: #2200

  • [oracle]

    Добавлена функция ORA-01033 для кодов разъединения, которые могут быть пойманы во время события соединения.

    References: #2201

  • [oracle]

    исправлен тип oracle.RAW, который не генерировал корректный DDL. Также в 0.6.9.

    References: #2220

  • [oracle]

    добавлено слово CURRENT в список зарезервированных слов. Также в 0.6.9.

    References: #2212

  • [oracle]

    Исправлена ошибка в расширении mutable, из-за которой, если один и тот же тип дважды использовался в одном отображении, атрибуты, выходящие за пределы первого, не обрабатывались.

  • [oracle]

    Исправлена ошибка в расширении mutable, из-за которой при установке None или несоответствующего типа возникала ошибка. Теперь принимается значение None, которое присваивает None всем атрибутам, недопустимые значения вызывают ошибку ValueError.

0.7.1

Released: Sun Jun 05 2011

general

  • [general]

    Добавлено обходное решение для ошибки 7511 в Python, когда при неудачной сборке расширения C не возникает соответствующего исключения на Windows 64 bit + VC express.

    References: #2184

orm

  • [orm]

    Каскад «удаление-орфан» теперь разрешен для самореферентных отношений - это связано с тем, что SQLA 0.7 больше не обеспечивает «родитель без дочерних» на уровне ORM; эта проверка оставлена для нулевого внешнего ключа. Связано с

    References: #1912

  • [orm]

    Исправлено новое расширение «mutable» для корректного распространения событий на подклассы; также не нужно создавать несколько слушателей событий для подклассов.

    References: #2180

  • [orm]

    Изменить текст сообщения, возникающего в случае, когда ключ «identity» не определяется при флеше, чтобы включить в него распространенную причину того, что колонка не настроена на корректное определение автоинкремента;. Также в 0.6.8.

    References: #2170

  • [orm]

    Исправлена ошибка, из-за которой коллекция «deleted» на уровне транзакций не очищалась от удаленных состояний, что приводило к ошибке, если они впоследствии становились переходными. Также в 0.6.8.

    References: #2182

engine

  • [engine]

    Утрачиваются ориентированные на схему/SQL методы Connection/Engine, которые никогда не были широко известны и являются избыточными: reflecttable(), create(), drop(), text(), engine.func

  • [engine]

    Скорректирован метод __contains__() строки результата RowProxy таким образом, что внутри строки не генерируется исключение throw; NoSuchColumnError() также будет генерировать свое сообщение независимо от того, может ли конструкция столбца быть приведена к строке. Также в 0.6.8.

    References: #2178

sql

  • [sql]

    Исправлена ошибка, при которой metadata.reflect(bind) закрывала Connection, переданный в качестве аргумента bind. Регрессия по сравнению с 0.6.

  • [sql]

    Упорядочен процесс, в котором Select определяет, что находится в его коллекции „.c“. Поведение идентично, за исключением того, что необработанный ClauseList(), переданный в select([]) (что в любом случае не является документированным случаем), теперь будет разложен на отдельные элементы колонок, а не проигнорирован.

postgresql

  • [postgresql]

    Исправлены некоторые модульные тесты, касающиеся числовых массивов, оператора MATCH. Исправлена потенциальная неточность в работе с плавающей точкой, а некоторые тесты оператора MATCH пока выполняются только в EN-ориентированной локали. . Также в 0.6.8.

    References: #2175

mysql

  • [mysql]

    Юнит-тесты проходят на 100% на MySQL, установленном под windows.

  • [mysql]

    Убран шаг «корректировать регистр», который приводил к ошибке при отражении таблицы в MySQL на windows с именем в смешанном регистре. После некоторых экспериментов с сервером MySQL на windows было установлено, что этот шаг не очень-то помогает; MySQL не возвращает имена FK с правильным регистром и на платформах, отличных от Windows, и удаление этого шага, по крайней мере, позволяет отражению вести себя более похоже на то, что происходит на других ОС. Мы рассматривали возможность предупреждения, но трудно определить, при каких условиях оно может быть выдано, поэтому пока отказались от этой идеи - вместо этого добавили документацию.

    References: #2181

  • [mysql]

    supports_sane_rowcount будет установлено значение False, если используется MySQLdb и DBAPI не предоставляет модуль constants.CLIENT.

sqlite

  • [sqlite]

    Принимать None от cursor.fetchone() при вызове «PRAGMA read_uncommitted» для определения текущего режима изоляции во время подключения и по умолчанию устанавливать SERIALIZABLE; это сделано для поддержки версий SQLite до 3.3.0, не имевших этой возможности.

    References: #2173

0.7.0

Released: Fri May 20 2011

orm

  • [orm]

    Исправлена ошибка, появившаяся в 0.7b4 (!), из-за которой при выполнении query.options(someoption(«несуществующее имя»)) не выдавалась ошибка. Также добавлена дополнительная блокировка ошибок для случаев, когда опция пыталась отстроиться от элемента, основанного на столбце, исправлены некоторые сообщения об ошибках, созданные в

    References: #2069

  • [orm]

    query.count() выдает «count(*)» вместо «count(1)».

    References: #2162

  • [orm]

    Тонкая настройка адаптации предложения запроса при выполнении операций from_self(), union() или других операций типа «select from myself» таким образом, чтобы элементы выражений обычного SQL, добавленные в filter(), order_by() и т.д., которые присутствуют во вложенном запросе «from myself», адаптировались так же, как и элементы выражений ORM, поскольку иначе эти элементы не могут быть легко доступны.

    References: #2155

  • [orm]

    Исправлена ошибка, при которой определение «самореферентного» отношения не давало результата, если объединенный подкласс inh был связан с самим собой, или объединенный подкласс inh был связан с подклассом этого подкласса, в условии присоединения которого отсутствовали столбцы в подклассе. Также в 0.6.8.

    References: #2149

  • [orm]

    mapper() будет игнорировать ненастроенные внешние ключи к несвязанным таблицам при определении условия наследования между родительским и дочерним классом, но будет как обычно поднимать вопрос о неразрешенных столбцах и именах таблиц, относящихся к наследуемой таблице. Это расширенное обобщение поведения, которое уже применялось ранее для декларативных классов. В 0.6.8 реализована более консервативная версия, не меняющая принципиально способ определения условий присоединения.

    References: #2153

  • [orm]

    Ошибкой является вызов query.get(), если заданная сущность не является единой сущностью полного класса или маппером (т.е. колонкой). Это предупреждение об устаревании в версии 0.6.8.

    References: #2144

  • [orm]

    Исправлена потенциальная ошибка KeyError, которая при некоторых обстоятельствах могла возникнуть при работе с картой идентификации, являющейся частью

    References: #2148

  • [orm]

    добавлен метод Query.with_session(), переключающий Query на использование другой сессии.

  • [orm]

    В горизонтальном запросе к шарду должны использоваться опции выполнения для каждого соединения в соответствии с

    References: #2131

  • [orm]

    не_первичный отображатель будет наследовать _идентичность_класса первичного отображателя. Таким образом, не_первичное отображение, созданное для класса, который обычно находится в наследовании, будет выдавать результаты, совместимые с отображением идентичности первичного отображения (также в 0.6.8)

    References: #2151

  • [orm]

    Исправлено сообщение об ошибке «cannot execute syncrule for destination column „q“; mapper „X“ does not map this column» для ссылки на правильный mapper. . Также в 0.6.8.

    References: #2163

  • [orm]

    polymorphic_union() получает опцию «cast_nulls», отключающую использование CAST при выводе помеченных NULL-столбцов.

    References: #1502

  • [orm]

    polymorphic_union() отображает столбцы в их исходном табличном порядке, как в соответствии с первой таблицей/выбираемым элементом в списке полиморфных объединений, в которых они встречаются. (который сам по себе является неупорядоченным отображением, если не передать OrderedDict).

  • [orm]

    Исправлена ошибка, при которой маппер, сопоставленный с анонимным псевдонимом, не работал при использовании логирования, из-за нерасшифрованного знака % в имени псевдонима. Также в 0.6.8.

    References: #2171

examples

  • [examples]

    удалены устаревшие примеры «полиморфных ассоциаций» и заменены обновленным набором примеров, использующих декларативные миксины «generic_associations». В каждом из них представлена альтернативная схема таблицы.

sql

  • [sql]

    Исправлена ошибка, из-за которой вложение метки select() с другой меткой в нее приводило к некорректному экспорту столбцов. Помимо прочего, это приводило к нарушению сопоставления ORM column_property() с другим column_property(). . Также в 0.6.8

    References: #2167

  • [sql]

    Изменена обработка при определении условий присоединения таким образом, что ошибки внешних ключей рассматриваются только между двумя заданными таблицами. То есть t1.join(t2) будет сообщать об ошибках FK, связанных с „t1“ или „t2“, а все, что связано с „t3“, будет пропущено. Это влияет на join(), а также на логику отношений ORM и условия наследования.

  • [sql]

    Некоторые улучшения в обработке ошибок внутри процедуры execute, обеспечивающие реальное закрытие автозакрываемых соединений при возникновении очень необычных ошибок DBAPI.

  • [sql]

    metadata.reflect() и reflection.Inspector() при закрытии соединений, которые были получены изнутри, полагались на GC, что было исправлено.

  • [sql]

    Добавлена явная проверка для случая, когда столбец .name назначен как пустая строка

    References: #2140

  • [sql]

    Исправлена ошибка, из-за которой при передаче FetchedValue колонке server_onupdate не назначался ее родительский «столбец», добавлено тестовое покрытие для всех шаблонов назначения столбцов по умолчанию. также в 0.6.8

    References: #2147

postgresql

  • [postgresql]

    Исправлен разбор psycopg2_version в диалекте psycopg2.

  • [postgresql]

    Исправлена ошибка, затрагивающая PG 9, при которой отражение индекса по столбцу, имя которого изменилось, приводило к ошибке. . Также в 0.6.8.

    References: #2141

mssql

  • [mssql]

    Исправлена ошибка в диалекте MSSQL, при которой псевдонимия, применяемая к таблице с критериями схемы, просачивалась во вложенные операторы select. Также в 0.6.8.

    References: #2169

misc

  • [no_tags]

    В этом разделе описаны изменения, произошедшие с 0.7b4 по 0.7.0. Для обзора того, что нового появилось в SQLAlchemy 0.7, смотрите https://docs.sqlalchemy.org/en/latest/changelog/migration_07.html.

  • [documentation]

    Удалено использование abc «collections.MutableMapping» из документации по ext.mutable, так как он используется некорректно и в любом случае затрудняет понимание примера.

    References: #2152

  • [ext]

    Исправлена ошибка в расширении sqlalchemy.ext.mutable, при которой некорректно обрабатывалось None, некорректно обрабатывались события замены.

    References: #2143

0.7.0b4

Released: Sun Apr 17 2011

general

  • [general]

    Изменен формат CHANGES этого файла. Изменения формата были применены в релизах 0.7.

  • [general]

    Изменения «-declarative» теперь будут перечислены непосредственно под разделом «-orm», поскольку они тесно связаны между собой.

  • [general]

    Изменения серии 0.5 перенесены в файл CHANGES_PRE_06, который заменяет CHANGES_PRE_05.

  • [general]

    Журнал изменений для 0.6.7 и последующих в серии 0.6 теперь приводится только в файле CHANGES в ветке 0.6. В файле CHANGES ветки 0.7 (т.е. в этом файле) все изменения 0.6 перечислены в строчном порядке в той секции 0.7, в которой они были применены (поскольку все изменения 0.6 присутствуют и в 0.7). Изменения, относящиеся к версии 0.6, здесь отмечены, как и различия в реализации/поведении.

orm

  • [orm]

    Исправлена оценка «evaluate» и «fetch» при вызове query.update(), query.delete(). Извлечение записей во всех случаях производится после автопромывки и перед выполнением update/delete, что защищает от присутствия непромытых данных, а также от выхода из строя просроченных объектов во время оценки.

    References: #2122

  • [orm]

    Переформулировано исключение, возникающее при попытке прошить подкласс, не являющийся полиморфным по отношению к супертипу.

    References: #2063

  • [orm]

    Еще корректировка формулировок, когда вариант запроса не может найти целевую сущность. Объясните, что путь должен быть от одной из корневых сущностей.

  • [orm]

    Некоторые исправления в обработке состояний для обратных ссылок, обычно при autoflush=False, когда коллекция с обратными ссылками не могла корректно обрабатывать добавления/удаления без чистого изменения. Спасибо Ричарду Мурри за тестовый пример + патч. (также в 0.6.7).

    References: #2123

  • [orm]

    Добавлены проверки внутри UOW для обнаружения необычного состояния, когда запрашивается UPDATE или DELETE для значения первичного ключа, содержащего NULL.

    References: #2127

  • [orm]

    Некоторые уточнения в истории атрибутов. Дополнительные изменения ожидаются, возможно, в 0.8, но на данный момент история изменена таким образом, что скалярная история не имеет «побочного эффекта» заполнения значения None для не присутствующего значения. Это позволяет немного лучше различать набор None и отсутствие фактических изменений, что также влияет на историю.

    References: #2127

  • [orm]

    при использовании функции from_self() из внутреннего запроса во внешний будет скопировано предложение «имея»; в частности, это приведет к поломке запроса count() в стиле 0.7. (также в 0.6.7)

    References: #2130

  • [orm]

    Метод Query.execution_options() теперь передает эти параметры не в оператор SELECT, а в Connection, что позволяет использовать все доступные опции, включая уровень изоляции и скомпилированный кэш.

    References: #2131

engine

  • [engine]

    Расширение C теперь включено по умолчанию в CPython 2.x с возможностью возврата к чистому python, если компиляция не удается.

    References: #2129

sql

  • [sql]

    Параметр выполнения «compiled_cache» теперь вызывает ошибку, если передается в оператор SELECT, а не в Connection. Ранее она полностью игнорировалась. Возможно, мы рассмотрим возможность работы этой опции на уровне каждого оператора.

    References: #2131

  • [sql]

    Восстановлен конструктор «catchall» для базового класса TypeEngine с предупреждением об устаревании. Таким образом, код, выполняющий что-то вроде Integer(11), по-прежнему работает успешно.

  • [sql]

    Исправлена ошибка, из-за которой MetaData(), возвращающаяся после распиновки, не отслеживала новые объекты, которые она отслеживает сейчас, т.е. коллекцию объектов Sequence, список имен схем.

    References: #2104

  • [sql]

    Ключевые слова limit/offset в select(), а также значение, передаваемое в select.limit()/offset(), будут приводиться к целому числу. (также в 0.6.7)

    References: #2116

  • [sql]

    Исправлена ошибка, при которой предложение «from», собираемое из предложения over(), представляло собой itertools.chain(), а не список, вызывая ошибку типа «can only concatenate list» при комбинировании с другими предложениями.

  • [sql]

    Исправлено некорректное использование «,» в предложении over(), которое помещалось между предложениями «partition» и «order by».

    References: #2134

  • [sql]

    Теперь функционируют события «до/после» прикрепления для PrimaryKeyConstraint, добавлены тесты для событий «до/после» для всех типов ограничений.

    References: #2105

  • [sql]

    В либу выражений добавлены явные конструкции true()/false() - правила коэрцитивности будут перехватывать «False»/»True» в эти конструкции. В 0.6 эти конструкции обычно преобразовывались непосредственно в строку, что в 0.7 уже не принимается.

    References: #2117

schema

  • [schema]

    Флаг „useexisting“ для Table заменен новой парой флагов „keep_existing“ и „extend_existing“. Флаг „extend_existing“ эквивалентен флагу „useexisting“ - возвращается существующая таблица и добавляются дополнительные элементы конструктора. При использовании флага „keep_existing“ возвращается существующая таблица, но дополнительные элементы конструктора не добавляются - эти элементы применяются только при новом создании таблицы.

    References: #2109

postgresql

  • [postgresql]

    Теперь поддерживается Psycopg2 для Python 3.

  • [postgresql]

    Исправлена поддержка точных чисел при использовании pg8000.

    References: #2132

sqlite

  • [sqlite]

    Исправлена ошибка, при которой отражение внешнего ключа, созданного как «REFERENCES <tablename>» без имени col, приводило к ошибке. (также в 0.6.7)

    References: #2115

oracle

  • [oracle]

    При использовании имен столбцов, требующих кавычек для самого столбца или для генерируемого именем параметра связывания, например, имен со специальными символами, подчеркиваниями, неаскриптивными символами, теперь правильно транслируются ключи параметров связывания при обращении к cx_oracle. (Также в 0.6.7)

    References: #2100

  • [oracle]

    В диалекте Oracle добавлен флаг use_binds_for_limits=False create_engine(), который выводит значения LIMIT/OFFSET в строку, а не в виде биндов, что, как сообщается, модифицирует план выполнения, используемый Oracle. (Также в 0.6.7)

    References: #2116

misc

  • [types]

    В число основных типов добавлен REAL. Поддерживается PostgreSQL, SQL Server, MySQL, SQLite. Обратите внимание, что версии SQL Server и MySQL, в которых добавлены дополнительные аргументы, также доступны в этих диалектах.

    References: #2081

  • [types]

    Добавлен декоратор @event.listens_for(), задающий target + имя события, применяющий декорированную функцию в качестве слушателя.

    References: #2106

  • [pool]

    AssertionPool теперь хранит трассировку, указывающую, где было получено текущее проверенное соединение; эта трассировка сообщается в утверждении, поднимаемом при повторной одновременной проверке; любезно предоставлено Gunnlaugur Briem

    References: #2103

  • [pool]

    Функция «pool.manage» больше не использует pickle для хэширования аргументов для каждого пула.

  • [documentation]

    Документированные типы SQLite DATE/TIME/DATETIME. (также в 0.6.7)

    References: #2029

  • [documentation]

    Исправлена документация по мутабельным расширениям для отображения корректных методов ассоциаций типов.

    References: #2118

0.7.0b3

Released: Sun Mar 20 2011

general

  • [general]

    Много исправлений в юнит-тестах при запуске под PyPy (любезно предоставлено Алексом Гейнором).

orm

  • [orm]

    Изменен основной подход к query.count(). Теперь query.count() во всех случаях работает точно:

    запрос.

    from_self(func.count(literal_column(„1“))). scalar()

    То есть «select count(1) from (<полный запрос>)». Это приводит к созданию подзапроса во всех случаях, но значительно упрощает все попытки count(), которые все равно не удавались во многих сценариях, особенно при наследовании объединенных таблиц и других объединениях. Если подзапрос, создаваемый для очень простого подсчета, действительно является проблемой, используйте query(func.count()) в качестве оптимизации.

    References: #2093

  • [orm]

    некоторые изменения в карте идентификаторов, касающиеся редких обращений к weakref во время итераций. Мьютекс был удален, так как он, по-видимому, может вызвать реентерабельный (т.е. в одном потоке) тупик, возможно, когда gc собирает объекты в точке итерации, чтобы получить больше памяти. Есть надежда, что «словарь изменился во время итерации» будет встречаться крайне редко, поскольку итерационные методы внутренне получают полный список объектов за один вызов values(). В примечании 0.6.7 приведено более консервативное исправление, сохраняющее мьютекс на месте.

    References: #2087

  • [orm]

    Внесение изменений в блок работы заставляет его упорядочивать флеши по зависимостям relationship(), даже если данные объекты не имеют в памяти межатрибутных ссылок, что было характерно для 0.5 и более ранних версий, поэтому флеши родителя/ребенка с набором только внешних/первичных ключей будут успешными. При этом в 0.6 и выше не генерируется тонна бесполезных внутренних структур зависимостей внутри flush, которые не соответствуют состоянию, фактически находящемуся в текущем flush.

    References: #2082

  • [orm]

    Улучшены сообщения об ошибках, выдаваемые при запросе к сущностям только в столбцах в сочетании с (как правило, некорректным) использованием опций загрузчика, когда родительская сущность присутствует не полностью.

    References: #2069

  • [orm]

    Исправлена ошибка в query.options(), из-за которой путь, примененный к lazyload с использованием строковых ключей, мог перекрывать одноименный атрибут на неправильной сущности. В примечании 0.6.7 это исправлено более консервативно.

    References: #2098

examples

  • [examples]

    Обновлены примеры ассоциаций и ассоциативных прокси для использования декларативности, добавлен новый пример dict_of_sets_with_default.py, пример ассоциативного прокси, который «расширяет границы».

  • [examples]

    Пример кэширования Beaker позволяет использовать аргумент «query_cls» в функции query_callable(). (также в 0.6.7)

    References: #2090

engine

  • [engine]

    Исправлена ошибка регрессии AssertionPool.

    References: #2097

  • [engine]

    Изменено исключение, возникающее при указании недопустимого диалекта, на ArgumentError.

    References: #2060

sql

  • [sql]

    Добавлено полностью описательное сообщение об ошибке для случая, когда Column является подклассом и _make_proxy() не может создать копию из-за ошибки TypeError в конструкторе. В этом случае должен быть реализован метод _constructor.

  • [sql]

    Добавлено новое событие «column_reflect» для объектов Table. Получает информационный словарь о колонке до того, как объект будет сгенерирован в рамках отражения, и позволяет модифицировать словарь для управления большинством аспектов результирующей колонки, включая ключ, имя, тип, информационный словарь.

    References: #2095

  • [sql]

    Для того чтобы событие «column_reflect» использовалось для конкретных объектов Table, а не для всех экземпляров Table, к объекту Table можно добавлять слушателей непосредственно при его построении с помощью нового аргумента «listeners» - списка кортежей вида (<eventname>, <fn>), которые применяются к таблице до начала процесса отражения.

  • [sql]

    Добавлена новая общая функция «next_value()», принимающая в качестве аргумента объект Sequence и выдающая соответствующую строку генерации «следующего значения» на целевой платформе, если таковая поддерживается. Также предусмотрен метод «.next_value()» для самого Sequence.

    References: #2085

  • [sql]

    func.next_value() или другое SQL-выражение может быть встроено непосредственно в конструкцию insert(), и если в сочетании с колонкой первичного ключа используется неявное или явное «возвращение», то вновь сгенерированное значение будет присутствовать в result.inserted_primary_key.

    References: #2084

  • [sql]

    Добавлены аксессоры для ResultProxy «returns_rows», «is_insert» (также в 0.6.7)

    References: #2089

postgresql

  • [postgresql]

    Добавлена функция RESERVED_WORDS для диалекта postgresql. (также в 0.6.7)

    References: #2092

  • [postgresql]

    Исправлен тип BIT, позволяющий использовать параметр «длина», «изменяющийся» параметр. Также исправлено отражение. (также в 0.6.7)

    References: #2073

mssql

  • [mssql]

    Переписан запрос, используемый для получения определения представления, как правило, при использовании интерфейса Inspector, с использованием sys.sql_modules вместо информационной схемы, что позволяет полностью возвращать определения представлений длиной более 4000 символов. (также в 0.6.7)

    References: #2071

misc

  • [declarative]

    Аргументы в __mapper_args__, которые не являются «хэшируемыми», не принимаются за всегда хэшируемые, возможно, столбцовые аргументы. (также в 0.6.7)

    References: #2091

  • [firebird]

    Флаг «implicit_returning» в функции create_engine() выполняется, если он установлен в False. (также в 0.6.7)

    References: #2083

  • [informix]

    Добавлен диалект RESERVED_WORDS informix. (также в 0.6.7)

    References: #2092

  • [ext]

    Класс horizontal_shard ShardedSession принимает в качестве аргумента конструктора общий аргумент сессии «query_cls», что позволяет в дальнейшем создавать подклассы ShardedQuery. (также в 0.6.7)

    References: #2090

0.7.0b2

Released: Sat Feb 19 2011

orm

  • [orm]

    Исправлена ошибка, при которой Session.merge() вызывал событие load() со слишком малым числом аргументов.

    References: #2053

  • [orm]

    Добавлена логика, которая предотвращает генерацию событий от расширения MapperExtension или SessionExtension от генерации «ничегонеделающих» событий для всех не переопределенных методов.

    References: #2052

examples

  • [examples]

    Пример Beaker теперь учитывает „limit“ и „offset“, параметры связывания во встроенных предложениях FROM (например, при использовании union() или from_self()) при генерации ключа кэша.

sql

  • [sql]

    Переименован класс событий EngineEvents в ConnectionEvents. Поскольку к этим классам никогда не обращаются напрямую в коде конечного пользователя, для конечных пользователей это является исключительно изменением документации. Также упрощен способ внутренней привязки событий к двигателям и соединениям.

    References: #2059

  • [sql]

    Конструкция Sequence() при передаче ей объекта MetaData() через аргумент „metadata“ будет включаться в операторы CREATE/DROP в рамках metadata.create_all() и metadata.drop_all(), включая логику «checkfirst».

    References: #2055

  • [sql]

    Метод Column.references() теперь возвращает True, если в нем есть внешний ключ, ссылающийся именно на данный столбец, а не только на его родительскую таблицу.

    References: #2064

postgresql

  • [postgresql]

    Исправлена ошибка из 0.6, когда типы SMALLINT и BIGINT генерировали SERIAL для целочисленного PK-столбца, вместо SMALLINT и BIGSERIAL

    References: #2065

misc

  • [declarative]

    Исправлена ошибка, из-за которой композит() с объектами Column, размещенными в строке, не инициализировался. Теперь объекты Column могут быть как встроенными в composite(), так и внешними и подтягиваться по имени или ссылке на объект.

    References: #2058

  • [declarative]

    Исправить сообщение об ошибке, ссылающееся на старое имя @classproperty, на ссылку @declared_attr (также в 0.6.7)

    References: #2061

  • [declarative]

    словарь в конце кортежа __table_args__ теперь необязателен.

    References: #1468

  • [ext]

    Ассоциативный прокси теперь имеет корректное поведение для any(), has() и contains() при проксировании скалярного атрибута «многие-к-одному» в коллекцию «один-ко-многим» (т.е. обратное «типичному» случаю использования ассоциативного прокси)

    References: #2054

0.7.0b1

Released: Sat Feb 12 2011

general

  • [general]

    Новая система событий, заменяющая все расширения, слушатели и т.д.

    References: #1902

  • [general]

    Улучшение ведения журнала

    References: #1926

  • [general]

    Установка больше не устанавливает плагин Nose

    References: #1949

  • [general]

    Псевдоним «sqlalchemy.exceptions» в sys.modules был удален. Базовые исключения SQLA доступны через «from sqlalchemy import exc». Псевдоним «exceptions» для «exc» пока остается в «sqlalchemy», он просто не пропатчен в sys.modules.

orm

  • [orm]

    Более лаконичная форма query.join(target, onclause)

    References: #1923

  • [orm]

    Гибридные атрибуты, реализует/заменяет синоним()

    References: #1903

  • [orm]

    Переработка композитов

    References: #2008

  • [orm]

    Расширение события мутации, заменяет «mutable=True».

  • [orm]

    Мутабельность PickleType и ARRAY по умолчанию отключена

    References: #1980

  • [orm]

    Упрощенное назначение polymorphic_on

    References: #1895

  • [orm]

    Смыв сирот, не имеющих родителей, разрешен

    References: #1912

  • [orm]

    Скорректирован шаг учета flush, который должен происходить до фиксации в случае autocommit=True. Это позволяет autocommit=True корректно работать с expire_on_commit=True, а также позволяет сессионным крючкам post-flush работать в том же транзакционном контексте, что и при autocommit=False.

    References: #2041

  • [orm]

    Предупреждения, выдаваемые, когда члены коллекции, скалярные референты не являются частью flush

    References: #1973

  • [orm]

    Конструкции, не являющиеся производными от Table, могут быть отображены

    References: #1876

  • [orm]

    Имена меток кортежей в Query Improved

    References: #1942

  • [orm]

    Атрибуты сопоставленных столбцов сначала ссылаются на наиболее специфичный столбец

    References: #1892

  • [orm]

    Сопоставление с объединениями с двумя или более одноименными столбцами требует явного объявления

    References: #1896

  • [orm]

    Mapper требует, чтобы колонка polymorphic_on присутствовала в отображаемом selectable

    References: #1875

  • [orm]

    compile_mappers() переименована в configure_mappers(), упрощены внутренние настройки конфигурации

    References: #1966

  • [orm]

    функция aliased(), если ей передать элемент SQL FromClause (т.е. не сопоставленный класс), будет возвращать element.alias(), а не выдавать ошибку AliasedClass.

    References: #2018

  • [orm]

    Session.merge() будет сверять идентификатор версии входящего состояния с идентификатором версии в базе данных, предполагая, что в связке используются идентификаторы версий и входящему состоянию присвоен идентификатор версии, и при несовпадении выдаст ошибку StaleDataError.

    References: #2027

  • [orm]

    Session.connection(), Session.execute() принимают „bind“, чтобы позволить операциям execute/connection участвовать в открытой транзакции движка в явном виде.

    References: #1996

  • [orm]

    Query.join(), Query.outerjoin(), eagerload(), eagerload_all(), другие больше не допускают в качестве аргументов списки атрибутов (т.е. форма option([x, y, z]), deprecated since 0.5)

  • [orm]

    ScopedSession.mapper удален (deprecated since 0.5).

  • [orm]

    Горизонтальный запрос к осколку помещает „shard_id“ в context.attributes, где он доступен по событию «load()».

    References: #2031

  • [orm]

    Единый вызов contains_eager() для нескольких сущностей укажет, что все коллекции на этом пути должны быть загружены, вместо того чтобы требовать отдельных вызовов contains_eager() для каждой конечной точки (что никогда не было правильно документировано).

    References: #2032

  • [orm]

    Поле «name», используемое в orm.aliased(), теперь отображается в результирующем SQL-запросе.

  • [orm]

    Сессия weak_instance_dict=False является устаревшей.

    References: #1473

  • [orm]

    Исключение возникает в том необычном случае, когда append или подобное событие в коллекции происходит после разыменования родительского объекта, что не позволяет пометить родительский объект как «грязный» в сессии. В версии 0.6.6 это было предупреждением.

    References: #2046

  • [orm]

    Query.distinct() теперь принимает в качестве *args выражения столбцов, интерпретируемые диалектом PostgreSQL как DISTINCT ON (<expr>).

    References: #1069

  • [orm]

    Дополнительная настройка загрузки отношений «многие-к-одному» при выполнении flush(). Изменение в версии 0.6.6 ([ticket:2002]) требовало, чтобы во время flush() происходило больше «ненужных» загрузок m2o. Были добавлены дополнительные режимы загрузки, чтобы сократить SQL, выдаваемый в этом конкретном случае, и при этом получить информацию, необходимую для flush, чтобы ничего не упустить.

    References: #2049

  • [orm]

    значение «passive», передаваемое в attributes.get_history(), должно быть одной из констант, определенных в пакете attributes. Передача значения True или False является устаревшей.

  • [orm]

    Добавлен аргумент name для Query.subquery(), позволяющий назначить объекту псевдонима фиксированное имя. (также в 0.6.7)

    References: #2030

  • [orm]

    Выдается предупреждение, если у мэппера, наследующего объединенную таблицу, нет первичных ключей в локально отображаемой таблице (но есть ключи в таблице суперкласса). (также в 0.6.7)

    References: #2019

  • [orm]

    Исправлена ошибка, при которой «средний» класс в полиморфной иерархии не имел столбца „polymorphic_on“, если в нем не был указан также „polymorphic_identity“, что приводило к странным ошибкам при обновлении, неправильной загрузке класса при запросе от этой цели. Также выдается корректный критерий WHERE при использовании наследования одной таблицы. (также в 0.6.7)

    References: #2038

  • [orm]

    Исправлена ошибка, при которой столбец, имеющий значение по умолчанию на стороне SQL или сервера, исключенный из отображения с помощью include_properties или exclude_properties, приводил к ошибке UnmappedColumnError. (также в 0.6.7)

    References: #1995

  • [orm]

    Предупреждение выдается в том необычном случае, когда append или подобное событие в коллекции происходит после того, как родительский объект был разыменован, что не позволяет пометить родительский объект как «грязный» в сессии. Это будет исключением в версии 0.7. (также в 0.6.7)

    References: #2046

sql

  • [sql]

    В классы FunctionElement добавлена функция over(), метод которой порождает конструкцию _Over(), которая в свою очередь порождает «оконные функции», т.е. «<оконная функция> OVER (PARTITION BY <раздел по>, ORDER BY <порядок по>)».

    References: #1844

  • [sql]

    В формулах LIMIT/OFFSET теперь используются параметры привязки

    References: #805

  • [sql]

    Функция select.distinct() теперь принимает в качестве *args выражения столбцов, интерпретируемые диалектом PostgreSQL как DISTINCT ON (<expr>). Заметим, что это уже было доступно через передачу списка в аргумент ключевого слова distinct в select().

    References: #1069

  • [sql]

    select.prefix_with() принимает несколько выражений (т.е. *expr), ключевой аргумент „prefix“ в select() принимает список или кортеж.

  • [sql]

    Передача строки в аргумент distinct ключевого слова select() для выделения специальных ключевых слов MySQL (DISTINCTROW и т.п.) устарела - используйте для этого prefix_with().

  • [sql]

    TypeDecorator работает с колонками с первичным ключом

    References: #2005, #2006

  • [sql]

    В конструкциях DDL() теперь исключаются знаки процента

    References: #1897

  • [sql]

    Table.c / MetaData.tables немного доработаны, не допускают прямой мутации

    References: #1893, #1917

  • [sql]

    Вызываемые переменные, переданные в bindparam(), не оцениваются

    References: #1950

  • [sql]

    types.type_map теперь является приватным, types._type_map

    References: #1870

  • [sql]

    Подчеркнуты методы непубличного пула

    References: #1982

  • [sql]

    Добавлена поддержка NULLS FIRST и NULLS LAST. Она реализована в виде расширения операторов asc() и desc(), которое называется nullsfirst() и nullslast().

    References: #723

  • [sql]

    Конструкция Index() может быть создана в строке с определением таблицы, используя строки в качестве имен столбцов, как альтернатива созданию индекса вне таблицы.

  • [sql]

    execution_options() on Connection принимает аргумент «isolation_level», устанавливает уровень изоляции транзакций для данного соединения только до возврата в пул соединений, для тех бэкендов, которые это поддерживают (SQLite, PostgreSQL)

    References: #2001

  • [sql]

    В столбце первичного ключа можно использовать TypeDecorator типа Integer, при этом функция «autoincrement» различных диалектов, а также флаг «sqlite_autoincrement» будут считать, что тип базы данных основан на Integer.

    References: #2005

  • [sql]

    Установлена согласованность при наличии server_default в столбце Integer PK. SQLA не осуществляет предварительную выборку таких столбцов, и они не возвращаются в cursor.lastrowid (DBAPI). Убедился, что все бэкенды стабильно возвращают None в result.inserted_primary_key для этих столбцов. Что касается отражения для данного случая, то отражение int PK col с серверным_дефолтом устанавливает флаг «автоинкремент» в False, за исключением случая PG SERIAL col, где мы обнаружили последовательный дефолт.

    References: #2020, #2021

  • [sql]

    При определении содержимого result.inserted_primary_key применяются процессоры строк результата с учетом предварительно выполненных значений SQL по умолчанию, а также cursor.lastrowid.

    References: #2006

  • [sql]

    Параметры привязки, присутствующие в «предложении columns» select, теперь автоматически маркируются, как и другие «анонимные» предложения, что, помимо прочего, позволяет их «типу» быть значимым при извлечении строки, как в процессорах строк результатов.

  • [sql]

    TypeDecorator присутствует в пространстве импорта «sqlalchemy».

  • [sql]

    Ошибки, не связанные с DBAPI, возникающие в области действия вызова execute(), теперь оборачиваются в sqlalchemy.exc.StatementError, при этом указывается текст SQL-оператора и repr() params. Это облегчает выявление неудачного выполнения оператора до того, как в дело вступит DBAPI.

    References: #2015

  • [sql]

    Концепция связывания «.bind» непосредственно с ClauseElement была явно перенесена в Executable, т.е. в миксин, описывающий ClauseElements, которые представляют собой исполняемые на движке конструкции. Это изменение является улучшением внутренней организации и вряд ли повлияет на реальное использование.

    References: #2048

  • [sql]

    Column.copy(), используемая в table.tometadata(), копирует атрибут „doc“. (также в 0.6.7)

    References: #2028

  • [sql]

    Добавлены некоторые defs в расширение resultproxy.c, чтобы расширение компилировалось и работало на Python 2.4. (также в 0.6.7)

    References: #2023

  • [sql]

    Расширение компилятора теперь поддерживает переопределение компиляции по умолчанию выражения expression._BindParamClause, в результате чего автоматически генерируемые бинды в предложениях VALUES/SET операторов insert()/update() также будут использовать новые правила компиляции. (также в 0.6.7)

    References: #2042

  • [sql]

    Диалект SQLite теперь использует NullPool для файловых баз данных

    References: #1921

  • [sql]

    Путь, указываемый в качестве местоположения базы данных sqlite, теперь нормализуется с помощью функции os.path.abspath(), чтобы изменения каталога внутри процесса не влияли на конечное местоположение относительного пути к файлу.

    References: #2036

postgresql

  • [postgresql]

    При явном выполнении последовательности выводится имя автогенерируемой последовательности столбца SERIAL, что в настоящее время происходит только при implicit_returning=False, теперь учитывается, если имя таблицы + столбца больше 63 символов, используя ту же логику, что и в PostgreSQL. (также в 0.6.7)

    References: #1083

  • [postgresql]

    В список исключений «disconnect» добавлено дополнительное сообщение libpq - «не удалось получить данные от сервера» (также в 0.6.7)

    References: #2044

mysql

  • [mysql]

    Новая поддержка DBAPI для pymysql, чисто Python-порт MySQL-python.

    References: #1991

  • [mysql]

    Диалект oursql принимает те же аргументы «ssl» в create_engine(), что и MySQLdb. (также в 0.6.7)

    References: #2047

mssql

  • [mssql]

    типы String/Unicode и их аналоги VARCHAR/ NVARCHAR выдают значение «max» в качестве длины, когда длина не указана, так что длина по умолчанию, обычно равная „1“ согласно документации SQL server, вместо этого становится „unbounded“. Это происходит и для типа VARBINARY.

    Такое поведение делает эти типы более совместимыми с типом VARCHAR в PostgreSQL, который аналогично является неограниченным, если длина не указана.

    References: #1833

misc

  • [no_tags]

    Подробное описание каждого изменения приведено ниже на сайте: https://docs.sqlalchemy.org/en/latest/changelog/migration_07.html.

  • [declarative]

    Добавлена явная проверка на случай, когда для атрибута столбца декларативного класса используется имя „metadata“. (также в 0.6.7)

    References: #2050

  • [firebird]

    Внесены некоторые изменения для поддержки Interbase. Идентификаторы версий FB/Interbase разбираются в структуру типа (8, 1, 1, „interbase“) или (2, 1, 588, „firebird“), чтобы их можно было различать.

    References: #1885

Вернуться на верх