変更できないテーブルを含む MSSQL データベースがあり、読み取り専用 (SELECT ステートメント) としてしか操作できません。私はsqlalchemyを使用しています。私がする必要があるのは、すべてのクエリの CAST() SQL 操作で特定の列を自動的にラップすることです。コードが問題について考える必要がないように、これを低レベルで実行したいと考えています。私がこれを行っている理由は、この質問で説明されています。
私のテーブルは次のようなものです:
from sqlalchemy import Column, Integer, Sequence
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class myTable(Base):
__tablename__ = u'mytable'
id = Column(Integer, Sequence('table_id_seq'), primary_key=True)
problem_field = Column(DECIMAL(12, 4), nullable=True)
私は次のように TypeDecorator を使用しようとしています:
from sqlalchemy import Column, Integer, Sequence, types
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.expression import cast
Base = declarative_base()
class CastToFloatType(types.TypeDecorator):
'''Converts stored Decimal values to Floats via CAST operation
'''
impl = types.Numeric
def column_expression(self, col):
return cast(col, Float)
class myTable(Base):
__tablename__ = u'mytable'
id = Column(Integer, Sequence('table_id_seq'), primary_key=True)
wrapped_field = Column(CastToFloatType, nullable=True)
しかし、それは何もしないようです。