use*_*337 5 python mysql mysql-python python-2.7
我使用Mysqldb和Python(2.7)从一个带有charset latin1的Mysql数据库返回一堆值.
mysql数据库具有类型为bit(1)的值,当返回它们时,它们看起来像'\ x01'
十进制值返回如此十进制('0E-8')
他们剩下的价值和类型都很好.
示例数据库结果集:
{'test':'\ x01','currency':u'bla','balance':十进制('0E-8'),'first':u'John'}
这就是我连接数据库的方式:self.con = MySQLdb.connect(host = conn ['host'],user = conn ['user'],passwd = conn ['passwd'],db = conn ['db '],charset = conn ['charset'],port = int(conn ['port'])如果conn中的'port'3306)
我希望bit(1)值返回True或False.我环顾四周,我认为可能是MySQLdb.converters.conversions,但我不知道如何实现这一点.任何想法都会很棒.谢谢
我无权更改数据库中的类型.
Rhy*_*ysC 10
尝试:
orig_conv = MySQLdb.converters.conversions
#Adding support for bit data type
orig_conv[FIELD_TYPE.BIT] = lambda data: data == '\x01'
passing this into my connection.
MySQLdb.connect(conv=orig_conv)
Run Code Online (Sandbox Code Playgroud)
使用"orig_conv [FIELD_TYPE.BIT] = bool"只是为我回复了所有内容
与 MySQL 内部的开发人员交谈时,他们都说 BIT 数据类型已损坏并且充满了错误。
示例:为什么不应在 MySQL 中使用 BIT 列,作者 Baron Schwartz,高性能 MySQL 的合著者。
所以我建议使用 TINYINT 并存储 0 或 1 来表示布尔值。您不会浪费任何空间,因为无论如何 BIT 列的大小都会向上舍入到最接近的整个字节。
MySQL 甚至有一个数据类型别名BOOL。当你使用它时,它被映射到TINYINT(1)(虽然 1 不影响任何东西)。
如果您无法更改数据类型,则可以将其映射到 SQL 查询中的整数:
MySQL 使用 1 或 0 作为布尔值,所以你可以这样做:
SELECT (test=B'1') AS test, currency, balance, first FROM ...
Run Code Online (Sandbox Code Playgroud)
或者你可以更详细:
SELECT IF(test=B'1', 1, 0) AS test, currency, balance, first FROM ...
Run Code Online (Sandbox Code Playgroud)
或者您可以完全符合 SQL:
SELECT CASE test=B'1' WHEN true THEN 1 ELSE 0 END AS test, currency, balance, first FROM ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |