BIT 0表示为' \ x00'

时间:2016-01-21 07:52:51

标签: python mysql sqlalchemy pymysql sqlacodegen

在数据库表中,我有一个列定义为: enter image description here

使用此查询:     query = text(             " SELECT * FROM %s WHERE" %" aTable"             "%s =%s AND" %("完成",0)             )

    result = engine.execute(query)
    row = result.fetchone()

当我致电打印行['已完成'] 时,我会' \ x00'

为了生成表格 sqlacodegen ,生成了已完成列,如下所示:

Column('done', BIT(1), nullable=False),

我在SqlAlchemy中缺少一些配置吗?我不希望在我使用BIT列的任何地方将十六进制转换为int。

修改 所以问题不在于sqlalchemy,而是pymysql似乎应该受到责备。

2 个答案:

答案 0 :(得分:0)

尝试查看Python documentation的这一章。

但是,在您的情况下,转换您的十六进制可能足够 ord

>>> a = b'\x00' 
>>> a
'\x00'
>>> str(a)
'\x00'
>>> ord(a)
0
>>> ord('\x5f')
95

答案 1 :(得分:0)

解决方案是覆盖BIT列转换器并将其传递给pyMysql的连接:

from pymysql import converters
converions = converters.conversions
converions[FIELD_TYPE.BIT] = lambda x: False if '\x00' else True
return pymysql.connect(
        conv=converions,
        ...
    )