2017-09-28 4 views
0

J'essaie d'ajouter une fonctionnalité à une application Web dans laquelle les coordonnées seront automatiquement mises à jour lorsqu'une carte est glissée au moyen de JavaScript et de SQLAlchemy. Mais j'obtiens une erreur avec ma requête de base de données pour la route de mise à jour. Voici ma requête.Utilisation d'opérateurs supérieurs à (> =) ou inférieurs à (<=) dans SQlAlchemy

if sw_lng <= ne_lng: 

# doesn't cross the antimeridian 
rows = City.query.filter(sw_lat <= City.latitude and City.latitude <= ne_lat and (sw_lng <= City.longitude and City.longitude <= ne_lng) 
         ).group_by(City.country_code, City.city_name, City.region 
            ).order_by(func.random()).limit(10) 

Voici le message d'erreur correspondant:

raise TypeError("Boolean value of this clause is not defined") 

TypeError: Boolean value of this clause is not defined 

Toute aide sera appréciée.

Répondre

0

N'utilisez pas and pour combiner vos filtres, passez chaque expression de filtre en tant qu'argument séparé (le comportement par défaut est de les traiter ensemble comme and). Utiliser and lui-même essaie d'effectuer des tests booléens locaux (Python, pour une bonne raison, n'autorise aucune forme de surcharge qui changerait la signification de and), mais SQLAlchemy utilise les tests comme des objets spéciaux qu'il évalue paresseusement pour générer la requête SQL au moment de l'envoi de la requête (en poussant le travail vers le serveur de base de données). Vous voulez:

rows = City.query.filter(sw_lat <= City.latitude, City.latitude <= ne_lat, 
         sw_lng <= City.longitude, City.longitude <= ne_lng)...cont.... 
+0

merci pour l'aide, qui a pris soin de cette erreur. Cependant, mon objectif final est de renvoyer un objet JSON au client avec jsonify. – aharding378

+0

c'est la nouvelle erreur que j'obtiens quand j'essaie de faire cela o .__ classe __.__ nom__) TypeError: L'objet de type 'BaseQuery' n'est pas sérialisable JSON – aharding378

+0

@ aharding378: C'est une question complètement différente, pour laquelle vous n'avez pas fourni le code qui déclenche l'erreur. On dirait que vous essayez de renvoyer l'objet de requête lui-même, plutôt que de résoudre la requête à des lignes réelles, mais je ne peux pas en être sûr. Rechercher pour voir si elle a été répondue, poser une nouvelle question si non. – ShadowRanger