我初学 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()查询中编码的问题...相关推荐

  1. python 在线客服_后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统...

    在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详细介绍了websocket协议以及结合Django如何实现各种功能,本次我们 ...

  2. python文件输出中文_【python】中文的输出,打印,文件编码问题解决方法

    直接在python中输入中文的字符串会报编译错误SyntaxError: Non-ASCII character,因为python文件默认编码方式是ASCII.如果想要打印中文字符,有两种方式: 1. ...

  3. python连接oracle数据库_深入理解Python3.6连接Oracle数据库

    Python3.6连接Oracle数据库的方法详解 本文实例讲述了Python3.6连接Oracle数据库的方法.分享给大家供大家参考,具体如下: 下载cx_Oracle模块模块: https://p ...

  4. origin9语言设置中文_英雄联盟手游怎么设置繁体 LOL手游繁中设置方法?_英雄联盟手游...

    英雄联盟手游终于在海外部分地区上线了,不过玩海外服有一点不好,就是界面都是外文,比如英文.日文.韩文等等.那么英雄联盟手游怎么设置繁体中文呢,这里就来给大家介绍一下LOL手游繁中设置方法,将游戏语言切 ...

  5. python读取文件名有中文_[请教]python的中文文件名处理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3 楼的可以用 sys.getfilesystemencoding 检测,但由於文件系统的差异,文件名 100% 无损转还是不太可,比如很多 *nix 的 ...

  6. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  7. python 保存本地乱码_请教大神,如何解决保存后的文件的乱码问题

    马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x #!/usr/local/bin/python #-*-coding:utf-8-*- #Get m ...

  8. python moviepy textclip中文_用Python玩转视频剪辑,秀的飞起!

    咪哥杂谈 本篇阅读时间约为 6 分钟. 1 前言 半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的文章要用到百度的语音识别接口. 那么今天 ...

  9. python csv字符串写入_请教:如何把csv里的 emoji 字符串正确写入 DB?

    [ 在 adoal (阿豆) 的大作中提到: ] : 标  题: Re: 请教:如何把csv里的 emoji 字符串正确写入 DB? : 发信站: 水木社区 (Mon May 14 20:17:51  ...

最新文章

  1. 如何在10亿个整数中找出前1000个最大的数?
  2. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...
  3. final关键字的几大特征
  4. 谷歌开源下一代推荐系统模拟器:RecSim NG
  5. java 多线程性能_Java中多线程的性能比较
  6. (转)腾讯2011.10.15校园招聘会笔试题
  7. NIHCC发布迄今世界最大的CT医学影像数据集(附下载)
  8. openstack搭建
  9. 终于没刘海了!iPhone12 Pro 渲染图首曝,回归经典
  10. 末日博士:比特币不应出现在散户或机构投资者的投资组合中
  11. TeeChart.NET 2022.4.8 专业版-Crack
  12. 网络安全|墨者学院在线靶场|投票系统程序设计缺陷分析
  13. 人人商城小程序用户授权登录失败,getUserProfile小程序登录接口升级
  14. 第1章 Pandas基础
  15. Android垂直方向滚动的跑马灯,带gif
  16. 解决ffmpeg合成的视频格式浏览器无法播放问题
  17. 汽修采购业务线上化,数商云采购平台系统实现企业采购高效协同
  18. RDD:基于内存的集群计算容错抽象(转)
  19. Android权限说明
  20. 什么是工作单位邮箱?工作域名邮箱怎么弄?

热门文章

  1. GDI+ MeasureString 引发的AccessViolationException
  2. css样式 三种引入方式 选择器 常用属性:背景属性 字体属性 边框属性 内间距 外间距 盒子模型
  3. Django建立一个音乐网站(四)
  4. 脑机结合,你准备好成为超人了吗?
  5. 依赖属性之“风云再起”五
  6. 手机卫士 java_[Java教程]Android 手机卫士2
  7. RK3399Pro sudo apt-get upgrade相关问题
  8. 8102年:想回到过去,试着让遗憾继续……
  9. java usb_用java写一个万能的USB接口(10)
  10. css实现红十字会图标