- changed status to resolved
session.delete() does not add object to the session or raise an error
Issue #1150
resolved
import sqlalchemy as sqa
import sqlalchemy.orm as sqorm
class User(object): pass
dsn = """sqlite:///"""
engine = sqa.create_engine(dsn)
engine.echo = True
md = sqa.MetaData()
md.bind = engine
users = sqa.Table('users', md,
sqa.Column('id', sqa.Integer, primary_key=True),
sqa.Column('name', sqa.String),
sqa.Column('email', sqa.String))
users.mapper = sqorm.mapper(User, users)
Session = sqorm.sessionmaker(bind=engine,autocommit=True)
if __name__ == "__main__":
session = Session()
users.create()
session.begin()
user = User()
user.name='test'
user.email='test@test.com'
session.add(user)
session.flush()
session.commit()
#accidentally call close.
session.close()
#try to delete the cached user, nothing appens
session.begin()
session.delete(user)
assert user in session
session.flush()
session.commit()
#the user is still there
users = session.query(User).all()
for user in users:
print user.name, user.email
Comments (4)
-
reporter -
reporter - changed status to open
- removed status
session.delete(obj) still fails if the object has unloaded attributes, such as with expire_on_commit=True, since the lazy and/or deferred loads proceed before the item is fully associated with the session. The mechanics of
delete()
will need to be adjusted to be more similar toadd()
. -
reporter - changed status to resolved
-
reporter - removed milestone
Removing milestone: 0.5.0 (automated comment)
- Log in to comment
34ecc552614143fb8f90ccc74b78fe8e3bdd7fb5