Slowly I am becoming bald...
Here is a stand-alone script that reproduces the behaviour. Code is a bit verbose, had copied it from my actual project, and it uses PostgreSQL database, and you have to issue an "CREATE SCHEMA sample" beforehand. Sorry about that.
The script's output is below. When I inspect the table with psql, the "deleted" record is still present. And SQLAlchemy has logged the statements without errors.
BEGIN TEST
=== COUNTING BEFORE ==============================
2011-08-17 01:33:41,779 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2011-08-17 01:33:41,779 INFO sqlalchemy.engine.base.Engine SELECT count(
sample.rolemember.id) AS count_1
FROM sample.rolemember
2011-08-17 01:33:41,779 INFO sqlalchemy.engine.base.Engine {}
=== FETCHING ID TO DELETE ==============================
2011-08-17 01:33:41,780 INFO sqlalchemy.engine.base.Engine SELECT
sample.rolemember.id AS sample_rolemember_id, sample.rolemember.ctime AS sample_rolemember_ctime, sample.rolemember.mtime AS sample_rolemember_mtime, sample.rolemember.principal_id AS sample_rolemember_principal_id, sample.rolemember.role_id AS sample_rolemember_role_id, sample.rolemember.owner AS sample_rolemember_owner, sample.rolemember.editor AS sample_rolemember_editor
LIMIT %(param_1)s OFFSET %(param_2)s
2011-08-17 01:33:41,780 INFO sqlalchemy.engine.base.Engine {'param_1': 1, 'param_2': 0}
=== DELETING ==============================
2011-08-17 01:33:41,781 INFO sqlalchemy.engine.base.Engine DELETE FROM sample.rolemember WHERE
sample.rolemember.id = %(id_1)s
2011-08-17 01:33:41,781 INFO sqlalchemy.engine.base.Engine {'id_1': 7L}
=== COUNTING AFTER ==============================
2011-08-17 01:33:41,782 INFO sqlalchemy.engine.base.Engine SELECT count(
sample.rolemember.id) AS count_1
FROM sample.rolemember
2011-08-17 01:33:41,782 INFO sqlalchemy.engine.base.Engine {}
=== RESULT ==============================
Total before: 7
Deleted id: 7
Total after: 6