> "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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---