Base on this post, I have this SQL query:
SELECT
id, (6371.009 * acos(cos(radians(37)) * cos(radians(lat)) *
cos(radians(lng) - radians(-122)) + sin(radians(37)) *
sin(radians(lat)))) AS distance
FROM
company
HAVING
distance < 25
ORDER BY
distance
LIMIT
0 , 20;
and I want to convert this query to SQLALCHEMY. How I can convert SQL queries that are included of functions (e.g. acos, cos, sin, radians, ...) to SQLALCHEMY queries?
I have tried this:
company_nearby = s.query(Company).filter(
(6371.009 * acos(
cos(radians(37)) * cos(radians(Company.latitude)) *
cos(radians(Company.longtitude) - radians(-122)) +
sin(radians(37)) * sin(radians(Company.latitude))
)) < 25
).limit(20).all()
But I have this error:
TypeError: a float is required
Probably because Company.latitude
returns None
, but company table has 16000 record with latitude and longitude.
This is Company
table:
class Company(db.Model):
__tablename__ = 'company'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
latitude = db.Column(db.Float)
longtitude = db.Column(db.Float)
Any help will be much appreciated.