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'),/
/ 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.latitude)) *
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.address.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 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 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.