捕获SQLAlchemy警告



当使用SQLAlchemy的内置get_columns方法时,我有时会收到以下警告:

SAWarning: Did not recognize type 'geography' of column 'column_name'

我该如何处理这个警告?这似乎不起作用:

try:
inspector = inspect(engine)
columns = inspector.get_columns(table_name)
return columns
except exc.SAWarning as sawex:
logger.error(sawex)
<do something here>

这只是一个警告,而不是异常,因此,您的except子句永远不会执行。

由于"geography"是PostGIS PostgreSQL扩展特有的类型(默认情况下未启用(,sqlalchemy不知道该类型也就不足为奇了。

因此,为了消除警告,你必须让AQLAlchemy知道"地理"PostGIS类型。要么通过导入GeoAlchemy包,要么通过添加其他类型。


来自GeoAlchemy文档:

from geoalchemy2 import Geometry  # <= not used but must be imported

例如:

from geoalchemy2 import Geography

或者,只需让类型已知,而不必安装另一个Python包:

import sqlalchemy
import sqlalchemy.sql.sqltypes
import sqlalchemy.dialects.postgresql.base
class GEOGRAPHY(sqlalchemy.sql.sqltypes.TypeEngine):
__visit_name__ = "geography"
def __init__(self, point_type, srid):
# e.g. 'PointZ'
self.point_type = point_type
# e.g. '4326'
self.srid = srid
sqlalchemy.dialects.postgresql.base.ischema_names['geography'] = GEOGRAPHY

因此,这消除了警告,但当插入几何值时,您不能直接提供元组,而是必须准备一些适当的字符串,例如:

location = f'POINT({longitude} {latitude})'

类似地,在选择时,必须通过选择表达式提取内部坐标。

最新更新