我正在尝试使用最初为Postgres数据库设计的SQLAlchemy ORMs创建一个内存中的SQLite数据库。为了允许SQLite引擎转换postgres特定的数据类型,我依赖于SQLAlchemy @compiles
装饰器,它与sqlalchemy.dialects.postgresql
命名空间中的类型一样工作
如何将geoalchemy2.Raster
数据类型转换为引擎无关的数据类型(我所关心的可能是sqlalchemy.BLOB
类型。重要的是,我可以创建类似的表,它们不需要精确)
这个示例代码按照预期转换了DOUBLE_PRECISION
类型,但是我不知道如何修改geoalchemy2.Raster
数据类型,它是UserDefinedType
。我希望能够为compile_DOUBLE_PRECISION()
编写一个类似的方法,将Raster
更改为BLOB
类型
import sqlalchemy
from sqlalchemy import Column, Integer
from sqlalchemy.dialects.postgresql import DOUBLE_PRECISION
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.sqlite.base import SQLiteTypeCompiler
from geoalchemy2 import Raster
Base = declarative_base()
class SomeModel(Base):
__tablename__ = "some_model"
id = Column(Integer, primary_key=True)
double_precision = Column(DOUBLE_PRECISION)
raster = Column(Raster)
# The following @compiles works as intended
@compiles(DOUBLE_PRECISION, 'sqlite')
def compile_DOUBLE_PRECISION(element, compiler: SQLiteTypeCompiler, **kw):
""" Handles postgres DOUBLE_PRECISION datatype as REAL in sqlite. """
return compiler.visit_real(element, **kw)
def test_throws_error_due_to_raster_data_type():
engine = sqlalchemy.create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
我对postgresql不太熟悉,但也许类似的东西可以用
相关问题 更多 >
编程相关推荐