python sqlalchemy oracle 中文_请教关于 flask-sqlalchemy 查询 oracle 库时, query.all()查询中编码的问题...
我初学 python,打算照着网上的例程,用 flask 搭一个笔记网站练手,因为想着尽量贴近公司现有的基础资源,所以数据库没有照例程的用 mongoDB,而是直接连公司的 oracle 数据库,悲催的是这个库编码已经是 ZHS16GBK,不可能更改,而且也会是以后绕不过的一个坑,所以还是得将这个骨头啃下来。
现在的困难是,我能成功建表、写入数据,在构造 class 的时候,我增加了 toGBK()方法,将几个字段都转码,这样写进去的中文也是正常格式了。我还写了个 toUTF8()方法,准备照样子将查询出来的结果转为 UTF-8,可惜在 Note.query.all()这一步查询时就报错了,错误信息是:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xbf in position 0: invalid start byte
我直接自己写 sql 去查,都能成功转码,不懂为啥用了 query.all()就出错了。下面是我测试环境和两个相关文件代码,希望大家帮忙。
先列一下我这边的版本:
服务器:64 位 centos 7.3.1611
系统编码环境:
LANG=en_US.UTF-8
NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
Python 2.7.5
cx-Oracle==5.3
decorator==3.4.0
ez-setup==0.9
Flask==0.12.2
Flask-Script==2.0.5
Flask-SQLAlchemy==2.2
SQLAlchemy==1.1.13
oracle 数据库和客户端的版本都是 11.2.0.4
from app import db
import datetime
class Note(db.Model):
__tablename__ = 'WKNT_NOTES'
id_seq = db.Sequence('WKNT_NOTES_ID_SEQ')
id = db.Column(db.Integer, id_seq, primary_key=True)
created = db.Column(db.DateTime, default=datetime.datetime.now())
category = db.Column(db.String(60))
opt = db.Column(db.String(60))
content = db.Column(db.String(2000))
name = db.Column(db.String(60))
def __init__(self, category, opt, content, name):
self.category = category
self.opt = opt
self.content = content
self.name = name
def __repr__(self):
return '' % self.id
def toGBK(self):
self.category = self.category.decode("utf-8").encode("GBK")
self.opt = self.opt.decode("utf-8").encode("GBK")
self.content = self.content.decode("utf-8").encode("GBK")
self.name = self.name.decode("utf-8").encode("GBK")
return self
def toUTF8(self):
self.category = self.category.decode("GBK").encode("utf-8")
self.opt = self.opt.decode("GBK").encode("utf-8")
self.content = self.content.decode("GBK").encode("utf-8")
self.name = self.name.decode("GBK").encode("utf-8")
return self
# -*- coding: utf-8 -*-
from flask_script import Manager, Server
from app import *
manager = Manager(app)
manager.add_command("runserver", Server(host='0.0.0.0',port=80, use_debugger=True))
@manager.command
def save_note():
note = models.Note(
content='开张大吉',
name='daviswei',
opt='create',
category='网络')
note.toGBK()
db.create_all()
db.session.add(note)
db.session.commit()
@manager.command
def read_note():
notes = models.Note.query.all()
for n in notes:
n.toUTF8()
print(n)
@manager.command
def read_direct():
sql = 'select * from wknt_notes'
for notes in db.engine.execute(sql):
print notes.content.decode("GBK").encode("utf-8")
if __name__ == '__main__':
manager.run()
python sqlalchemy oracle 中文_请教关于 flask-sqlalchemy 查询 oracle 库时, query.all()查询中编码的问题...相关推荐
- python 在线客服_后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统...
在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详细介绍了websocket协议以及结合Django如何实现各种功能,本次我们 ...
- python文件输出中文_【python】中文的输出,打印,文件编码问题解决方法
直接在python中输入中文的字符串会报编译错误SyntaxError: Non-ASCII character,因为python文件默认编码方式是ASCII.如果想要打印中文字符,有两种方式: 1. ...
- python连接oracle数据库_深入理解Python3.6连接Oracle数据库
Python3.6连接Oracle数据库的方法详解 本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://p ...
- origin9语言设置中文_英雄联盟手游怎么设置繁体 LOL手游繁中设置方法?_英雄联盟手游...
英雄联盟手游终于在海外部分地区上线了,不过玩海外服有一点不好,就是界面都是外文,比如英文.日文.韩文等等.那么英雄联盟手游怎么设置繁体中文呢,这里就来给大家介绍一下LOL手游繁中设置方法,将游戏语言切 ...
- python读取文件名有中文_[请教]python的中文文件名处理
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3 楼的可以用 sys.getfilesystemencoding 检测,但由於文件系统的差异,文件名 100% 无损转还是不太可,比如很多 *nix 的 ...
- python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
<Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: <Python之禅>中对于Pyt ...
- python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题
马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x #!/usr/local/bin/python #-*-coding:utf-8-*- #Get m ...
- python moviepy textclip中文_用Python玩转视频剪辑,秀的飞起!
咪哥杂谈 本篇阅读时间约为 6 分钟. 1 前言 半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的文章要用到百度的语音识别接口. 那么今天 ...
- python csv字符串写入_请教:如何把csv里的 emoji 字符串正确写入 DB?
[ 在 adoal (阿豆) 的大作中提到: ] : 标 题: Re: 请教:如何把csv里的 emoji 字符串正确写入 DB? : 发信站: 水木社区 (Mon May 14 20:17:51 ...
最新文章
- 如何在10亿个整数中找出前1000个最大的数?
- OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...
- final关键字的几大特征
- 谷歌开源下一代推荐系统模拟器:RecSim NG
- java 多线程性能_Java中多线程的性能比较
- (转)腾讯2011.10.15校园招聘会笔试题
- NIHCC发布迄今世界最大的CT医学影像数据集(附下载)
- openstack搭建
- 终于没刘海了!iPhone12 Pro 渲染图首曝,回归经典
- 末日博士:比特币不应出现在散户或机构投资者的投资组合中
- TeeChart.NET 2022.4.8 专业版-Crack
- 网络安全|墨者学院在线靶场|投票系统程序设计缺陷分析
- 人人商城小程序用户授权登录失败,getUserProfile小程序登录接口升级
- 第1章 Pandas基础
- Android垂直方向滚动的跑马灯,带gif
- 解决ffmpeg合成的视频格式浏览器无法播放问题
- 汽修采购业务线上化,数商云采购平台系统实现企业采购高效协同
- RDD:基于内存的集群计算容错抽象(转)
- Android权限说明
- 什么是工作单位邮箱?工作域名邮箱怎么弄?
热门文章
- GDI+ MeasureString 引发的AccessViolationException
- css样式 三种引入方式 选择器 常用属性:背景属性 字体属性 边框属性 内间距 外间距 盒子模型
- Django建立一个音乐网站(四)
- 脑机结合,你准备好成为超人了吗?
- 依赖属性之“风云再起”五
- 手机卫士 java_[Java教程]Android 手机卫士2
- RK3399Pro sudo apt-get upgrade相关问题
- 8102年:想回到过去,试着让遗憾继续……
- java usb_用java写一个万能的USB接口(10)
- css实现红十字会图标