SQLAlchemy ORM 查询编码

Posted

技术标签:

【中文标题】SQLAlchemy ORM 查询编码【英文标题】:SQLAlchemy ORM Query encoding 【发布时间】:2014-12-04 02:15:44 【问题描述】:

伙计们,

您能否就以下问题提出建议。 我正在尝试以本机格式显示值 - 西里尔文。

以下是我的查询

db.session.query(items.item_name).join(item_ship, item_ship.item_id == items.id).join(house_shipment, house_shipment.id == item_ship.shipment_id).first();

结果:(u'\u041c\u0443\u0436\u0441\u043a\u0430\u044f \u043e\u0431\u0443\u0432\u044c',)

表格项目的默认排序规则设置为utf8_general_ci,我的连接字符串如下。

mysql://root:Abc123@localhost/test?charset=utf8

请帮忙。

谢谢,

【问题讨论】:

在我看来像西里尔字母:map(unicodedata.name, u'\u041c\u0443\u0436\u0441\u043a\u0430\u044f') Out[4]: ['CYRILLIC CAPITAL LETTER EM', 'CYRILLIC SMALL LETTER U', 'CYRILLIC SMALL LETTER ZHE', 'CYRILLIC SMALL LETTER ES', 'CYRILLIC SMALL LETTER KA', 'CYRILLIC SMALL LETTER A', 'CYRILLIC SMALL LETTER YA'] 【参考方案1】:

你的编码是正确的:

>>> print(u'\u041c\u0443\u0436\u0441\u043a\u0430\u044f \u043e\u0431\u0443\u0432\u044c')
Мужская обувь
>>> print(repr(u'Мужская обувь'))
u'\u041c\u0443\u0436\u0441\u043a\u0430\u044f \u043e\u0431\u0443\u0432\u044c'

您得到的主要问题不是字符串,而是包含第一个结果行的对象。所以你得到repr 的对象。 将查询末尾的.first() 更改为.scalar()。 Scalar 将返回第一行的第一列。 作为另一种变体,您可以访问行对象并从中提取字符串。

【讨论】:

谢谢。我想通了。下次我会尝试更具描述性。

以上是关于SQLAlchemy ORM 查询编码的主要内容,如果未能解决你的问题,请参考以下文章

flask_sqlalchemy

SQlAlchemy的增删改查

Flask-SQLAlchemy 学习总结

tornado 07 数据库—ORM—SQLAlchemy—查询

SQLAlchemy 将外连接 ORM 查询转换为 Core

python+ sqlalchemy实现orm创建表和查询操作