SQLAlchemy和UnicodeDecodeE

2024-04-26 00:30:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

当我将来自MySQL数据库的文本(我正在使用SQLAlchemy访问该数据库)传递给此函数时:

re.compile(ur"<([^>]+)>", flags=re.UNICODE).sub(u" ", s)

数据库编码是utf-8,我甚至将编码传递给SQLAlchemy的create_引擎函数。

编辑: 这就是我查询数据库的方式:

doc = session.query(Document).get(doc_id)
s = doc.title

根据建议,我将s.decode('utf-8')传递给sub。上面的错误消失了,但对于不同的文档,我得到了不同的错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xeb in position 449: invalid continuation byte

数据库表的定义如下:

CREATE TABLE `articles` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `cdate` datetime DEFAULT NULL,
  `link` varchar(255) DEFAULT NULL,
  `content` text,
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `link_idx` (`link`)
) ENGINE=InnoDB AUTO_INCREMENT=4127834 DEFAULT CHARSET=utf8;

任何帮助都将不胜感激


Tags: 函数inid数据库defaultdocsqlalchemylink
1条回答
网友
1楼 · 发布于 2024-04-26 00:30:59

我已经解决了这个问题。SQLAlchemy返回的title列是str,而不是Unicode。 我认为将encoding='utf8'作为参数添加到create_engine可以解决这个问题,但是,正确的方法是将其传递到数据库URI:mysql://me@myserver/mydatabase?charset=utf8

谢谢你的回答!

相关问题 更多 >

    热门问题