django 判断mysql中的bit(1)
问题:
django访问mysql数据库时,可以通过自醒的方式获取数据库中的字段。对于mysql中的bit字段,比较特殊,django无法识别, 它将其默认识别为models.TextField?(),这显然是不对的,在将其改为models.BooleanField()后,存储数据正确,数据库里可以查看到数据。 但是在if,else判断时均显示为true,无法进行判别。解决方法很简单,在判断字段时采用ord(field)就行。 看下面的例子就成。
示例:
比如在eucalyptus中,eucalyptus_auth数据库中,表auth_users定义如下:
id | varchar(255) | NO | PRI | NULL |
last_update_timestamp | datetime | YES | NULL | |
version | int(11) | YES | NULL | |
auth_user_is_admin | bit(1) | YES | NULL | |
auth_user_is_enabled | bit(1) | YES | NULL | |
auth_user_name | varchar(255) | YES | UNI | NULL |
auth_user_password | varchar(255) | YES | NULL | |
auth_user_query_id | varchar(255) | YES | NULL | |
auth_user_secretkey | varchar(255) | YES | NULL | |
auth_user_token | varchar(255) | YES | NULL |
其中,字段auth_user_is_admin,auth_user_is_enabled为bit(1)类型,在django通过数据库产生的model中,定义如下:
class AuthUsers(models.Model):
id = models.CharField(max_length=765, primary_key=True)
last_update_timestamp = models.DateTimeField(null=True, blank=True)
version = models.IntegerField(null=True, blank=True)
auth_user_is_admin = models.TextField(blank=True) # This field type is a guess
auth_user_is_enabled = models.TextField(blank=True) # This field type is a guess.
auth_user_name = models.CharField(unique=True, max_length=765, blank=True)
auth_user_password = models.CharField(max_length=765, blank=True)
auth_user_query_id = models.CharField(max_length=765, blank=True)
auth_user_secretkey = models.CharField(max_length=765, blank=True)
auth_user_token = models.CharField(max_length=765, blank=True)
class Meta:
db_table = u'auth_users'
django 无法识别mysql中的bit类型,如它的注释:This field type is a guess。在将其更改为 models.BooleanField()后,在检索数据时,无法直接通过if self.auth_user_is_admin进行bool的判断, 无论数据库中auth_user_is_admin是0或是1,if判断均为true,通过添加if ord(self.auth_user_is_admin):来对值进行转换,一切正常了。
posted on 2012-01-13 23:43 hanxiangduo 阅读(1501) 评论(0) 编辑 收藏 举报