alias would fail if logging were used, due to
unescaped % sign in the alias name. [ticket:2171]
+ - Modify the text of the message which occurs
+ when the "identity" key isn't detected on
+ flush, to include the common cause that
+ the Column isn't set up to detect
+ auto-increment correctly; [ticket:2170].
+
- sql
- Fixed bug whereby if FetchedValue was passed
to column server_onupdate, it would not
if _none_set.issubset(instance_key[1]) and \
not mapper.allow_partial_pks or \
_none_set.issuperset(instance_key[1]):
- raise exc.FlushError('Instance %s has a NULL identity '
- 'key. Check if this flush is occurring at an '
- 'inappropriate time, such as during a load '
- 'operation.' % mapperutil.state_str(state))
+ raise exc.FlushError(
+ "Instance %s has a NULL identity key. If this is an "
+ "auto-generated value, check that the database table "
+ "allows generation of new primary key values, and that "
+ "the mapped Column object is configured to expect these "
+ "generated values. Ensure also that this flush() is "
+ "not occurring at an inappropriate time, such as within "
+ "a load() event." % mapperutil.state_str(state)
+ )
if state.key is None:
state.key = instance_key
# the population process would continue after the erroneous flush
# and thing would right themselves.
assert_raises_message(sa.orm.exc.FlushError,
- 'has a NULL identity key. Check if this '
- 'flush is occurring at an inappropriate '
- 'time, such as during a load operation.',
- sess.query(T1).first)
+ r"Instance \<T1 at .+?\> has a NULL "
+ "identity key. If this is an auto-generated value, "
+ "check that the database table allows generation ",
+ sess.query(T1).first)