Hi there,

Where I work, in our data model, we'd have several the opportunity to have 
primary keys defined has a composite of something + an enum value. Though 
because sqlalchemy requises
that primary keys can be sorted, it is not possible to define such primary keys.

Indeed, in Python, enums are not sortablle. Which is fine by us and, though we 
could implemented some kind of ordre, to keep the behavior of enum types 
consistent between those use in a table and those that are not, we'd rater not 
do that. And yes, some might argue that this is a de-normalization and hence is 
evil, but we find it handy enough to accept  corrupting our souls... 

If we do define such primary keys we end-up with the following error:


[2019-01-29T18:56:24.936Z app.py:35986 MainProcess          session.py:400 ] 
ERR APIException during a database transaction: . The database transaction will 
be roll backed
Traceback (most recent call last):
  File "~/.repositories/project/static_api/repository/zone.py", line 175, in 
delete_zone
    zone_to_delete.delete()
  File "~/.repositories/project/models/zone.py", line 1851, in delete
    super(Zone, self).delete()
  File "~/.repositories/project/orm/declarative_base.py", line 325, in delete
    return get_session().delete(self, **kwargs)
  File "~/.repositories/project/orm/session.py", line 115, in delete
    self.flush()
  File "~/.repositories/project/orm/utils.py", line 289, in 
retry_on_deadlock_decorator
    return wrapped(*args, **kwargs)
  File "~/.repositories/project/orm/session.py", line 188, in flush
    return super(EtlSession, self).flush(objects)
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/session.py",
 line 2139, in flush
    self._flush(objects)
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/session.py",
 line 2259, in _flush
    transaction.rollback(_capture_exception=True)
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py",
 line 66, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/util/compat.py",
 line 187, in reraise
    raise value
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/session.py",
 line 2223, in _flush
    flush_context.execute()
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/unitofwork.py",
 line 389, in execute
    rec.execute(self)
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/unitofwork.py",
 line 577, in execute
    uow
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/persistence.py",
 line 243, in delete_obj
    uowtransaction))
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/persistence.py",
 line 357, in _organize_states_for_delete
    states):
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/persistence.py",
 line 1108, in _connections_for_states
    for state in _sort_states(states):
  File 
"~/.virtualenvs/project-py35/lib/python3.5/site-packages/sqlalchemy/orm/persistence.py",
 line 1130, in _sort_states
    sorted(persistent, key=lambda q: q.key[1])
TypeError: unorderable types: _EnumSymbol() < _EnumSymbol()


This is not à New issue, see reference below. It is mentioned there that this 
may be made optional. So what would be the status of this ? I understand this 
is not an arbitrary choice (a post mentions preventing deadlocks). What would 
be the trade offs of such an options ?

https://groups.google.com/forum/#!searchin/sqlalchemy/primary$20key$20sortable%7Csort:date/sqlalchemy/mWbr-Tw4wvU/QXFYH2rRgFsJ

Thanks for enlightening us.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/7a749928-b3e7-42e2-b428-f8d76000a881%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to