Andy (Zenom) wrote:
> The one thing that is frustrating is it is re-querying the database.
> So if I create a simple server side function how would I do that? I am
> currently using trunk.

how to create the server side function or how to use it from SQLA ?  the
column_property() thing is where you'd use func.foo().




>
>
>
> On Feb 2, 8:57 am, Andy <andy.hol...@belator.com> wrote:
>> Thanks, that worked like a charm. Look forward to your PyCon
>> presentation.
>>
>> On Feb 2, 12:56 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
>>
>>
>>
>> > On Feb 1, 2010, at 9:24 PM, Andy (Zenom) wrote:
>>
>> > > I don't know if my terminology is correct etc. But the basic idea is
>> > > the following.
>>
>> > > In my model I have something like
>>
>> > > from mylib.helpers import slugify
>>
>> > > class MyModel(Base):
>> > >    __tablename__ = "testing"
>>
>> > >   id = Column(Integer, primary_key)
>> > >   title = Column(Unicode)
>> > >   description = Column(Unicode)
>>
>> > >   @property
>> > >   def slug(self):
>> > >        return slugify(self.title)
>>
>> > > Now I want to be able to do something like.
>> > > session.query(MyModel.id, MyModel.title, MyModel.slug).all()
>>
>> > > The table obviously doesn't have a slug column, I just want to
>> return
>> > > my title as a "pseudo-column" named slug, with it passed through my
>> > > slugify method first.
>>
>> > > I tried to do something like the following:
>>
>> > > @synonym_for("title")
>> > > @property
>> > > def slug(self):
>> > >    return slugify(self.title)
>>
>> > > And this did not work.  It seems to just return another column just
>> > > like title (not sent through slugify first).  Any idea how I can do
>> > > what I am looking for?
>>
>> > part of the approach depends on if "slugify" can be defined as a SQL
>> function or if it must be executed in Python.  If the latter, you
>> probably want MyModel.slug to resolve into a column that also defines
>> a custom type.
>>
>> > Assuming its a Python function, note that your column can't be used
>> effectively in a comparison operation, like "MyModel.slug == 'foo'",
>> since the slugify() operation would have to be applied in aggregate.
>>
>> > Anyway assuming non-SQL function, here's a hack I came up with that
>> will do it:
>>
>> > from sqlalchemy import *
>> > from sqlalchemy.orm import *
>> > from sqlalchemy.ext.declarative import declarative_base
>> > from sqlalchemy.sql.expression import _UnaryExpression
>> > from sqlalchemy.types import UserDefinedType
>>
>> > Base = declarative_base()
>>
>> > def slugify(text):
>> >     return "SLUG !" + text
>>
>> > class MySlugType(UserDefinedType):
>> >     def result_processor(self, dialect, coltype):
>> >         return slugify
>>
>> > class MyModel(Base):
>> >     __tablename__ = "testing"
>>
>> >     id = Column(Integer, primary_key=True)
>> >     title = Column(Unicode)
>> >     description = Column(Unicode)
>>
>> >     slug = column_property(_UnaryExpression(title,
>> type_=MySlugType()))
>>
>> > engine = create_engine('sqlite://', echo=True)
>> > Base.metadata.create_all(engine)
>> > session = sessionmaker(engine)()
>>
>> > session.add(MyModel(title=u'title', description=u'description'))
>> > session.commit()
>>
>> > print session.query(MyModel.title, MyModel.slug).all()
>>
>> > > --
>> > > 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
>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>
> --
> 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.
>
>

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