gpt4 book ai didi

mysql - 如何在 SQLAlchemy 的 `charset` 中使用 `encoding` 和 `create_engine`(创建 Pandas 数据框)?

转载 作者:可可西里 更新时间:2023-11-01 06:59:36 26 4
gpt4 key购买 nike

我对 charset 和 encoding 的方式很困惑在 SQLAlchemy 中工作。我了解(并已阅读)charsets and encodings 之间的区别, 我有一张很好的照片 the history of encodings .

我在 latin1_swedish_ci 的 MySQL 中有一个表 (为什么? 可能是因为 this )。我需要创建一个 pandas 数据框,在其中我可以获得正确的字符(而不是奇怪的符号)。最初,这是在代码中:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db')
sql_query = "select * from table1"
df = pandas.read_sql(sql_query, connect_engine)

我们开始遇到 Š 字符的问题(对应于 u'\u0160' unicode,但我们得到的是 '\x8a')。我希望这会起作用:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='utf8') 

但是,我继续得到 '\x8a',我意识到,考虑到编码参数的默认值是 utf8,这是有道理的。所以,然后,我尝试 encoding='latin1' 来解决这个问题:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='latin1')

但是,我仍然得到相同的 '\x8a'。明确地说,在这两种情况下(encoding='utf8'encoding='latin1'),我都可以做 mystring.decode('latin1') 但不是 mystring.decode('utf8')

然后,我重新发现了连接字符串中的 charset 参数,即 'mysql://user:password@1.1.1.1/db?charset=latin1' .在尝试了所有可能的字符集和编码组合之后,我发现这个有效:

connect_engine = create_engine('mysql://user:password@1.1.1.1/db?charset=utf8')

如果有人能向我解释如何正确使用连接字符串中的 charset 以及 create_engine< 中的 encoding 参数,我将不胜感激?

最佳答案

encoding 参数无法正常工作。

所以,正如@doru 在 this link 中所说的那样,您应该在连接字符串的末尾添加 ?charset=utf8mb4。像这样:

connect_string = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE)

关于mysql - 如何在 SQLAlchemy 的 `charset` 中使用 `encoding` 和 `create_engine`(创建 Pandas 数据框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45279863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com