I want to read the contents of the SQL script that is uploaded through a Submission form in Django and the content of the file which is a SQL query needs to be SQL linted and encoded in Base64 before saving it as a text in the DB, but unfortunately I'm getting the " raw_line in raw_str.splitlines():
AttributeError: 'SQLQuery' object has no attribute 'splitlines' " error.
Below is the code I wrote to perform the task.
views.py
@login_required(login_url='../login/')
def dashboard_view(request):
if request.method == 'POST':
form = DashboardSqlUploadForm(request.POST, request.FILES)
if form.is_valid():
uploaded_file = request.FILES['upload_sql_script_file']
str_text = ''
for line in uploaded_file:
str_text += line.decode()
content = str_text
print(content)
sql_query = sqlvalidator.parse(content)
if not sql_query.is_valid():
print(sql_query.errors)
messages.error(request, f'Error uploading your SQL script file. Please check your SQL script file and try again')
return redirect('../dashboard')
else:
#escaped_sql_query = re.escape(sql_query)
sql_query_linted = sqlfluff.fix(sql_query, dialect="mariadb")
sql_query_linted_str_bytes = sql_query_linted.encode('ascii')
base64_bytes = base64.b64encode(sql_query_linted_str_bytes)
sql_query_base64_text = base64_bytes.decode('ascii')
sql_query_base64_text.save()
messages.success(request, f'Your SQL script has been uploaded')
return redirect('../dashboard')
form = DashboardSqlUploadForm()
return render(request, 'members/dashboard.html', {'form': form})