将对象保存到数据库Django SQLITE3时出现堆栈跟踪异常



我很难解决这个问题,如果你知道这一点,请帮忙。我有一个关于django的项目,它包含两个字段的模型,一个是外键类型,另一个是jsonfield。在数据库中保存对象时,它不会被保存,而是抛出异常。我不知道问题出在哪里,但这个问题只针对sqlite3数据库。它与其他数据库配合良好。我正在粘贴堆栈跟踪和代码。它在这行引发异常student_record_obj.save((

堆栈跟踪:

Internal Server Error: /tableapp/postdata/
Traceback (most recent call last):
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:Python35libsite-packagesdjangodbbackendssqlite3base.py", line 303, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 100, in execute
return super().execute(sql, params)
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:Python35libsite-packagesdjangodbutils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "C:Python35libsite-packagesdjangodbbackendssqlite3base.py", line 303, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.InterfaceError: Error binding parameter 1 - probably unsupported type.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:Python35libsite-packagesdjangocorehandlersexception.py", line 35, in inner
response = get_response(request)
File "C:Python35libsite-packagesdjangocorehandlersbase.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:Python35libsite-packagesdjangocorehandlersbase.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Python35libsite-packagesdjangocontribauthdecorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:UsersJdidiDocumentsFreshcalendardjangoapptableappviews.py", line 89, in posting_data
student_record_obj.save()
File "C:Python35libsite-packagesdjangodbmodelsbase.py", line 729, in save
force_update=force_update, update_fields=update_fields)
File "C:Python35libsite-packagesdjangodbmodelsbase.py", line 759, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:Python35libsite-packagesdjangodbmodelsbase.py", line 842, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:Python35libsite-packagesdjangodbmodelsbase.py", line 880, in _do_insert
using=using, raw=raw)
File "C:Python35libsite-packagesdjangodbmodelsmanager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:Python35libsite-packagesdjangodbmodelsquery.py", line 1125, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "C:Python35libsite-packagesdjangodbmodelssqlcompiler.py", line 1280, in execute_sql
cursor.execute(sql, params)
File "C:Python35libsite-packagesdjangodbbackendsutils.py", line 104, in execute
sql = self.db.ops.last_executed_query(self.cursor, sql, params)
File "C:Python35libsite-packagesdjangodbbackendssqlite3operations.py", line 136, in last_executed_query
params = self._quote_params_for_last_executed_query(params)
File "C:Python35libsite-packagesdjangodbbackendssqlite3operations.py", line 125, in _quote_params_for_last_executed_query
return cursor.execute(sql, params).fetchone()
sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
[10/Jul/2018 23:01:32] "POST /tableapp/postdata/ HTTP/1.1" 500 18778

VIEWS.PY:

def posting_data(request):
if request.method == "POST":
response_ls = json.loads(request.POST.get('data', []))
final_ls = []
for dic in response_ls:
if dic and "csrfmiddlewaretoken" not in dic:
final_ls.append(dic)
try:
student_record_obj = StudentRecords.objects.get(user=request.user)
student_record_obj.data = final_ls
except StudentRecords.DoesNotExist:
attrs = {'user':request.user , 'data': final_ls}
student_record_obj = StudentRecords(**attrs)
student_record_obj.save()
return redirect('/tableapp/index')

根据上面的代码,final_ls变量是一个不能插入数据库的列表。将其设为json字符串,然后保存:

import json
.
.
final_ls = json.dumps(context)
attrs = {'user':request.user , 'data': final_ls}
student_record_obj = StudentRecords(**attrs)

希望这能有所帮助。

最新更新