使用sqlalchemy,如何转换1& postgres中0到布尔值?

时间:2014-01-19 01:29:07

标签: postgresql sqlalchemy

我在JSON中获得了一些数据,其中布尔值为0& 1。

在postgres表中是一个布尔字段,并期望true&假的。

我在加载表时尝试这个:

class PGBool(types.TypeDecorator):
    impl = types.BOOLEAN

    def process_result_value(self, value, dialect):
        #print value
        if value is not None:
            return bool(value)

        return value


def listen(self, table, column_info):
    type_ = column_info['type']
    print column_info['name'], type_
    if str(type_).split('.')[-1] == 'BOOLEAN':
        column_info['type'] = PGBool

    return column_info

def getTable(self, name):
    return sq.Table(
        name,
        self.meta,
        autoload=True,
        autoload_with=self.con,
        listeners=[
            ('column_reflect', listen)
        ]
    )

def saveRecord(self, table, data):
    ..
    ..
    if exist:
        self.con.execute(
            table.update().where(table.c.id == theGuid),
            data
        )
    else:
        self.con.execute(
            table.insert(),
            data
        )

但数据未转换,仍尝试插入0& 1。

1 个答案:

答案 0 :(得分:1)

当您使用TypeDecorator时,需要关注数据的两个方面。一个是进入数据库的数据,另一个是 out 的数据。进入的一侧被称为"绑定参数"而走出去的是"结果"数据。既然你想在这里处理一个INSERT,你就是在绑定方面,所以TypeDecorator看起来像:

from sqlalchemy.types import TypeDecorator, Boolean

class CoerceToBool(TypeDecorator):
    impl = Boolean

    def process_bind_param(self, value, dialect):
        if value is not None:
            value = bool(value)
        return value