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)
ねえ!あなたの返事をありがとう、私は前にそれをして、あなたが推奨するように実装しました。何が起こるかは、それが直接に例外に行き、エラーを出力することです。私はしばらくの間、エラーをトレースしようとしていますが、原因が何であるか把握できないようです。 kwargsで表示される内容は です。 'Email' – user3561871
チェリーピースに組み込まれているjsonツールについてご存知ですか?組み込みツールと同様の属性「cherrypy.request.json」を設定しているようです。 http://docs.cherrypy.org/en/latest/basics.html?#dealing-with-json – cyraxjoe