pandas Python MySQL连接器返回字节数组而不是常规字符串值

vpfxa7rd  于 11个月前  发布在  Python
关注(0)|答案(4)|浏览(87)

我从一个表中加载数据到pandas中,然后将该数据插入到新表中。然而,我看到的不是正常的字符串值。
bytearray(b'TM16B0I8')应该是TM16B0I8
我做错了什么?
我的代码:

engine_str = 'mysql+mysqlconnector://user:pass@localhost/db'
engine = sqlalchemy.create_engine(engine_str, echo=False, encoding='utf-8')
connection = engine.connect()

th_df = pd.read_sql('select ticket_id, history_date', con=connection)

for row in th_df.to_dict(orient="records"):
    var_ticket_id = row['ticket_id']
    var_history_date = row['history_date']

    query = 'INSERT INTO new_table(ticket_id, history_date)....'

字符串

dfty9e19

dfty9e191#

由于某些原因,Python MySql连接器只返回字节数组(更多信息在(How return str from mysql using mysql.connector?)中),但您可以使用

var_ticket_id = row['ticket_id'].decode()
var_history_date = row['history_date'].decode()

字符串

ogq8wdun

ogq8wdun2#

确保你使用了正确的排序规则和编码。我碰巧在我的一个网站数据库表中使用了UTF8MB4_BIN。把它改成了utf8mb4_general_ci,它就成功了。

ifmq2ha2

ifmq2ha23#

生成一个 bytearray 现在是预期的行为。
它在 mysql-connector-python 8.0.24(2021-04-20)中进行了更改。根据v8.0.24 release notes,“* 二进制列作为字符串返回,而不是'bytes'或'bytearray'*”行为是该版本中修复的错误。
因此,如果数据库列是二进制类型(例如 binaryvarbinary),则生成Python bytearray 是正确的行为。以前,它生成Python string,但现在它生成 bytearray
因此,要么将数据库中的数据类型更改为非二进制数据类型,要么在代码中将 bytearray 转换为 string。因为尝试在None上调用decode()方法会产生错误。您还必须确保字节表示有效的字符串,在用于解码/转换的字符编码中。

lnlaulya

lnlaulya4#

容易多了...
How to return str from MySQL using mysql.connector?
将mysql-connector-python==8.0.17添加到requirements.txt中为我解决了这个问题
“pip install mysql-connector-python”从终端

相关问题