使用此查询:
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似乎应该受到责备。
答案 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,
...
)