【问题标题】:'charmap' codec can't encode character '\u010c' in position 0: character maps to <undefined> MariaDB and SQLAlchemy'charmap' 编解码器无法在位置 0 编码字符 '\u010c':字符映射到 <undefined> MariaDB 和 SQLAlchemy
【发布时间】:2021-11-12 16:44:36
【问题描述】:

我正在尝试使用 SQLAlchemy 将数据插入 MariaDB 数据库。我正在解析一个 XML 文件以获取我需要插入的数据。我读取数据没有问题。许多关于此错误的问题,例如python 3.2 UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined> 是指从文件中读取数据。但是,我在这一步遇到了错误,

con_string = db_driver + '://' + db_user + ':' + db_password + '@' + db_host + ':' + db_port + '/' + db_name
engine = sqlalchemy.create_engine(con_string, pool_pre_ping=True)

meta_data = sqlalchemy.MetaData(engine)
table = sqlalchemy.Table('table', meta_data, autoload=True, autoload_with=engine)
table.insert().execute(data)

data 是一个字典。它包含通过解析映射到表列的 XML 文件获得的值。

可能是什么原因?

【问题讨论】:

  • 请添加您的问题的minimal reproducible example。你给我们的代码引发了NameError
  • 数据是对象吗?你是说table.insert().values(data)吗?
  • data 是这里的字典。抱歉,我忘了提。
  • 我也试过stmt = table.insert().values(data) engine.execute(stmt) 没有任何运气。
  • 表格使用什么字符集/排序规则?

标签: python sqlalchemy mariadb decode encode


【解决方案1】:

为了支持所有 Unicode 字符,我们需要在连接 URL 的末尾添加 ?charset=utf8mb4,如

所述

https://docs.sqlalchemy.org/en/14/dialects/mysql.html#charset-selection

例如,

e = create_engine(
    "mysql+pymysql://scott:tiger@localhost/test?charset=utf8mb4")

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2013-02-17
    相关资源
    最近更新 更多