there’s a SQLAlchemy issue here, marked as ticket http://www.sqlalchemy.org/trac/ticket/2896, however resolving this issue still won’t fix your issue. You’re emitting an INSERT on a table where the primary key needs to refer to a column elsewhere. that is:
task = Table('y', metadata,
Column('set_id', Integer, primary_key=True)
)
dataset = Table("x", metadata,
Column("set_id", Integer, primary_key=True)
)
dataset.append_constraint(ForeignKeyConstraint([dataset.c.set_id],
[task.c.set_id]))
to insert a dataset row, the dataset must refer to a task row. SQLite doesn’t
enforce foreign key constraints by default so that the INSERT will proceed but
the row will be relationally inconsistent.
also, if you aren’t planning on using Oracle as a backend, I’d remove the
Sequence directive from your program for now. until #2896 is fixed it will
get in the way of allowing this issue to be clear.
On Dec 20, 2013, at 5:50 AM, Massi <[email protected]> wrote:
> Hi, I'm experiencing a similar problem in my program (Sqlalchemy 0.8.4). In
> my case no blob column is involved, the problem seems to be related to
> presence of a foreign key in the target table. Here is the traceback of the
> error:
>
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 721,
> in commit
> self.transaction.commit()
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 354,
> in commit
> self._prepare_impl()
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 334,
> in _prepare_impl
> self.session.flush()
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 1818,
> in flush
> self._flush(objects)
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 1936,
> in _flush
> transaction.rollback(_capture_exception=True)
> File "C:\Python27\lib\site-packages\sqlalchemy\util\langhelpers.py", line
> 58, in __exit__
> compat.reraise(exc_type, exc_value, exc_tb)
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\session.py", line 1900,
> in _flush
> flush_context.execute()
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\unitofwork.py", line
> 372, in execute
> rec.execute(self)
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\unitofwork.py", line
> 525, in execute
> uow
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\persistence.py", line
> 64, in save_obj
> table, insert)
> File "C:\Python27\lib\site-packages\sqlalchemy\orm\persistence.py", line
> 569, in _emit_insert_statements
> execute(statement, params)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 662,
> in execute
> params)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 761,
> in _execute_clauseelement
> compiled_sql, distilled_params
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 828,
> in _execute_context
> None, None)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 1024,
> in _handle_dbapi_exception
> exc_info
> File "C:\Python27\lib\site-packages\sqlalchemy\util\compat.py", line 196,
> in raise_from_cause
> reraise(type(exception), exception, tb=exc_tb)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\base.py", line 824,
> in _execute_context
> context = constructor(dialect, self, conn, *args)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line
> 446, in _init_compiled
> self.__process_defaults()
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line
> 821, in __process_defaults
> val = self.get_insert_default(c)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line
> 777, in get_insert_default
> return self._exec_default(column.default, column.type)
> File "C:\Python27\lib\site-packages\sqlalchemy\engine\default.py", line
> 761, in _exec_default
> return self.fire_sequence(default, type_)
> StatementError: 'SQLiteExecutionContext' object has no attribute
> 'fire_sequence' (original cause: AttributeError: 'SQLiteExecutionContext'
> object has no attribute 'fire_sequence') u'INSERT INTO dataset (set_id,
> user_id, label, set_table, nam_table, val_table, datasource, info) VALUES (?,
> ?, ?, ?, ?, ?, ?, ?)' [{'info': None, 'user_id': 1, 'val_table':
> u'val_table', 'label': u'tab1', 'nam_tab': u'nam_table', 'set_table':
> u'tab1', 'datasource': None}]
>
> The construct which causes the error is this:
> dataset.append_constraint(sa.ForeignKeyConstraint([dataset.c.set_id],
> [task.c.set_id]))
>
> If I remove this line of code everything goes well (but of course I cannot
> set up the relationship between the dataset table and the task table).
> Any help is really appreciated.
>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
signature.asc
Description: Message signed with OpenPGP using GPGMail
