In the code below I set up two users using an orm session, and then
delete one of them with a second orm session.

----
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
class User(Base):
    __tablename__ = "users"
    id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String)
    fullname = sa.Column(sa.String)

    def __init__(self, name, fullname):
        self.name = name
        self.fullname = fullname

import os
dbEngine = sa.create_engine("sqlite://", echo = True)
Base.metadata.create_all(dbEngine)

Session = sessionmaker(bind = dbEngine,
                       autoflush = True,
                       autocommit = False)

#Add some data...
s1 = Session()
u1 = User("fred", "Fred Flintstone")
u2 = User("barney", "Barney Rubble")
s1.add(u1)
s1.add(u2)
s1.commit()

#delete the fred user...
name_to_delete = "fred"
s2 = Session()
fred = s2.query(User).filter_by(name = name_to_delete).first()
s2.delete(fred)
s2.commit()

----
In this reduced example I magically know the user name I want to
delete ("fred") and know that it exists.  I also obviously don't need
the second session in this example, but it is a reduction of my
problem.

The SQL query result for the second session is below:

BEGIN
SELECT users.id AS users_id, users.name AS users_name, users.fullname
AS users_fullname
FROM users
WHERE users.name = ?
LIMIT 1 OFFSET 0
('fred',)

DELETE FROM users WHERE users.id = ?
(1,)
COMMIT

The first query is wasteful for what I'm trying to achieve, which is
to delete the user whose user.name I *know* is there (even if I didn't
know, I'd be content to catch the exception).

What I can't figure out is... with the second session, what is the
correct/best way to do a simple deletion without requiring a mapped
orm object to give to session.delete?  Do I need to leave the orm
world to do this?  I would rather not resort to session.execute if at
all possible.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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