On Mar 2, 2011, at 5:13 PM, Michael Bayer wrote: > Sequence() is a DDL construct, not a SQL construct, so you don't embed it > into an INSERT statement directly, nor can you assign it to an attribute on a > mapped object (as would appear to be the case here). It is a marker applied > to a Column() object to note the column's generator for default values. > > The usage of Sequence in table metadata is described at: > > http://www.sqlalchemy.org/docs/core/schema.html#defining-sequences > > When using the ORM in particular, the Sequence needs to be used in this way > so that SQLAlchemy has a means of acquiring the newly generated identifier. > On Firebird, when the Table metadata has a Sequence associated, the gen_id() > function is embedded inline and the new identifier is acquired via RETURNING. > This applies to all insert() constructs generated against the Table object, > not just those used by the ORM. > > Another option is to explicitly execute the sequence object ahead of time - a > Sequence can be passed to the execute() method of any > engine/connection/Session to invoke its next id. This is not the best > pattern in conjunction with inserts: > > myobject.id = Session.execute(my_sequence_object)
continuing, not the best pattern because, its two separate executions instead of one and is more verbose in any case. > > > > > > On Mar 2, 2011, at 3:10 PM, bigt wrote: > >> my Firebird database has some Sequence values defined as >> >> CREATE SEQUENCE S_org; >> >> with an appropriate trigger to set a value. >> >> RECREATE TRIGGER TBI_org FOR org >> ACTIVE BEFORE INSERT POSITION 0 >> AS BEGIN >> IF (NEW.Id IS NULL) THEN >> NEW.Id = NEXT VALUE FOR S_org; >> END^ >> >> >> Using reflection in sqlalchemy i get an error when trying to store an >> entry in the ORG table. >> >> File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", >> line 1392, in flush >> self._flush(objects) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/session.py", >> line 1473, in _flush >> flush_context.execute() >> File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/ >> unitofwork.py", line 302, in execute >> rec.execute(self) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/ >> unitofwork.py", line 446, in execute >> uow >> File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", >> line 1884, in _save_obj >> execute(statement, params) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1191, in execute >> params) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1271, in _execute_clauseelement >> return self.__execute_context(context) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1302, in __execute_context >> context.parameters[0], context=context) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1401, in _cursor_execute >> context) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1394, in _cursor_execute >> context) >> File "/usr/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/ >> base.py", line 680, in do_execute >> cursor.execute(statement, parameters or []) >> InterfaceError: (InterfaceError) (0L, "Error while attempting to >> convert object of type <class 'sqlalchemy.schema.Sequence'> to >> database-internal numeric type for storage in field [name not known at >> this stage of query execution]. The invalid input object is: >> Sequence(u's_org', start=1, increment=1, optional=False)") 'INSERT >> INTO org (id, name, contact, dept, vatnr, country, city, street, >> building, postcode, phone, fax, email) VALUES >> (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' (Sequence(u's_org', start=1, >> increment=1, optional=False), u'xyz', None, None, None, u'CH', None, >> None, None, None, None, None, None) >> >> >> It appears that Sqlalchemy does not process correctly the SEQUENCE >> keyword in recent versions of Firebird >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> To unsubscribe from this group, send email to >> sqlalchemy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sqlalchemy?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.