2013-08-24 83 views
2

我正在使用IBM DB2數據庫,使用ibm_db2驅動程序和sqlalchemy。 我的模式是:從數據庫(例如SQLAlchemy列結果處理

class User(Model): 
    id   = Column('UID', Integer, primary_key=True) 
    user  = Column('USER', String(20)) 
    password = Column('PASSWORD', String(10)) 
    name  = Column('NAME', String(30)) 

字符串字段進來的形式:

>>> "John        " 

,其中值是正確的用空格填充的全長模式領域。

我需要改變這個行爲和SQLAlchemy的類型字符串(或其衍生物)所產生的後續(例如value.strip())由query.all輸出結果()之前

>>> "John" 

我該怎麼做?

@特性裝飾者不適用。我需要改變一個標準的sqlalchemy String類的行爲。

+1

您是通過SQLAlchemy還是通過手動創建此表?似乎你有一個CHAR列而不是VARCHAR? –

回答

4

我不想改變標準字符串的行爲,但做出一個新的類型(那麼你可以將其重命名爲每個模塊的基礎上或任何字符串),但它是乾淨的那樣:

from sqlalchemy import types 

class StrippedString(types.TypeDecorator): 
    ''' 
    Returns CHAR values with spaces stripped 
    ''' 

    impl = types.String 

    def process_bind_param(self, value, dialect): 
     "No-op" 
     return value 

    def process_result_value(self, value, dialect): 
     "Strip the trailing spaces on resulting values" 
     return value.rstrip() 

    def copy(self): 
     "Make a copy of this type" 
     return StrippedString(self.impl.length) 

現在您可以使用StrippedString而不是String

+0

我很肯定你不需要實現nop函數:默認會處理它們。 – javex

+0

真的,從sa文檔複製並認爲我保持完整性 –

+0

謝謝SOOO很多!這正是我需要的!你太棒了!!!謝謝!!! – yokotoka