pony

Pony Object Relational Mapper

APACHE-2.0 License

Downloads
1M
Stars
3.5K
Committers
25

Bot releases are visible (Hide)

pony - Pony ORM Release 0.7.1

Published by kozlovsky almost 8 years ago

New features

  • New warning DatabaseContainsIncorrectEmptyValue added, it is raised when the required attribute is empty during loading an entity from the database

Bugfixes

  • Fixes #216: Added Python 3.6 support
  • Fixes #203: subtranslator should use argnames from parent translator
  • Change a way aliases in SQL query are generated in order to fix a problem when a subquery alias masks a base query alias
  • Volatile attribute bug fixed
  • Fix creation of self-referenced foreign keys - before this Pony didn't create the foreign key for self-referenced attributes
  • Bug fixed: when required attribute is empty the loading from the database shouldn't raise the validation error. Now Pony raises the warning DatabaseContainsIncorrectEmptyValue
  • Throw an error with more clear explanation when a list comprehension is used inside a query instead of a generator expression: "Use generator expression (... for ... in ...) instead of list comprehension [... for ... in ...] inside query"
pony - Pony ORM Release 0.7

Published by kozlovsky about 8 years ago

Starting with this release Pony ORM is release under the Apache License, Version 2.0.

New features

Backward incompatible changes

  • #159: exceptions happened during flush() should not be wrapped with CommitException

Before this release an exception that happened in a hook(https://docs.ponyorm.com/api_reference.html#entity-hooks), could be raised in two ways - either wrapped into the CommitException or without wrapping. It depended if the exception happened during the execution of flush() or commit() function on the db_session exit. Now the exception happened inside the hook never will be wrapped into the CommitException.

Bugfixes

  • #190: Timedelta is not supported when using pymysql
pony - PonyORM Release 0.6.6 (2016-08-22)

Published by kozlovsky about 8 years ago

New features

Backward incompatible changes

  • Dropped Python 2.6 support

Improvements

Bugfixes

  • #182 - LEFT JOIN doesn't work as expected for inherited entities when foreign key is None
  • Some small bugs were fixed
pony - Pony ORM Release 0.6.5 (2016-04-04)

Published by kozlovsky over 8 years ago

Improvements

  • Fixes #172: Query prefetch() method should load specified lazy attributes right in the main query if possible

Bugfixes

  • Fixes #168: Incorrect caching when slicing the same query multiple times
  • Fixes #169: When py_check() returns False, Pony should truncate too large values in resulting ValueError message
  • Fixes #171: AssertionError when saving changes of multiple objects
  • Fixes #176: Autostripped strings are not validated correctly for Required attributes

See blog post for more detailed information: https://blog.ponyorm.com/2016/04/04/pony-orm-release-0-6-5/

pony - Pony ORM Release 0.6.4

Published by kozlovsky over 8 years ago

Pony ORM Release 0.6.4 (2016-02-10)

This release brings no new features, has no backward incompatible changes, only bug fixes.
If you are using obj.flush() method in your code we recommend you to upgrade to 0.6.4 release.

  • Fixed #161: 0.6.3 + obj.flush(): after_insert, after_update & after_delete hooks do not work
pony - Pony ORM Release 0.6.3

Published by kozlovsky over 8 years ago

This release was intended to fix the behavior of obj.flush(), but failed to do it in a proper way.
Please skip this release and update to 0.6.4 if you are using obj.flush() method.

  • Fixed #138: Incorrect behavior of obj.flush(): assertion failed after exception
  • Fixed #157: Incorrect transaction state after obj.flush() caused “release unlocked lock” error in SQLite
  • Fixed #151: SQLite + upper() or lower() does not work as expected

#138: Incorrect behavior of obj.flush(): assertion failed after exception,

#157: Incorrect transaction state after obj.flush() caused “release unlocked lock” error in SQLite

These are long-standing bugs, but they were discovered just recently. The bugs were caused by incorrect implementation of obj.flush() method. In the same time the global flush() function worked correctly. Before this fix the method obj.flush() didn’t call before_xxx and after_xxx hooks. In some cases it led to assertion error or some other errors when using SQLite.

Now both bugs are fixed and the method obj.flush() works properly.

#151: SQLite + upper() or lower() does not work as expected

Since SQLite does not support Unicode operations, the upper() and lower() SQL functions do not work for non-ascii symbols.

Starting with this release Pony registers two additional unicode-aware functions in SQLite: py_upper() and py_lower(), and uses these functions instead of the standard upper() and lower() functions:

>>> select(p.id for p in Person if p.name.upper() == 'John')[:]

SQLite query:

SELECT "p"."id"
FROM "Person" "p"
WHERE py_upper("p"."name") = 'John'

For other databases Pony still uses standard upper() and lower() functions.

pony - Pony ORM Release 0.6.2

Published by kozlovsky almost 9 years ago

Pony ORM Release 0.6.2 (2016-01-11)

Blogpost: https://blog.ponyorm.com/2016/01/11/pony-orm-release-0-6-2/

The documentation was moved from this repo to a separate one at https://github.com/ponyorm/pony-doc
The compiled version can be found at https://docs.ponyorm.com

New features

  • Python 3.5 support
  • #132, #145: raw_sql() function was added
  • #126: Ability to use @db_session with generator functions
  • #116: Add support to select by UUID
  • Ability to get string SQL statement using the Query.get_sql() method
  • New function delete(gen) and Query.delete(bulk=False)
  • Now it is possible to override Entity.init() and declare custom entity methods

Backward incompatible changes

  • Normalizing table names for symmetric relationships
  • Autostrip - automatically remove leading and trailing characters

Bugfixes

  • #87: Pony fails with pymysql installed as MySQLdb
  • #118: Pony should reconnect if previous connection was created before process was forked
  • #121: Unable to update value of unique attribute
  • #122: AssertionError when changing part of a composite key
  • #127: a workaround for incorrect pysqlite locking behavior
  • #136: Cascade delete does not work correctly for one-to-one relationships
  • #141, #143: remove restriction on adding new methods to entities
  • #142: Entity.select_random() AssertionError
  • #147: Add 'atom_expr' symbol handling for Python 3.5 grammar
pony - Pony ORM Release 0.6.1

Published by kozlovsky over 9 years ago

  • Closed #65: Now the select(), filter(), order_by(), page(), limit(), random() methods can be applied to collection attributes
  • Closed #105: Now you can pass globals and locals to the select() function
  • Improved inheritance support in queries: select(x for x in BaseClass if x.subclass_attr == y)
  • Now it is possible to do db.insert(SomeEntity, column1=x, column2=y) instead of db.insert(SomeEntity._table_, column1=x, column2=y)
  • Discriminator attribute can be part of the composite index
  • Now it is possible to specify the attribute name instead of the attribute itself in composite index
  • Query statistics: global_stats_lock is deprecated, just use global_stats property without any locking
  • New load() method for entity instances which retrieves all unloaded attributes except collections
  • New load() method for collections, e.g. customer.orders.load()
  • Enhanced error message when descendant classes declare attributes with the same name
  • Fixed #98: Composite index can include attributes of base entity
  • Fixed #106: incorrect loading of object which consists of primary key only
  • Fixed pony.converting.check_email()
  • Prefetching bug fixed: if collection is already fully loaded it shouldn't be loaded again
  • Deprecated Entity.order_by(..) method was removed. Use Entity.select().order_by(...) instead
  • Various performance enhancements
  • Multiple bugs were fixed
pony - Pony ORM Release 0.6

Published by kozlovsky almost 10 years ago

Changes since Pony ORM 0.6rc3:

  • Fixed #94: Aggregated subquery bug fixed

Short description

  • Official support of Python 3 added!
  • As a string attribute type, use str instead of unicode for compatibility with Python 3
  • Use int with size=64 option instead of long for compatibility with Python 3
  • In Python 3, use pure-python pymysql adapter instead of MySQLdb
  • Multiple bugfixes and optimizations since 0.5.4 release

Full description:

http://blog.ponyorm.com/2014/11/05/pony-orm-release-0-6/

pony - Pony ORM 0.6 Release Candidate 3

Published by kozlovsky almost 10 years ago

Bugfixes

  • Fixed #18: Allow to specify size and unsigned for int type
  • Fixed #77: Discriminate Pony-generated fields in entities: Attribute.is_implicit field added
  • Fixed #83: Entity.get() should issue LIMIT 2 when non-unique criteria used for search
  • Fixed #84: executing db.insert() should turn off autocommit and begin transaction
  • Fixed #88: composite_index(*attrs) added to support non-unique composite indexes
  • Fixed #89: IN / NOT IN clauses works different with empty sequence
  • Fixed #90: Do not automatically add "distinct" if query.first() used
  • Fixed #91: document automatic "distinct" behaviour and also .without_distinct()
  • Fixed #92: without_distinct() and first() do not work together correctly

Deprecation of attribute long type

  • size and unsigned options for int attributes link

Since the long type has gone in Python 3, the long type is deprecated in Pony now. Instead of long you should use the int type and specify the size option:

    class MyEntity(db.Entity):
        attr1 = Required(long) # deprecated
        attr2 = Required(int, size=64) # new way for using BIGINT type in the database
pony - Pony ORM 0.6 Release Candidate 2

Published by kozlovsky about 10 years ago

This release fixes syntax errors during installation on ubuntu 14.04 (issue #81)

pony - Pony ORM 0.6 Release Candidate 1

Published by kozlovsky about 10 years ago

Blog post: http://blog.ponyorm.com/2014/10/08/pony-orm-0-6-release-candidate-1

New features:

  • Python 3 support
  • pymysql adapter support for MySQL databases

Backward incompatible changes

Now Pony treats both str and unicode attribute types as they are unicode strings in both Python 2 and 3. So, the attribute declaration attr = Required(str) is equal to attr = Required(unicode) in Python 2 and 3. The same thing is with LongStr and LongUnicode - both of them are represented as unicode strings now.

For the sake of backward compatibility Pony adds unicode as an alias to str and buffer as an alias to bytes in Python 3.

Other changes and bug fixes

  • Fixes #74: Wrong FK column type when using sql_type on foreign ID column
  • Fixes #75: MappingError for self-referenced entities in a many-to-many relationship
  • Fixes #80: “Entity NoneType does not belong to database” when using to_dict
pony - Pony ORM release 0.5.4

Published by kozlovsky about 10 years ago

New functions and methods:

  • pony.orm.serialization module with the to_dict() and to_json() functions was added. Before this release you could use the to_dict() method of an entity instance in order to get a key-value dictionary structure for a specific entity instance. Sometimes you might need to serialize not only the instance itself, but also the instance's related objects. In this case you can use the to_dict() function from the pony.orm.serialization module.
    • to_dict() - receives an entity instance or a list of instances and returns a dictionary structure which keeps the passed object(s) and immediate related objects
    • to_json() – uses to_dict() and returns JSON representation of the to_dict() result
  • Query.prefetch() – allows to specify which related objects or attributes should be loaded from the database along with the query result . Example:
      select(s for s in Student).prefetch(Group, Department, Student.courses)
  • obj.flush() – allows flush a specific entity to the database
  • obj.get_pk() – return the primary key value for an entity instance
  • py_check parameter for attributes added. This parameter allows you to specify a function which will be used for checking the value before it is assigned to the attribute. The function should return True/False or can raise ValueError exception if the check failed. Example:
    class Student(db.Entity):
        name = Required(unicode)
        gpa = Required(float, py_check=lambda val: val >= 0 and val <= 5)

New types:

  • time and timedelta – now you can use these types for attribute declaration. Also you can use timedelta and a combination of datetime + timedelta types inside queries.

New hooks:

  • after_insert, after_update, after_delete - these hooks are called when an object was inserted, updated or deleted in the database respectively (link)

New features:

  • Added support for pymysql – pure Python MySQL client. Currently it is used as a fallback for MySQLdb interface

Other changes and bug fixes

  • obj.order_by() method is deprecated, use Entity.select().order_by() instead
  • obj.describe() now displays composite primary keys
  • Fixes #50: PonyORM does not escape _ and % in LIKE queries
  • Fixes #51: Handling of one-to-one relations in declarative queries
  • Fixes #52: An attribute without a column should not have rbits & wbits
  • Fixes #53: Column generated at the wrong side of "one-to-one" relationship
  • Fixes #55: obj.to_dict() should do flush at first if the session cache is modified
  • Fixes #57: Error in to_dict() when to-one attribute value is None
  • Fixes #70: EntitySet allows to add and remove None
  • Check that the entity name starts with a capital letter and throw exception if it is not then raise the ERDiagramError: Entity class name should start with a capital letter exception
pony - Pony ORM release 0.5.3

Published by kozlovsky about 10 years ago

This release fixes the setup.py problem that was found after the previous release was uploaded to PyPI.

pony - Pony ORM release 0.5.2

Published by kozlovsky about 10 years ago

http://blog.ponyorm.com/2014/08/11/pony-orm-release-0-5-2/

This release is a step forward to Python 3 support. While the external API wasn't changed, the internals were significantly refactored to provide forward compatibility with Python 3.

Changes/features:

  • New to_dict() method can be used to convert entity instance to dictionary. This method can be useful when you need to serialize an object to JSON or other format

Bugfixes:

  • Now select() function and filter() method of the query object can accept lambdas with closures
  • Some minor bugs were fixed
pony - Pony ORM release 0.5.1

Published by kozlovsky over 10 years ago

Changes/features:

Before this release, if a text attribute was defined without the max length specified (e.g. name = Required(unicode)), Pony set the maximum length equal to 200 and used SQL type VARCHAR(200). Actually, PostgreSQL and SQLite do not require specifying the maximum length for strings. Starting with this release such text attributes are declared as TEXT in SQLite and PostgreSQL. In these DBMSes, the TEXT datatype has the same performance as VARCHAR(N) and doesn't have arbitrary length restrictions.

For other DBMSes default varchar limit was increased up to 255 in MySQL and to 1000 in Oracle.

Bugfixes:

  • Correct parsing of datetime values with T separator between date and time
  • Entity.delete() bug fixed
  • Lazy attribute loading bug fixed
pony - Pony ORM 0.5.post1

Published by kozlovsky over 10 years ago

Bugfix release

pony - Pony ORM 0.5

Published by kozlovsky over 10 years ago

  • New transaction model (link)
  • New method Query.filter() allows step-by-step query construction (link)
  • New method Database.bind() simplifies testing and allows using different settings for development and production (link)
  • New method Query.page() simplifies pagination (link)
  • New method MyEntity.select_random(N) is effective for large tables (link)
  • New method Query.random(N) for selecting random instances (link)
  • Support of new concat() function inside declarative queries
  • New before_insert(), before_update(), before_delete() entity instance hooks which can be overridden
  • Ability to specify sequence_name='seq_name' for PrimaryKey attributes for Oracle database
  • Ability to create new entity instances specifying the value of the primary key instead of the object
  • Ability to read entity object attributes outside of the db_session
  • Ability to use lambdas as a reference to an entity in relationship attribute declarations (link)
  • The names of tables, indexes and constraints in the database creation script now are sorted in the alphabetical order
  • In MySQL and PostgreSQL Pony converts the table names to the lower case. In Oracle – to the upper case. In SQLite leaves as is.
  • The option options.MAX_FETCH_COUNT is set to None by default now
  • The support of PyGreSQL is discontinued, using psycopg2 instead
  • Added pony.__version__ attribute
  • Multiple bugs were fixed
  • Stability and performance improvements