V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dushurenbale
V2EX  ›  Python

sae+python+Django+mysql 的中文乱码问题。

  •  
  •   dushurenbale · 2015-02-21 22:25:44 +08:00 · 4302 次点击
    这是一个创建于 3373 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新人写SAE后台服务器,一开始什么都不会,代码都是参考SAE文档的。然后浏览器访问的时候出现了乱码。汉字都被相等数量的问号所代替,而英文和数字正常。汉字在MYSQL里面存储的方式是
    varchar(20) utf8_general_ci 是可以没有乱码的。
    SAE的MYSQL管理方式是PHPMyAdmin。
    Python2.7.3,
    DJango1.4,
    MySQL存储引擎MyISAM 版本5.5.23-log
    DJango的View.py代码如下
    #!/usr/bin/python
    #-*-coding:utf-8-*-

    from django.http import HttpResponse
    import sae
    from mysql import mysql
    from sae.mail import send_mail

    def hello(request):
    option = "select * from company where id=1;"
    result = ''
    result = result+str(mysql(option))
    return HttpResponse(result)

    同级目录有个mysql.py 代码如下
    #!/usr/bin/python
    #-*-coding:utf-8-*-

    import MySQLdb
    import sae.const
    MYSQL_DB = sae.const.MYSQL_DB
    MYSQL_USER = sae.const.MYSQL_USER
    MYSQL_PASS = sae.const.MYSQL_PASS
    MYSQL_HOST_M = sae.const.MYSQL_HOST
    MYSQL_HOST_S = sae.const.MYSQL_HOST_S
    MYSQL_PORT = int(sae.const.MYSQL_PORT)

    def mysql(option):
    connection = MySQLdb.connection(host=MYSQL_HOST_M,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PASS)
    connection.select_db(MYSQL_DB)
    connection.query(option)
    r = connection.store_result()
    result = r.fetch_row()
    return result
    尝试过connection = MySQLdb.connection(host=MYSQL_HOST_M,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PASS)
    这句改成connection = MySQLdb.connection(host=MYSQL_HOST_M,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PASS,charset='utf8') 但是charset报错,出了一个TYPEERROR。invaild keyword 什么的。
    去看MySQLdb 好像必须是connect()函数才可以用这个charset。但是SAE官方文档给了connection()。我不知道connection()怎么用。而connect()在SAE环境下不会用。求求各位大神帮忙解决。。
    5 条回复    2015-02-23 00:35:07 +08:00
    geeklian
        1
    geeklian  
       2015-02-22 01:12:13 +08:00 via iPhone
    好吧...虽然我没用过sae

    但为啥django要写的这么不django,sae所限么?直接orm也会编码出问题么。
    imlonghao
        2
    imlonghao  
       2015-02-22 09:58:49 +08:00 via Android
    option = "select * from company where id=1;"

    需要这样的还叫Django.............
    imlonghao
        3
    imlonghao  
       2015-02-22 10:00:11 +08:00 via Android
    如果是我,我会在
    setting.py里面把这个设置了
    import sae.const
    MYSQL_DB = sae.const.MYSQL_DB
    MYSQL_USER = sae.const.MYSQL_USER
    MYSQL_PASS = sae.const.MYSQL_PASS
    MYSQL_HOST_M = sae.const.MYSQL_HOST
    MYSQL_HOST_S = sae.const.MYSQL_HOST_S
    而不是自己重写查询
    dushurenbale
        4
    dushurenbale  
    OP
       2015-02-22 14:08:55 +08:00
    好吧。。我不知道django的规范写法。。。
    全是看样例。然后自己修修补补。。
    没敢动setting
    因为不太懂django,如果SAE官方没给出代码也不敢用一些模板。。
    shiroming
        5
    shiroming  
       2015-02-23 00:35:07 +08:00 via Android
    django是在models里面写数据库表和字段的
    一般不用你这样写
    直接orm views里面导入models
    调用表.字段就完事了

    没有遇到需要转码的地方 ~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2849 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:30 · PVG 22:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.