【发布时间】:2019-03-02 07:27:43
【问题描述】:
我得到了这个模型和这个混合方法和表达式:
def gc_distance(lat1, lon1, latitude, longitude, math=math):
import pdb; pdb.set_trace()
dst = (3958.75 *
math.acos(math.sin(float(lat1) / 57.2959) * math.sin(float(latitude) / 57.2960) +
math.cos(float(lat1) / 57.2958) * math.cos(float(latitude) / 57.2958) *
math.cos(longitude / 57.2958 - float(lon1)/57.2958)))
return dst
class Job(db.Model):
__tablename__ = "job"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), nullable=False)
city = db.Column(db.String(250), nullable=False)
state = db.Column(db.String(10), nullable=False)
zipCode = db.Column(db.String(10), nullable=False)
latitude = db.Column(db.String(10), nullable=False)
longitude = db.Column(db.String(10), nullable=False)
description = db.Column(db.String(200), nullable=False)
narrative = db.Column(db.String(250), nullable=False)
companyLogo = db.Column(db.String(250), nullable=False)
companyName = db.Column(db.String(250), nullable=False)
companyURL = db.Column(db.String(100), nullable=False)
time_created = db.Column(db.DateTime, nullable=False)
@hybrid_method
def distance(self, lat, lng):
import pdb; pdb.set_trace()
return gc_distance(lat, lng, self.latitude, self.longitude)
@distance.expression
def distance(cls, lat, lng):
import pdb; pdb.set_trace()
return gc_distance(lat, lng, cls.latitude, cls.longitude, math=func)
我正在调用我的方法:
@classmethod
def getJobsWithinXMiles(cls, lat1: str, lon1: str, dst: str,
page: int, per_page: int)-> "JobModel":
stmt = db.session.query(
Job,
Job.distance(lat1, lon1).
label('distance')).\
subquery()
job_alias = aliased(Job, stmt)
jobs = db.session.query(job_alias).\
filter(stmt.c.distance < dst).\
order_by(stmt.c.distance).\
paginate(page, per_page).\
params(lat1=float(lat1),
lon1=float(lon1),
dst=int(dst),
page=int(page),
per_page=int(per_page)
)
return jobs
现在当我从我的角度调用这个方法时,我得到了这个错误:
第 27 行,在 gc_distance 中 dst = (3958.75 * TypeError: float() 参数必须是字符串或数字,而不是 'InstrumentedAttribute'
错误在函数 gc_distance(lat1, lon1, latitude, longitude, math=math) 中。我看到纬度是“InstrumentedAttribute”类型的,这就是产生错误的原因
有人可以帮忙找出这个错误的原因吗?
【问题讨论】:
-
由于您没有使用原始/文本 SQL,因此不需要
params()调用。 -
我删除了 params() 。现在一切正常。谢谢伊利亚
标签: python postgresql sqlalchemy psycopg2