sae mysql 中文_SAE python, flask, MySQL数据库 中文/汉语 编码

在SAE(新浪云)上搭建微信公众账号的服务器,使用到MySQL数据库,我需要在数据库中存储中文字段,并读取出来,发送给用户。

我采用python语言的flask操作,期间遇到了中文字段读出为 ??????? 的问题,已解决,喜悦,所以将解决方案总结下分享给大家。

首先,在MySQL建数据库的时候,要选择utf-8编码, 中文字段用 varchar格式 就可以

然后在我们server用python的flask框架,装饰器来实现数据库select操作的时候需要注意以下两点,即可实现。

1. 在文件第二句注明编码方式 #encoding=utf-8

2. 在connect中添加一句 charset = 'utf8',注意无论是用装饰器还是直接在函数中调用 MySQLdb.connect( )方法都一样

#这是文件开头,表明编码方式,第一句是所有.py文件必须写的,第二句是防止数据库中文字段读取出错必须写的

# -*- coding:utf8 -*-

#encoding = utf-8

import time

import MySQLdb

#这是采用装饰器实现数据库连接操作,注意到MySQLdb.connect(... charset='utf8'),注意小写

from sae.const import (MYSQL_HOST, MYSQL_HOST_S, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB)

@app.before_request

def before_request():

g.db = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB, port = int(MYSQL_PORT), charset = 'utf8')

@app.teardown_request

def teardown_request(exception):

if hasattr(g, 'db'): g.db.close()

#注意row[-1]读取的就是中文字段,用unicode转码就能输出字符串啦

@app.route('/',methods=['GET','POST'])

def wechat_auth():

if request.method == 'POST':

c = g.db.cursor()

c.execute("select * from my_fridge")

msgs = list(c.fetchall())

number = len(msgs)

content += str(number)+'\\n'

for row in msgs:

content += unicode(row[-1])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值