show create table return b“ CREATE TABLE

时间:2018-10-12 03:26:33

标签: python-3.x pandas

不同的mysql数据库实例中的相同代码

sql_table_def = 'show create table {}.{}'.format(dbname,table_name)
df_table_def = pandas.read_sql_query(sql_table_def,self.conn)
create_table_sql = df_table_def.head(1)['Create Table'].values[0]

但是有时返回的值很奇怪:

print(create_table_sql)
b"CREATE TABLE 

"CREATE TABLE"前面有一个b !!

但是大多数数据库实例的返回是正确的:

 print(create_table_sql)

只需返回"CREATE TABLE",前面不要有b。

出什么问题了?

1 个答案:

答案 0 :(得分:0)

b前缀表明它是bytes对象,而不是str
您可以使用.decode(如果知道编码)将bytes转换为str

In [11]: b'string'
Out[11]: b'string'

In [12]: b'string'.decode("utf-8")  # the encoding may not be utf-8...
Out[12]: 'string'

In [13]: type(b'string')
Out[13]: bytes

In [14]: type('')
Out[14]: str

问题是数据库不知道编码,也不猜测(这可能是一件好事)。尽管您可能会发现不支持utf-8以外的其他编码(例如PyMySQL)...