私はAjaxを使用してクライアントからサーバーへのリクエストを作成しています。私はDJangoを使用していますが、Raw SQLクエリを使用しています。 、varcharとDecimal、最後の1つはエンコンディングの問題がありましたが、私はJsonの "default"プロパティをオーバーライドし、すべてが機能しました。Djangoのraw sql to django、DatetimeとDecimal MySqlの列
これまでは、DecimalとDateTimeのフィールドを与えるクエリがありましたが、両方ともエンコーディングエラーが発生しました。オーバーライドされた「デフォルト」は今は機能しません。なぜなら、この新しいものではDjangoJSONEncoder
今では別の問題があり、エンコードされていないのですがdictfetchall(cursor)
メソッドを使用してDjangoのドキュメントに照会して、cursor.fetchall()
からこのエラー:'tuple' object has no attribute '_meta'
が得られます。
私はちょうどjson.dumps(response_data,default=default)
に辞書とすべてが大丈夫だったが、今の符号化のために、私は以下を使用する必要があることsendedでは前:json.dumps(response_data,cls=DjangoJSONEncoder)
と私はそのように辞書を送信する場合、私はこのエラーを取得する:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
そして、私はこのようなシリアライザ、使用しようとします
response_data2= serializers.serialize('json', list(response_data))
以降dumps
にresponse_data2
を送信し、私はこのエラーを取得する:
'dict' object has no attribute '_meta'
これは、MySQLのクエリのコードです:
def consulta_sql_personalizada(nombres,apellidos,puesto):
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("""select E.idEmpleado as id,CONCAT(Per.nombres_persona,' ',Per.apellidos_persona) as nombre,P.nombre_puesto as puesto,E.motivo_baja_empleado as motivo_baja,E.fecha_contratacion_empleado AS fecha_contratacion,E.fecha_baja_empleado as fecha_baja, SUM(V.total_venta) AS ventas_mes,E.fotografia_empleado as ruta_fotografia from Empleado as E
inner join Puesto as P on E.Puesto_idPuesto=P.idPuesto
inner join Venta as V on V.vendedor_venta=E.idEmpleado
inner join Persona as Per on E.Persona_idPersona=Per.idPersona
where (Per.nombres_persona like %s OR Per.apellidos_persona like %s OR E.Puesto_idPuesto=%s)
AND E.estado_empleado=1 AND V.estado_venta=1
AND
(YEAR(V.fecha_venta) = YEAR(Now())
AND MONTH(V.fecha_venta) = MONTH(Now()))""",[nombres,apellidos,puesto])
row = dictfetchall(cursor)
return row
そして、これは、クエリを作成し、JSONを使ってAJAXに送信し、ビューの最後の部分である:
response_data=consulta_sql_personalizada(rec_nombres,rec_apellidos,rec_puesto)
return HttpResponse(
json.dumps(response_data,cls=DjangoJSONEncoder),
content_type="application/json"
)
else:
return HttpResponse(
json.dumps({"nothing to see": "this isn't happening"}),
content_type="application/json"
)
私が知りたがっているのは、どのようにして、jsonの生のSQL結果をそのエンコンディングを使って解析できるのですか?