首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Mysqldb为位值返回'\x01‘

问Python Mysqldb为位值返回'\x01‘
EN

Stack Overflow用户
提问于 2013-10-09 03:05:28
回答 4查看 4.9K关注 0票数 7

我正在使用Mysqldb和Python(2.7)从一个带有字符集latin1的Mysql数据库中返回一堆值。

mysql数据库具有类型为bit(1)的值,当返回这些值时,它们看起来像这样'\x01‘

十进制值返回如下Decimal('0E-8')

其余的值和类型都没问题。

示例数据库结果集:

{'test':'\x01','currency':u‘’bla‘,'balance':Decimal('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‘) if’port‘if’port‘in conn else 3306)

我希望位(1)值返回为True或False。我看了看周围,我想可能是做MySQLdb.converters.conversions,但我不确定如何实现它。任何想法都是很棒的。谢谢

并且我没有权限更改数据库中的类型。

EN

回答 4

Stack Overflow用户

发布于 2017-04-07 12:16:23

尝试:

代码语言:javascript
复制
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)

对我来说,使用"orig_convFIELD_TYPE.BIT = bool“返回的所有内容都是真的

票数 10
EN

Stack Overflow用户

发布于 2013-10-09 03:09:41

在与MySQL内部组件的开发人员交谈时,他们都说BIT数据类型被破坏了,并且充满了错误。

例如:《高性能MySQL》的合著者Baron Schwartz的Why you should not use BIT columns in MySQL。

因此,我建议使用TINYINT并存储0或1来表示布尔值。您不会浪费任何空间,因为位列的大小无论如何都会向上舍入到最接近的整字节。

MySQL甚至有一个数据类型别名BOOL。当你使用它时,它被映射到TINYINT(1) (尽管1不会影响任何东西)。

如果不能更改数据类型,则可以在SQL查询中将其映射为整数:

MySQL使用1或0表示布尔值,因此您可以这样做:

代码语言:javascript
复制
SELECT (test=B'1') AS test, currency, balance, first FROM ...

或者你可以说得更详细一些:

代码语言:javascript
复制
SELECT IF(test=B'1', 1, 0) AS test, currency, balance, first FROM ...

或者,您可以完全兼容SQL:

代码语言:javascript
复制
SELECT CASE test=B'1' WHEN true THEN 1 ELSE 0 END AS test, currency, balance, first FROM ...
票数 5
EN

Stack Overflow用户

发布于 2013-10-09 17:37:34

弄清楚了这一点:所以必须在Mysqldb包中挖掘一些东西。

代码语言:javascript
复制
orig_conv = MySQLdb.converters.conversions
#Adding support for bit data type
orig_conv[FIELD_TYPE.BIT] = bool

passing this into my connection.
MySQLdb.connect(conv=orig_conv)

可在MySQLdb.constants中找到FIELD_TYPE,并可通过以下方式导入

代码语言:javascript
复制
from MySQLdb.constants import FIELD_TYPE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19256155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档