> "connection already closed" is a psycopg2 error indicating that the > socket has been shut down. looking at your output, I see a raw > execute() occuring within the string conversion of your Project object > and theres a module called sqlkit/db/utils.py causing an exception > throw. SQLA's rollback then fails too but probably for the same > reason. since you're executing directly off of the engine there, it > would seem unrelated to the state of the connection related to the > session. its not apparent why the socket would be shut down, > however, unless the database were restarted perhaps.
sorry for not seeing that error myself, on the other hand: no postgres has never been shut down. Anyhow I got rid of that code (an on the fly __str__ builder), I go little further but get errors again. 1. prj is fetched from db by a session.query() id=18 2. I try to delete it, failing due to constraints on the db 3. session.rollback() 4. print prj.name -> error 4b. session.expunge_all() session.flush() fetch a new one (id=20) --> error (reported below on id=18) So back to the question: in which state is 'prj' after failing deletion and after rolling back? Even if I 'session.expunge(prj)' I cannot refetch a new project (even a different one...) I'm really puzzled... sandro *:-) def delete_obj(obj): print "### deleting obj", repr(obj) try: session.delete(obj) print "session.delete:", session.deleted session.commit() except Exception, e: print "Problems...", e.message session.rollback() #session.bind.connect() q = session.query(Project) prj = q.filter_by(id=18).one() print repr(prj) delete_obj(prj) print "session.deleted:", session.deleted for obj in session: print "obj", hex(id(obj)), type(obj) session.expunge_all() session.flush() prj = q.filter_by(id=20).one() ## a different project ########################################################## san...@bluff:/misc/src/hg/py/fossati/fossati$ python test.py <models.ticket.Project object at 0x88a4d8c> ### deleting obj <models.ticket.Project object at 0x88a4d8c> session.delete: IdentitySet([<models.ticket.Project object at 0x88a4d8c>]) Problems... (OperationalError) ERROR: update or delete on table "ticket_project" violates foreign key constraint "timereport_report_job_id_fkey" on table "timereport_report" DETAIL: Key (id)=(18) is still referenced from table "timereport_report". session.deleted: IdentitySet([]) obj 0x88a4d8c <class 'models.ticket.Project'> obj 0x88b6c4c <class 'models.ticket.Organization'> obj 0x88b61cc <class 'models.cliente.User'> No handlers could be found for logger "sqlalchemy.pool.QueuePool.0x...cb8c" Traceback (most recent call last): File "test.py", line 36, in <module> prj = q.filter_by(id=20).one() File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/orm/query.py", line 1061, in one ret = list(self[0:2]) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/orm/query.py", line 961, in __getitem__ return list(res) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/orm/query.py", line 1101, in __iter__ return self._execute_and_instances(context) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/orm/query.py", line 1104, in _execute_and_instances result = self.session.execute(querycontext.statement, params=self._params, mapper=self._mapper_zero_or_none()) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/orm/session.py", line 755, in execute clause, params or {}) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/engine/base.py", line 824, in execute return Connection.executors[c](self, object, multiparams, params) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/engine/base.py", line 874, in _execute_clauseelement return self.__execute_context(context) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/engine/base.py", line 896, in __execute_context self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/engine/base.py", line 950, in _cursor_execute self._handle_dbapi_exception(e, statement, parameters, cursor, context) File "/home/misc/src/sqlalchemy/sqlalchemy-svn/lib/sqlalchemy/engine/base.py", line 931, in _handle_dbapi_exception raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect) sqlalchemy.exc.OperationalError: (OperationalError) update or delete on table "ticket_project" violates foreign key constraint "timereport_report_job_id_fkey" on table "timereport_report" DETAIL: Key (id)=(18) is still referenced from table "timereport_report". 'SELECT anon_1.ticket_project_id AS anon_1_ticket_project_id, anon_1.ticket_project_date_create AS anon_1_ticket_project_date_create, anon_1.ticket_project_date_last_modify AS anon_1_ticket_project_date_last_modify, anon_1.ticket_project_status AS anon_1_ticket_project_status, anon_1.ticket_project_name AS anon_1_ticket_project_name, anon_1.ticket_project_description AS anon_1_ticket_project_description, anon_1.ticket_project_date_start AS anon_1_ticket_project_date_start, anon_1.ticket_project_date_end AS anon_1_ticket_project_date_end, ticket_ticket_1.id AS ticket_ticket_1_id, ticket_ticket_1.date_create AS ticket_ticket_1_date_create, ticket_ticket_1.date_last_modify AS ticket_ticket_1_date_last_modify, ticket_ticket_1.status AS ticket_ticket_1_status, ticket_ticket_1.project_id AS ticket_ticket_1_project_id, ticket_ticket_1.submitter_id AS ticket_ticket_1_submitter_id, ticket_ticket_1.assigned_to_id AS ticket_ticket_1_assigned_to_id, ticket_ticket_1.title AS ticket_ticket_1_title, ticket_ticket_1.keywords AS ticket_ticket_1_keywords, ticket_ticket_1.description AS ticket_ticket_1_description, ticket_ticket_1.priority AS ticket_ticket_1_priority, ticket_ticket_1.public AS ticket_ticket_1_public, ticket_ticket_1.duration AS ticket_ticket_1_duration, ticket_ticket_1.category_code AS ticket_ticket_1_category_code, ticket_ticket_1.assigned_by_id AS ticket_ticket_1_assigned_by_id, ticket_ticket_1.deadline AS ticket_ticket_1_deadline \nFROM (SELECT ticket_project.id AS ticket_project_id, ticket_project.date_create AS ticket_project_date_create, ticket_project.date_last_modify AS ticket_project_date_last_modify, ticket_project.status AS ticket_project_status, ticket_project.name AS ticket_project_name, ticket_project.description AS ticket_project_description, ticket_project.date_start AS ticket_project_date_start, ticket_project.date_end AS ticket_project_date_end \nFROM ticket_project \nWHERE ticket_project.id = %(id_1)s \n LIMIT 2 OFFSET 0) AS anon_1 LEFT OUTER JOIN ticket_ticket AS ticket_ticket_1 ON anon_1.ticket_project_id = ticket_ticket_1.project_id' {'id_1': 20} --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---