On 6/19/14, 2:05 AM, AM wrote:
> Hi.
>
> I am having some trouble understanding how to use native python data
> types with hybrid properties. I have the following model. I am using
> flask-sqlalchemy however I run into the same issue in straight
> sqlalchemy too.
>
> class SystemModel(BaseModel):
>     __tablename__ = 'system'
>
>     class_number = DB.Column(DB.Integer, DB.ForeignKey(
>         ClassModel.get_fk('number')), primary_key=True)
>     name = DB.Column(DB.String, nullable=False)
>     _ports = DB.Column('ports', DB.String)
>
>     # ports is stringified [(port, proto, mapped_port), ... ]
>     @hybrid_property
>     def ports(self):
>         if self._ports:
>             return ast.literal_eval(self._ports)      <-- problem here
>         return None                                   <-- also here
>
>     @ports.setter
>     def ports(self, value):
>         self._ports = str(value)
>
> I run into trouble when using this in a query:
> results = SystemModel.query.with_entities(SystemModel.ports).filter(
>                             SystemModel.ports != None).all()
>
> So the problem of course is that self._ports is not really a string so
> literal_eval fails. I think I can use sqlalchemy.literal here but am
> not sure if that will help in this case or how exactly to use it.
>
> I realize that the right way would be to have a separate ports table
> with the system pk being the fk+pk and then using it and I will
> probably go down that road, however I would still like to understand
> what exactly is going on here.
>
> I did read:
> http://techspot.zzzeek.org/2011/10/21/hybrids-and-value-agnostic-types/ and
> can certainly go down that road too, however it seems a bit of
> overkill for what I really want.
>
> Any help would be greatly appreciated.

what SQL would you like to see when you do your query?   My vague
recollection is that ast.literal_eval() returns a Python code object?  
That doesn't seem likely to be something you could run on the database
side unless you want to run Python functions in Postgresql (which would
be kind of nuts IMHO).



-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to