> "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
-~----------~----~----~----~------~----~------~--~---

Reply via email to