превращает запрос в сгруппированный запрос, даже без предложения GROUP BY. Вместо этого вы можете использовать подзапрос:
я заканчиваются идеи. Я гуглил больше одного дня и до сих пор не могу найти полезного ответа на свой вопрос.
То, что я делал до сих пор, я пытался использовать сырой SQL, но безуспешно.
locations = db.session.query(Location, select([text('( 6371 * acos( cos( radians("53.6209798282177") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians("13.96948162900808") ) + sin( radians("53.6209798282177") ) * sin( radians( lat ) ) ) )')]).label('distance')).having('distance' < 25).all()
При использовании этого необработанного SQL-запроса я получаю нулевые результаты, но при выполнении того же запроса вmysql
он возвращает правильные результаты.
Более того, я выяснил, что при печати запроса на терминал он не обрабатываетHAVING()
пункт правильно.
Мой запрос выглядит следующим образом:
SELECT location.id AS location_id, location.created_date AS location_created_date, location.zip AS location_zip, location.user_id AS location_user_id, location.lat AS location_lat, location.lng AS location_lng, location.city AS location_city
FROM location
HAVING false = 1
Как мне преобразовать этот SQL-запрос в SQLAlchemy
SELECT *, ( 6371 * acos( cos( radians(53.6209798282177) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(11.96948162900808) ) + sin( radians(53.6209798282177) ) * sin( radians( lat ) ) ) ) AS distance FROM location HAVING distance < 25 ORDER BY distance;
Моя таблица выглядит так:
+--------------+----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------------+------+-----+---------+-------+
| id | varchar(50) | NO | PRI | NULL | |
| created_date | datetime | YES | | NULL | |
| zip | varchar(5) | NO | UNI | NULL | |
| user_id | varchar(50) | NO | | NULL | |
| lat | decimal(15,13) | NO | | NULL | |
| lng | decimal(15,13) | NO | | NULL | |
| city | text | NO | | NULL | |
+--------------+----------------+------+-----+---------+-------+
Любая помощь приветствуется.