我有一个sqlAlchemy模型,它有一个类型为几何的列,其定义如下:
point_geom = Column(Geometry('POINT'), index=True)
我正在使用geoalchemy2模块:
from geoalchemy2 import Geometry
然后我使用sqlAlchemy ORM进行查询,一切正常。例如:
data = session.query(myModel).filter_by(...)
我的问题是,当我需要获取查询对象的sql语句时,我使用以下代码:
sql = data.statement.compile(dialect=postgresql.dialect())
但是几何类型的列被转换为Byte [],因此生成的sql语句是这样的:
SELECT column_a, column_b, ST_AsBinary(point_geom) AS point_geom
FROM tablename WHERE ...
应该采取哪些措施来避免将几何类型转换为字节类型?
答案 0 :(得分:0)
使用Flask-Sqlalchemy和Geoalchemy2时,我遇到了相同的问题,并按以下方法解决了此问题。
您只需要创建一个GEOMETRY类型的新子类即可。
如果您查看documentations,则会给出“ GEOMETRY”类型的参数:
那我做了什么?我刚刚创建了带有所需函数,元素和构造函数的新子类,并像往常一样在我的数据库模型上使用了“ Geometry”类型。
from geoalchemy2 import Geometry as BaseGeometry
from geoalchemy2.elements import WKTElement
class Geometry(BaseGeometry):
from_text = 'ST_GeomFromText'
as_binary = 'ST_asText'
ElementType = WKTElement
如您所见,我仅更改了基类的这3个参数。 这将返回带有必需列变量的字符串。