Python、SQLAlchemy 和 MySQL,奇数字符

标签 python mysql sqlalchemy

我有一个使用 UTF8 排序规则定义的 MySQL 数据库。表“clientes”及其所有列都指定为 UTF8。

DROP TABLE IF EXISTS `clientes`;
CREATE TABLE IF NOT EXISTS `clientes` (
  `ID` varchar(35) NOT NULL DEFAULT '',
  `nombre` varchar(255) NOT NULL DEFAULT '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `clientes` (`ID`, `nombre`) VALUES
('111', 'María Español Marqués'),
('222', 'Paulo Conceiçao'));

使用 MySQL 客户端(在终端、phpmyadmin 中...)的查询可以正常显示字符:

mysql> select * from clientes;
+-----+--------------------------+
| ID  | nombre                   |
+-----+--------------------------+
| 111 | María Español Marqués    |
| 222 | Paulo Conceiçao          |
+-----+--------------------------+
2 rows in set (0.00 sec)

现在,我使用 SQLAlchemy 创建类:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref

engine = create_engine('mysql://root:toor@localhost')
engine.execute("USE nTal")
Base = declarative_base()

class Cliente(Base):

    __tablename__ = "clientes"

    ID = Column(String(35), primary_key=True)
    nombre = Column(String(255))

    def __init__(self, nombre):
        """"""
        self.nombre = nombre

engine.dispose()

当我使用 SQLAlchemy 运行查询时,我得到带有重音符号的奇怪字符,西类牙语和葡萄牙语符号不可见。

res = session.query(Cliente).all()
for cliente in res:
    print cliente.ID + ", " + cliente.nombre

111, Mar�a Espa�ol Marqu�s
222, Paulo Concei�ao

当然,我搜索了很多关于编码和解码的内容,但我发现最多的是关于错误,而不是关于不正确的显示。

提前致谢。

最佳答案

尝试在连接字符串中添加“?charset=utf8”:

engine = create_engine('mysql://root:******@localhost?charset=utf8')

关于Python、SQLAlchemy 和 MySQL,奇数字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21686936/

相关文章:

python - redis-py 有 NUMSUB 命令吗?

MYSQL:将产品分成几列

MySQL - 如何将一个表中不同行的信息合并到另一个表中的一行中?

php - 从性能角度重定向用户的最佳方式

python - 使用 SQLAlchemy 进行动态 OR 过滤

python - SQLAlchemy 从两个具有空 LEFT JOIN 的表中选择返回空结果

python - 使用多类观察序列训练 hmmlearn HMM

Python程序输出数字后跟 'L'

python - SQLAlchemy核心engine.execute()与connection.execute()

python - 运行时警告: invalid value encountered in power while plotting poisson distribution