Have you tried:

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

?

On Wed, Aug 25, 2010 at 12:52 AM, Russell Warren
<[email protected]> wrote:
> 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 [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.
>
>



-- 
Fernando Takai

-- 
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.

Reply via email to