2013-05-06 5 views
8

मैं अजगर में नया हूं। आज जब मैं कुछ खोज फ़ंक्शन लिखता हूं तो मुझे एक त्रुटि मिली। मैं ऐसा करने के लिए स्क्लेल्केमी ओआरएम का उपयोग करता हूं, मेरे फ़ंक्शन में, मैं एक चीनी शब्द को कुंजी शब्द के रूप में इनपुट करता हूं। एचटीएमएल पेज मुझे एक यूनिकोड एन्कोडरर/उपयोगकर्ता/खोज पर देता है: 'लैटिन -1' कोडेक स्थिति में अक्षरों को एन्कोड नहीं कर सकता 0- 1: क्रमशः सीमा में नहीं (256)। और मेरे कोड इस तरह है:UnicodeEncodeError: 'लैटिन -1' कोडेक स्थिति 0-1 में अक्षरों को एन्कोड नहीं कर सकता है: क्रमशः श्रेणी में नहीं है (256)

def user_search(request): 
    name = request.GET.get('name').strip() 
    user_list = list() 

    if name: 
     user_list = User.get_by_name(name) 

class User(object): 
    @classmethod 
    def get_by_name(cls, name): 
     return DBSession.query(cls).filter(cls.name==name) 

और ट्रैसबैक यहाँ है:

Traceback: 
    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/jiankong/git/admin-server/lib/decorators.py" in wrapper 
    75.      return func(request, *args, **kwargs) 
File "/home/jiankong/git/admin-server/lib/decorators.py" in wrapper 
    39.    output = function(request, *args, **kwargs) 
File "/home/jiankong/git/admin-server/apps/user/user_views.py" in user_search 
    47.  users = jump_page(paginator, page) 
File "/home/jiankong/git/admin-server/apps/user/utils.py" in jump_page 
    92.   return paginator.page(1) 
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in page 
    37.   number = self.validate_number(number) 
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in validate_number 
    28.   if number > self.num_pages: 
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in _get_num_pages 
    60.    if self.count == 0 and not self.allow_empty_first_page: 
File "/usr/local/lib/python2.6/dist-packages/django/core/paginator.py" in _get_count 
    48.     self._count = self.object_list.count() 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in count 
    2414.   return self.from_self(col).scalar() 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in scalar 
    2240.    ret = self.one() 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in one 
    2209.   ret = list(self) 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in __iter__ 
    2252.   return self._execute_and_instances(context) 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/orm/query.py" in _execute_and_instances 
    2267.   result = conn.execute(querycontext.statement, self._params) 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in execute 
    664.             params) 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in _execute_clauseelement 
    764.    compiled_sql, distilled_params 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/base.py" in _execute_context 
    871.          context) 
File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.8.1dev-py2.6-linux-i686.egg/sqlalchemy/engine/default.py" in do_execute 
    324.   cursor.execute(statement, parameters) 
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/cursors.py" in execute 
    183.    query = query % db.literal(args) 
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/connections.py" in literal 
    264.   return self.escape(o, self.encoders) 
File "/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.4-py2.6-linux-i686.egg/MySQLdb/connections.py" in unicode_literal 
    202.     return db.literal(u.encode(unicode_literal.charset)) 

Exception Type: UnicodeEncodeError at /user/search 
Exception Value: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)` 

जब मैं त्रुटि से सामना हुआ, मैं अजगर खोल में एक परीक्षण किया था, यह अच्छी तरह से काम किया, कोड यहाँ है :

apps.user.models आयात उपयोगकर्ता से

उपयोगकर्ता = User.get_by_name ('某人') प्रथम() प्रिंट उपयोगकर्ता प्रिंट user.name 某人

तो क्या मैं यह बताने के लिए यह मेरी html पृष्ठ में काम किया? बहुत सराहना कर सकते हैं !!

+0

मुझे लगता है कि 'user.name' का प्रकार स्ट्रिंग है? इसे यूनिकोड में बदलने की कोशिश करें। – schlamar

उत्तर

20

मैं तुम्हें MySQL का उपयोग कर रहे है कि यह सोचते कर रहा हूँ यहां MySQLdb ड्राइवर के साथ।

MySQLdb ड्राइवर द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट एन्कोडिंग लैटिन -1 है, जो आपके चरित्र सेट का समर्थन नहीं करता है। आपको MyTQLdb (http://docs.sqlalchemy.org/en/rel_0_8/dialects/mysql.html#unicode देखें) के माध्यम से अपने डेटाबेस के साथ संवाद करने में सक्षम होने के लिए यूटीएफ -8 (या अन्य, लेकिन यूटीएफ -8 सबसे आम है) का उपयोग करने की आवश्यकता होगी।

ऐसा करने के लिए, निम्न पंक्ति के साथ अपने इंजन बनाने:

create_engine('mysql+mysqldb://USER:@SERVER:PORT/DB?charset=utf8', encoding='utf-8') 

तुम भी sqlalchemy.engine.url.URL वर्ग का उपयोग कर अपने इंजन यूआरएल निर्माण कर सकते हैं, और create engine समारोह को भेजें। जब आप कॉन्फ़िगरेशन फ़ाइल में अपनी सेटिंग्स रखते हैं तो मुझे यह उपयोगी लगता है।

import sqlalchemy.engine.url as url 

engine_url = url.URL(
    drivername='mysql+' + cfg['MYSQL_PYTHON_DRIVER'], 
    host=cfg['MYSQL_HOST'], 
    port=cfg['MYSQL_PORT'], 
    username=cfg['MYSQL_USER'], 
    password=cfg['MYSQL_PWD'], 
    database=cfg['MYSQL_DB'], 
    query={'charset': 'utf8'} 
) 
db = create_engine(engine_url, encoding='utf-8') 

आशा है कि मदद करता है।

+0

हाँ, यह अब काम किया। बहुत सराहना करते हैं। – jiank

3

अपने स्टैकट्रैस के आधार पर, आप यूनिकोड एन्कोडिंग के साथ MySQL पायथन का उपयोग कर रहे हैं, क्योंकि यह एक एन्कोड कर रहा है। तो आप की संभावना एक comaptible एन्कोडिंग निर्दिष्ट करने की आवश्यकता (ध्यान दें कि यह MySQLdb DBAPI द्वारा इस्तेमाल किया सभी सेटिंग्स है, SQLalhcemy सिर्फ उन्हें के माध्यम से गुजरता):

create_engine('mysql+mysqldb:///mydb?charset=utf8&use_unicode=1') 

http://docs.sqlalchemy.org/en/rel_0_8/dialects/mysql.html#unicode

संबंधित मुद्दे

 संबंधित मुद्दे