跳转到主要内容

SQLAlchemy和Numpy之间的高速接口

项目描述

https://github.com/nens/condenser/workflows/Linux/badge.svg https://img.shields.io/pypi/v/condenser.svg

SQLAlchemy和Numpy之间的高速接口

特性

此项目将从SQLAlchemy读取数据到结构化numpy数组。除了内置的SQLAlchemy类型外,它还支持将几何形状读取到pygeos几何形状数组。

安装

使用pip安装

$ pip install condenser

包含几何支持

$ pip install condenser[geo]

用法

condenser公开了一个对象:NumpyQuery,它作为自定义SQLAlchemy查询类如下使用

>>> from condenser import NumpyQuery
>>> # create the session with a custom query class
>>> session = session_factory(query_cls=NumpyQuery)

如果以这种方式构建会话,每个查询对象都将有一个额外的方法,将选择的数据导出到numpy结构化数组中

>>> query = session.query(SomeModel.float_type_column, SomeModel.int_type_column)
>>> my_array = query.as_structarray()

几何支持

几何列将自动转换为pygeos.Geometry对象数组。有关可以对这些数组执行(向量化的)numpy函数的信息,请参阅https://pygeos.readthedocs.io

如下转换几何形状(使用数据库函数ST_Transform

>>> query.with_transformed_geometries(target_srid=28992)

请注意,这只会转换已知SRID的几何形状。如果SRID仅从另一个元数据源中知道,请在将其转换为之前,使用适合您的数据库后端的功能来设置投影。另一种选择是使用与pygeos.apply结合的pyproj库从Python转换几何形状。

自定义dtype映射

condenser在猜测SQLAlchemy dtypes的Numpy dtypes方面有一个安全的方法。它始终使用8字节的带符号整数和浮点数。对于某些数据库后端,这可以更改为例如4字节的类型。在构建查询后覆盖SQLAlchemy到NumPy的类型映射

>>> from sqlalchemy import Integer
>>> query = session.query(SomeModel.float_type_column)
>>> query.numpy_settings[Integer]["dtype"] = np.int32
>>> query.as_structarray()

或者全局

>>> NumpyQuery.default_numpy_settings[Integer]["dtype"] = np.int32

NULL值

大多数numpy数据类型可以原生处理NULL(Python:None)值。只有整型列需要额外注意,因为它们在NumPy整型中没有等效项。默认情况下,此包将整数列中的NULL转换为-1。以下是一份完整列表,说明可以期待的内容

  • 整数列中的NULL变为-1

  • 浮点数和数值列中的NULL变为nan

  • 布尔列中的NULL变为False

  • 对象类型列(字符串、文本、几何)中的NULL变为None

在执行查询之前调整NULL值

>>> from sqlalchemy import Integer
>>> query = session.query(SomeModel.float_type_column)
>>> query.numpy_settings[Integer]["null"] = -9999
>>> query.numpy_settings[Boolean]["null"] = True
>>> query.as_structarray()

或者全局

>>> NumpyQuery.default_numpy_settings[Integer]["null"] = -9999

致谢

此包是用Cookiecutteraudreyr/cookiecutter-pypackage项目模板创建的。

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

condenser-0.2.1.tar.gz (6.8 kB 查看哈希)

上传时间

构建分发

condenser-0.2.1-py2.py3-none-any.whl (6.5 kB 查看哈希)

上传时间 Python 2 Python 3

由以下支持