Thanks mike, that was a helpful explanation.

2017-03-06 18:59 GMT-03:00 mike bayer <mike...@zzzcomputing.com>:

>
>
> On 03/06/2017 04:47 PM, Leonardo  L. P. da Mata wrote:
>
>> Hello, thanks for the help.
>>
>> This makes sense but it looks like that the value is calculated twice,
>> one in the query and the other accessing the property.
>>
>> My idea is to have the result on the query return itself.
>>
>>
> "lat" and "lng" here are variables that are in your program and are not
> related to the model you have.   So you're asking that a particular object
> be returned with additional values stuck onto it.
>
> The Session uses an identity map that ensures that an object of a
> particular primary key is only present once; if you make two queries which
> both return the same primary key, you get the same object back.
>
> If you did two queries with different values of "lat" / "lng" that both
> ultimately return the same PartnerAddress object, would the old values be
> erased?  It's not clear.
>
> Instead, this "distance" you're getting is really a value associated not
> just with the object but this specific query.   You can get it back by just
> adding it as a column:
>
>  query = session.query(PartnerV3, PartnerAddress.distance(lat,
> lng)).join(PartnerAddress).order_by(PartnerAddress.distance(lat, lng))
>
>
>  for partnerv3, distance in query:
>      print distance
>
>
>
>
>>
>> 2017-03-06 18:31 GMT-03:00 mike bayer <mike...@zzzcomputing.com
>> <mailto:mike...@zzzcomputing.com>>:
>>
>>
>>
>>     On 03/06/2017 04:16 PM, Leonardo Mata wrote:
>>
>>         Hello, My applications does some ordering using the distance from
>>         latitude and longitude haversine distance, i was able to
>>         calculate this
>>         using @hybrid.method and @.*expression, but i can't output the
>>         calculated distance:
>>
>>         /class PartnerAddress(db.Model, WithTimestampsModel,
>>         SerializeMixin):/
>>         /    /
>>         /    # Columns/
>>         /    id = db.Column(db.Integer(), primary_key=True,
>> nullable=False)/
>>         /
>>         /
>>         /    partner_id = db.Column(/
>>         /        db.Integer(),/
>>         /        db.ForeignKey('partner.id <http://partner.id>'),/
>>         /        nullable=False/
>>         /    )/
>>         /
>>         /
>>         /    latitude = db.Column(db.Numeric(precision=9, scale=7),
>>         nullable=False)/
>>         /    longitude = db.Column(db.Numeric(precision=10, scale=7),
>>         nullable=False)/
>>         /   /
>>         /
>>         /
>>         /    @hybrid_method/
>>         /    def distance(self, lat, lng):/
>>         /        /
>>         /        return math.acos(math.cos(math.radians(self.latitude)) *
>>         math.cos(math.radians(lat)) */
>>         /               math.cos(math.radians(self.longitude) -
>>         math.radians(lng)) +/
>>         /               math.sin(math.radians(self.la
>>         <http://self.la>titude)) *
>>
>>         math.sin(math.radians(lat))) * 6371/
>>         /
>>         /
>>         /    @distance.expression/
>>         /    def distance(cls, lat, lng):/
>>         /        return func.acos(func.cos(func.radians(cls.latitude)) *
>>         func.cos(func.radians(lat)) */
>>         /                         func.cos(func.radians(lng) -
>>         func.radians(cls.longitude)) +/
>>         /                         func.sin(func.radians(cls.latitude)) *
>>         func.sin(func.radians(lat))) * 6371/
>>         /
>>         /
>>         /
>>         /
>>         /class PartnerV3(db.Model, WithTimestampsModel,/
>>         /                SoftDeletableModel, SerializeMixin):/
>>         /    /
>>         /
>>         /
>>         /    name = db.Column(db.String(128), nullable=False)/
>>         /    /
>>         /
>>         /
>>         /    address = db.relationship(/
>>         /        'mustafar.partner.v3.models.ad
>>         <http://mustafar.partner.v3.models.ad>dress.PartnerAddress',/
>>
>>         /        backref='partner',/
>>         /        uselist=False/
>>         /    )/
>>
>>
>>         when querying like this:
>>
>>         query =
>>         PartnerV3.query.join(PartnerAddress).order_by(PartnerAddress
>> .distance(lat,
>>         lng)).paginate(1,10, False)
>>
>>         I can paginate the result, but it returns only the PartnerV3
>>         object, i
>>         can't access the distance.
>>
>>         How do I access this distance property?
>>
>>
>>     you have a PartnerV3 there so the PartnerAddress is on the .address
>>     property:
>>
>>     query =
>>     PartnerV3.query.join(PartnerAddress).order_by(PartnerAddress
>> .distance(lat,
>>     lng))
>>
>>
>>     some_partner = query.first()
>>
>>     partner_address = some_partner.address
>>     distance = partner_address.distance(lat, lng)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>         --
>>         SQLAlchemy -
>>         The Python SQL Toolkit and Object Relational Mapper
>>
>>         http://www.sqlalchemy.org/
>>
>>         To post example code, please provide an MCVE: Minimal, Complete,
>> and
>>         Verifiable Example. See http://stackoverflow.com/help/mcve
>>         <http://stackoverflow.com/help/mcve> for a full
>>         description.
>>         ---
>>         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
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>
>>         <mailto:sqlalchemy+unsubscr...@googlegroups.com
>>         <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>>.
>>         To post to this group, send email to sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>
>>         <mailto:sqlalchemy@googlegroups.com
>>         <mailto:sqlalchemy@googlegroups.com>>.
>>         Visit this group at https://groups.google.com/group/sqlalchemy
>>         <https://groups.google.com/group/sqlalchemy>.
>>         For more options, visit https://groups.google.com/d/optout
>>         <https://groups.google.com/d/optout>.
>>
>>
>>     --
>>     SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper
>>
>>     http://www.sqlalchemy.org/
>>
>>     To post example code, please provide an MCVE: Minimal, Complete, and
>>     Verifiable Example.  See  http://stackoverflow.com/help/mcve
>>     <http://stackoverflow.com/help/mcve> for a full description.
>>     --- You received this message because you are subscribed to a topic
>>     in the Google Groups "sqlalchemy" group.
>>     To unsubscribe from this topic, visit
>>     https://groups.google.com/d/topic/sqlalchemy/4JKV8vS4jis/unsubscribe
>>     <https://groups.google.com/d/topic/sqlalchemy/4JKV8vS4jis/unsubscribe
>> >.
>>     To unsubscribe from this group and all its topics, send an email to
>>     sqlalchemy+unsubscr...@googlegroups.com
>>     <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>.
>>     To post to this group, send email to sqlalchemy@googlegroups.com
>>     <mailto:sqlalchemy@googlegroups.com>.
>>     Visit this group at https://groups.google.com/group/sqlalchemy
>>     <https://groups.google.com/group/sqlalchemy>.
>>     For more options, visit https://groups.google.com/d/optout
>>     <https://groups.google.com/d/optout>.
>>
>>
>>
>>
>> --
>> Leonardo Luiz Padovani da Mata
>> barr...@gmail.com <mailto:barr...@gmail.com>
>>
>> "May the force be with you, always"
>> "Nerd Pride... eu tenho. Voce tem?"
>>
>> --
>> SQLAlchemy -
>> The Python SQL Toolkit and Object Relational Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete, and
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
>> description.
>> ---
>> 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
>> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
>> To post to this group, send email to sqlalchemy@googlegroups.com
>> <mailto:sqlalchemy@googlegroups.com>.
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example.  See  http://stackoverflow.com/help/mcve for a full
> description.
> --- You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/to
> pic/sqlalchemy/4JKV8vS4jis/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Leonardo Luiz Padovani da Mata
barr...@gmail.com

"May the force be with you, always"
"Nerd Pride... eu tenho. Voce tem?"

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to