【问题标题】:Select only two column of Postgresql and store it in numpy array仅选择 Postgresql 的两列并将其存储在 numpy 数组中
【发布时间】:2018-02-10 10:00:51
【问题描述】:

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

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

但是这个查询不起作用并给出了一个类型错误:

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 中

【问题讨论】:

    标签: python postgresql numpy flask-sqlalchemy


    【解决方案1】:

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

    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 数组列表是否真的是您需要的。

    【讨论】:

    • 它说 AttributeError: 'module' object has no attribute 'asarray'
    • 你导入numpy了吗?像import numpy as np 这样的东西。如果asarray 不起作用,您可以尝试np.array(row)。确保您已正确导入 numpy 包。
    • 您不太可能正确导入它。您是否可以在其他地方访问 numpy 中的任何其他功能?对此有类似的问题:stackoverflow.com/questions/36530726/…
    • 我正在重新安装 numpy
    • 等我试试。问题是我的文件本身的名称是 numpy.py。所以现在我的原始安装受到影响,请给我一些时间
    【解决方案2】:

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

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

    (加入关键字参数时默认为and,但可以包裹在or_中以更改此设置。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-26
      • 2013-03-04
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2012-12-19
      • 2015-10-05
      相关资源
      最近更新 更多