Я построил CRUD API
для работы с database
. Retrieve
(или прочитано) function
для таблицы class
, assessment_results
в настоящее время дает мне проблемы. Справочная информация относительно дизайна: API
также имеет файл удобства, который наследуется от основного файла (object.py) для целей принятия значений string
.Дополнительные позиционные аргументы Повышение ценностиError
Что ему нужно сделать: проверьте наличие ID
и/или проверьте наличие двух аргументов (если идентификатор не используется). Если один или другой (и), если необходимо, извлеките его вместе со своими данными. Следуя docs on Python, я ввел аргумент *
, чтобы разрешить необязательные аргументы позиции. Я также помог от этого великого tutorial. (Я новичок в проектировании и строительстве DBS и используя питон.)
Я считаю, что получить метод работает, но должно быть недостаток в конструкции или метод create_category_rating(...)
, как Traceback
теперь возвращается ValueError
. Я читаю здесь по адресу Stacks (аналогичная проблема), что мне может потребоваться присвоить значение args, но похоже, что я через API.
код следующим образом:
object.py
(метод извлечения и метод create_category_rating):
def retrieve_assessment_results(self, something_unique, *args):
if isinstance(something_unique, int):
return self.session.query(Assessment_Results).\
filter(Assessment_Results.id == something_unique).one()
elif isinstance(something_unique, basestring) and isinstance(args, basestring):
return self.session.query(Assessment_Results).\
filter(Assessment_Results.owner == something_unique).\
filter(Assessment_Results.assessment == args).one()
elif isinstance(something_unique, Assessment_Results) and isinstance(args, Assessment_Results):
return something_unique, args
else:
raise ValueError('Value being passed is an object')
def create_category_rating(self, category_rating_int, category, assessment_results):
new_catrating = Category_Rating(category_rating_int, category, assessment_results)
self.session.add(new_catrating)
print(new_catrating)
self.session.commit()
return(new_catrating)
convenience.py (наследует от object.py)
def create_category_rating(self, category_rating_int, category_name, username, name):
category = self.retrieve_category(category_name)
owner = self.retrieve_user(username)
assessment = self.retrieve_assessment(name)
assessment_results = self.retrieve_assessment_results(owner, assessment)
return super(ConvenienceAPI, self).create_category_rating(category_rating_int, category, assessment_results)
test.py
api = ConvenienceAPI()
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
Текущий выпуск: StatementError Согласно предложил, изменил условными (необходимо распаковать и назначить кортеж, данное * арг).
Новый API:
def retrieve_assessment_results(self, *args):
id, assessment, owner = None, None, None
if len(args) == 1:
id, = args[0]
elif len(args) == 2:
assessment, owner = args
else:
raise ValueError('Value being passed is an object')
if id is not None:
return self.session.query(Assessment_Results).\
filter(Assessment_Results.id == id).one()
elif assessment is not None:
return self.session.query(Assessment_Results).\
filter(Assessment_Results.assessment == assessment).one()
elif owner is not None:
return self.session.query(Assessment_Results).\
filter(Assessment_Results.owner == owner).one()
след вызовов TRACEBACK:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/ack/code/venv/NotssDB/notssdb/test/test.py", line 111, in test1
api.create_category_rating(2, 'Decision-Making', 'baseball', 'Becoming a Leader')
File "/Users/ack/code/venv/NotssDB/notssdb/api/convenience.py", line 41, in create_category_rating
assessment_results = self.retrieve_assessment_results(owner, assessment)
File "/Users/ack/code/venv/NotssDB/notssdb/api/object.py", line 323, in retrieve_assessment_results
filter(Assessment_Results.assessment == assessment).one()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2472, in one
ret = list(self)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2515, in __iter__
return self._execute_and_instances(context)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2530, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute
return meth(self, multiparams, params)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
compiled_sql, distilled_params
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1078, in _execute_context
None, None)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1339, in _handle_dbapi_exception
exc_info
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1073, in _execute_context
context = constructor(dialect, self, conn, *args)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 544, in _init_compiled
grp, m in enumerate(parameters)]
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/compiler.py", line 498, in construct_params
pd[self.bind_names[bindparam]] = bindparam.effective_value
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 1162, in effective_value
return self.callable()
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1386, in _go
value = fn(*arg, **kw)
File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2422, in _get_state_attr_by_column
return state.manager[prop.key].impl.get(state, dict_, passive=passive)
StatementError: (exceptions.KeyError) 'assessment_id' [SQL: u'SELECT assessment_results.id AS assessment_results_id, assessment_results.created_on AS assessment_results_created_on, assessment_results.owner_id AS assessment_results_owner_id, assessment_results.assessment_id AS assessment_results_assessment_id \nFROM assessment_results \nWHERE ? = assessment_results.assessment_id'] [parameters: [immutabledict({})]]
Я не понимаю, почему вы думаете, что это имеет какое-либо отношение к 'args'. Вы сказали, что ваша функция явно выражает эту ошибку, если она не распознает, что такое 'something_unique'. Поскольку это значение, в свою очередь, происходит от 'retrieve_user', вам, по крайней мере, потребуется опубликовать этот метод. –
Нет, трассировка, которую вы опубликовали, ясно показывает, что ошибка происходит внутри 'retrieve_assessment', поэтому я не понимаю, как вы можете сказать, что она работает правильно. Это код, который вы должны размещать, извините. –
Итак ... о чем он жалуется? Вставьте операторы печати вверху retrieve_assessment, чтобы просмотреть переданные аргументы. Аналогично скажите условия if. Это очень ** должно ** показать ошибку. – Prune