只选择两列Postgresql并将其存储在numpy数组中

时间:2018-02-10 10:00:51

标签: python postgresql numpy flask-sqlalchemy

我使用SQLAlchemy查询PostgreSQL,并且只选择两列纬度和经度,并将其存储在numpy中以便进一步计算。所以,我尝试了这样的查询:

result = Places.query.filter_by(latitude, longitude)

但是这个查询没有工作并且给出了一个TYPE ERROR:

TypeError: filter_by() takes exactly 1 argument (2 given)

我想要做的就是存储两列的输出并使用以下内容将其存储为numpy:

np.array(..., dtype=float)

由于我是numpy和PostgreSQL的新手,我陷入了困境。

编辑我选择了两列:

result = Places.query.with_entities(Places.latitude, Places.longitude).all()

现在,我只需将它们存储在numpy

2 个答案:

答案 0 :(得分:0)

filter_by大致相当于sql语句中的WHERE - 它使用关键字参数来过滤搜索结果,而不是选择特定的列,例如:

Users.query().filter_by(first_name=bob, age=42)

(加入关键字参数时默认为and,但可以包含在or_中以更改此内容。)

您可能的意思是在查询中指定列,即:

Places.query(Places.latitude, Places.longitude)

答案 1 :(得分:0)

filter_by()是根据条件选择一组特定的行。例如,如果您的Places有一个名为city的列,并且您只想获得属于伦敦城市的行,那么您可以执行以下操作:

session.query(Places).filter_by(city='London')

然而,这仍然会获取伦敦的所有列,而不仅仅是经度和纬度。在您的情况下,似乎您想要过滤掉列而不是行。因此,要获得所有行的列经度和纬度,您需要以下内容:

session.query(Places.latitude, Places.longitude)

这将返回元组。要将它存储为numpy数组列表,您可以尝试:

coordinates = []
for row in session.query(Places.latitude, Places.longitude):
   cooridnates.append(np.asarray(row))

有关查询的简单示例,请参阅Object Relational Tutorial。在不知道您的实际用例的情况下,很难建议您是否真的需要一个numpy数组列表。