我从一个表中加载数据到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)....'
字符串
4条答案
按热度按时间dfty9e191#
由于某些原因,Python MySql连接器只返回字节数组(更多信息在(How return str from mysql using mysql.connector?)中),但您可以使用
字符串
ogq8wdun2#
确保你使用了正确的排序规则和编码。我碰巧在我的一个网站数据库表中使用了
UTF8MB4_BIN
。把它改成了utf8mb4_general_ci
,它就成功了。ifmq2ha23#
生成一个 bytearray 现在是预期的行为。
它在 mysql-connector-python 8.0.24(2021-04-20)中进行了更改。根据v8.0.24 release notes,“* 二进制列作为字符串返回,而不是'bytes'或'bytearray'*”行为是该版本中修复的错误。
因此,如果数据库列是二进制类型(例如 binary 或 varbinary),则生成Python bytearray 是正确的行为。以前,它生成Python string,但现在它生成 bytearray。
因此,要么将数据库中的数据类型更改为非二进制数据类型,要么在代码中将 bytearray 转换为 string。因为尝试在
None
上调用decode()
方法会产生错误。您还必须确保字节表示有效的字符串,在用于解码/转换的字符编码中。lnlaulya4#
容易多了...
How to return str from MySQL using mysql.connector?
将mysql-connector-python==8.0.17添加到requirements.txt中为我解决了这个问题
“pip install mysql-connector-python”从终端