플라스크에 datatable을 사용하고 있습니다. 거대한 데이터베이스 때문에 서버 측을 사용하려고했지만 column_1 오류가 발생했습니다. 내 문제를 알아낼 수 없다. 나는 내 컬렉션을 보여줍니다 print self.result_data
때 여기 내 파이썬 코드플라스크를 사용하는 데이터 테이블의 키 오류 column_1
@app.route("/_retrieve_server_data")
def get_server_data():
columns = [ 'column_1', 'column_2', 'column_3', 'column_4']
index_column = "_id"
collection = "AssetMapping"
results = DataTablesServer(request, columns, index_column, collection).output_result()
# return the results as a string for the datatable
print json.dumps(results)
return json.dumps(results)
# translation for sorting between datatables and mongodb
order_dict = {'asc': 1, 'desc': -1}
class DataTablesServer(object):
def __init__(self, request, columns, index, collection):
self.columns = columns
self.index = index
self.collection = collection
# values specified by the datatable for filtering, sorting, paging
self.request_values = request.values
# connection to your mongodb (see pymongo docs). this is defaulted to localhost
self.dbh = MongoClient()
# results from the db
self.result_data = None
# total in the table after filtering
self.cardinality_filtered = 0
# total in the table unfiltered
self.cardinality = 0
self.run_queries()
def output_result(self):
output = {}
output['sEcho'] = str(int(self.request_values['sEcho']))
output['iTotalRecords'] = str(self.cardinality)
output['iTotalDisplayRecords'] = str(self.cardinality_filtered)
aaData_rows = []
for row in self.result_data:
aaData_row = []
for i in range(len(self.columns)):
print self.columns[i]
print aaData_row.append(row[ 'column_1' ].replace('"','\\"'))
aaData_row.append(row[ self.columns[i] ].replace('"','\\"'))
# add additional rows here that are not represented in the database
# aaData_row.append(('''<input id='%s' type='checkbox'></input>''' % (str(row[ self.index ]))).replace('\\', ''))
aaData_rows.append(aaData_row)
output['aaData'] = aaData_rows
return output
def run_queries(self):
# 'mydb' is the actual name of your database
survey = self.dbh.survey
# pages has 'start' and 'length' attributes
pages = self.paging()
# the term you entered into the datatable search
_filter = self.filtering()
# the document field you chose to sort
sorting = self.sorting()
# get result from db to display on the current page
self.result_data = list(survey[self.collection].find(spec = _filter,
skip = pages.start,
limit = pages.length,
sort = sorting))
# length of filtered set
self.cardinality_filtered = len(list(survey[self.collection].find(spec = _filter)))
# length of all results you wish to display in the datatable, unfiltered
self.cardinality = len(list(survey[self.collection].find()))
def filtering(self):
# build your filter spec
_filter = {}
if (self.request_values.has_key('sSearch')) and (self.request_values['sSearch'] != ""):
# the term put into search is logically concatenated with 'or' between all columns
or_filter_on_all_columns = []
for i in range(len(self.columns)):
column_filter = {}
# case insensitive partial string matching pulled from user input
column_filter[self.columns[i]] = {'$regex': self.request_values['sSearch'], '$options': 'i'}
or_filter_on_all_columns.append(column_filter)
_filter['$or'] = or_filter_on_all_columns
# individual column filtering - uncomment if needed
#and_filter_individual_columns = []
#for i in range(len(columns)):
# if (request_values.has_key('sSearch_%d' % i) and request_values['sSearch_%d' % i] != ''):
# individual_column_filter = {}
# individual_column_filter[columns[i]] = {'$regex': request_values['sSearch_%d' % i], '$options': 'i'}
# and_filter_individual_columns.append(individual_column_filter)
#if and_filter_individual_columns:
# _filter['$and'] = and_filter_individual_columns
return _filter
def sorting(self):
order = []
# mongo translation for sorting order
if (self.request_values['iSortCol_0'] != "") and (self.request_values['iSortingCols'] > 0):
for i in range(int(self.request_values['iSortingCols'])):
# column number
column_number = int(self.request_values['iSortCol_'+str(i)])
# sort direction
sort_direction = self.request_values['sSortDir_'+str(i)]
order.append((self.columns[column_number], order_dict[sort_direction]))
return order
def paging(self):
pages = namedtuple('pages', ['start', 'length'])
if (self.request_values['iDisplayStart'] != "") and (self.request_values['iDisplayLength'] != -1):
pages.start = int(self.request_values['iDisplayStart'])
pages.length = int(self.request_values['iDisplayLength'])
return pages
입니다. 값을 추가 할 때 오류가 발생했습니다. 위의 코드를 실행할 때 나는 오류 다음있어 aaData_row.append(row[ self.columns[i] ].replace('"','\\"'))
:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/bhim/remo/surveyApp_bibek/surveyApp.py", line 262, in get_server_data
results = DataTablesServer(request, columns, index_column, collection).output_result()
File "/home/bhim/remo/surveyApp_bibek/surveyApp.py", line 297, in output_result
aaData_row.append(row[ self.columns[i] ].replace('"','\\"'))
KeyError: 'column_1'
'print (row)'의 결과를 게시하십시오. – unutbu
@unutbu 인쇄 행 : {u'assetType ': u'Test', u'end ': datetime.datetime (2014, 4, 7, 6, 19, 31, 88000), u'name': u'AssetMapping ' , u'form : 'u'created_at': datetime.datetime (2014, 4, 7, 6, 22, 45, 672000), u'data_path, u'formetting ', u'picture': u'1396851566956.jpg ' ': u'./ data/assetmapping_/2014-04-07_12-03-45 ','u'whatFamousFor ': u'Trst', u'start ': datetime.datetime (2014, 4, 7, 6, 18, 45, 400000), u'didrict ': u'pokhara', u'deviceid : u'359435051262207 ', u'assetName': u'Rohan ', u'_id': ObjectId ('5342443695c190113b437e56'), u'is_complete ': True, u'gps': u'28.2283292 83.9887244 0.0 34.5 '} –
'KeyError '가 의미가 있습니다. 'row' dict에는'column_1' 키가 없습니다. – unutbu