【问题标题】:BIT 0 represented as '\x00'BIT 0 表示为 '\x00'
【发布时间】:2016-04-27 08:48:37
【问题描述】:

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

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

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

当我调用 print row['done'] 然后我得到 '\x00'

为了生成表,我 sqlacodegen 生成了 done 列,如下所示:

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

我是否缺少 SqlAlchemy 中的一些配置?我不想在要使用 BIT 列的任何地方将十六进制转换为整数。

编辑 所以问题不在于 sqlalchemy,但似乎 pymysql 是罪魁祸首。

【问题讨论】:

    标签: python mysql sqlalchemy pymysql sqlacodegen


    【解决方案1】:

    尝试看看Python documentation的这一章。

    但是,在您的情况下,像 ord 这样的东西可能足以转换您的十六进制:

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

    【讨论】:

      【解决方案2】:

      解决方法是重写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,
              ...
          )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2022-08-04
        • 2018-06-23
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多