2016-05-03 3 views
0

人、ユーザ登録時にこのランダムなエラーが発生します。Cherrypy with Mysqlエラー:ユーザーを追加しようとしたときに "タプルのインデックスが整数でなくてはならない"と

これはブラウザから返される情報です。 PyCharmデバッガを使用することにより

{Gender: "M", ReEmail: "[email protected]", Birthday: "1/19/1980", Role: "Athlete",…} 
Birthday: "1/19/1980" 
Country: "United States" 
Email: "[email protected]" 
Gender: "M" 
Password:"doesntwork123" 
ReEmail:"[email protected]" 
RePassword:"doesntwork123" 
Role:"Athlete" 
kwargs:{} 
method:"POST" 
results:{error: "tuple indices must be integers, not str"} 
error: "tuple indices must be integers, not str" 

それは既存の人に到達したら、私はこの特定の部分に

def addUser(self, session, *args, **kwargs): 
    try: 
    #existingPerson = session.query(person_models.Player).filter(person_models.Player.Email==args['Email']).first() 
    print person_models.Player 
    print person_models.Player.Email 
    existingPerson = session.query(person_models.Player).filter(person_models.Player.Email == args['Email']).first() 
    print existingPerson 
    if existingPerson is not None: 
     return {'error':"User already exists"} 
    person_model = getattr(person_models) 
    person = person_model(*args) 
    session.add(person) 
    session.commit() 
    return {"response": "User added"} 
    except Exception as e: 
    return {'error':str(e)} 

を問題に集中している、それは例外に私に直接送信します。これは私に「タプルのインデックスは整数でなくstrでなければならない」というものです。


ここにいくつかの追加コードがあります。ここで

はいくつかのコードです:

restbase.py:

webapi.pyここ15

がコードを使用している別のラインであるライン文句だ

import cherrypy 
from api.restBase import jsonDbRest 
from person.controllers import PersonController 
class PersonAPI: 
exposed = True 

@jsonDbRest 
def GET(self, email=False, **kwargs): 
    session = cherrypy.request.db 
    pc = PersonController() 
    if email in kwargs: 
     profile = pc.get(session, **kwargs) 
     return {"results":[profile], "count":'1'} 
    profile = pc.search(session, **kwargs) 
    return {"results":profile.to_dict(), "count":'1'} 

@jsonDbRest 
def POST(self, *args, **kwargs): 
    session = cherrypy.request.db 
    pc = PersonController() 
    response = pc.addUser(session, *args, **kwargs) 
    return {"results": response} 

import cherrypy 
import json 
from engine import create_session 

def jsonDbRest(func): 
    def wrapper(self, *args, **kwargs): 

    cherrypy.request.db = create_session() 

    if 'Content-Length' in cherrypy.request.headers: 
    length = cherrypy.request.headers['Content-Length'] 
    bodytext = cherrypy.request.body.fp.read(int(length)) 
    else: 
    bodytext = "" 
    if bodytext != "": 
    jsonData = json.loads(bodytext) 
    else: 
    jsonData = None 
    cherrypy.request.json = jsonData 
    func_data = func(self, *args, **kwargs) 
    data = {"method":func.__name__, "input":jsonData,"kwargs":kwargs} 
    if func_data is not None: 
    data.update(func_data) 
    cherrypy.response.headers['Content-Type'] = 'application/json' 
    if "error" in data: 
    cherrypy.response.status = "400" 
    else: 
    cherrypy.response.status = "200" 
    cherrypy.request.db.close() 
    return json.dumps(data, indent=4) 

リターンラッパー私はあなたの問題は最初のサンプルであることを考える

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.ext.declarative import AbstractConcreteBase 
import datetime 
import decimal 
import netaddr 
import sqlalchemy 
from time import strftime 

class Base(object): 
    def to_dict(self): 
    dict = {} 
    dict = self.__dict__ 
    remove = '_sa_instance_state' 
    dict = {key: value for key, value in dict.items() if key is not remove} 
    dict['DateOfBirth'] = dict['DateOfBirth'].strftime('%m/%d/%Yi') 

    return dict 

def from_dict(self, dict): 
    for col in dict: 
    setattr(self, col, dict[col]) 

def to_array(self, columns=[]): 
    if len(columns) < 1: 
    columns = self.__mapper__.columns.keys() 
    data = [] 
    for col in columns: 
    data.append(getattr(self, col)) 
    return data 

def get_columns(self): 
    return self.__mapper__.columns.keys() 

JsonBase = declarative_base(cls=Base) 

答えて

1

別コード:

existingPerson = session.query(person_models.Player).filter(person_models.Player.Email == args['Email']).first() 

kwargs代わりargsのを試してみてください。

existingPerson = session.query(person_models.Player).filter(person_models.Player.Email == kwargs['Email']).first() 
+0

ねえ!あなたの返事をありがとう、私は前にそれをして、あなたが推奨するように実装しました。何が起こるかは、それが直接に例外に行き、エラーを出力することです。私はしばらくの間、エラーをトレースしようとしていますが、原因が何であるか把握できないようです。 kwargsで表示される内容は です。 'Email' – user3561871

+1

チェリーピースに組み込まれているjsonツールについてご存知ですか?組み込みツールと同様の属性「cherrypy.request.json」を設定しているようです。 http://docs.cherrypy.org/en/latest/basics.html?#dealing-with-json – cyraxjoe

関連する問題

 関連する問題