25개 이상의 토픽을 선택하실 수 없습니다.
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
import json
|
|
from django.http import JsonResponse
|
|
from django.core import serializers
|
|
from django.utils import timezone
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from MySQLdb import _mysql
|
|
from vislib.models import SourceDataBase
|
|
from common.utils.aes import pc
|
|
# Create your views here.
|
|
|
|
def default_datetime():
|
|
now = timezone.now()
|
|
return now
|
|
|
|
|
|
@csrf_exempt
|
|
def execSql(request):
|
|
try:
|
|
body_unicode = request.body.decode('utf-8')
|
|
body = json.loads(body_unicode)
|
|
sql = body['sql']
|
|
sourceId = body['source_id']
|
|
source = SourceDataBase.objects.get(source_id=sourceId)
|
|
source = serializers.serialize('json', [source])
|
|
source = json.loads(source)[0]['fields']
|
|
host = source['host']
|
|
username = source['username']
|
|
port = source['port']
|
|
password = pc.decrypt(source['password'])
|
|
database = source['database']
|
|
|
|
db=_mysql.connect(
|
|
host=host,
|
|
port=int(port),
|
|
user=username,
|
|
passwd=password,
|
|
db=database,
|
|
charset='utf8'
|
|
)
|
|
db.query(sql)
|
|
data = db.store_result().fetch_row(maxrows=0, how=2)
|
|
db.close()
|
|
json_data = []
|
|
for index in range(len(data)):
|
|
row = data[index]
|
|
json_data.append({})
|
|
for key in row:
|
|
if(key.find('.')>0):
|
|
column = (key.split('.'))[1]
|
|
else:
|
|
column = key
|
|
if isinstance(row[key], bytes):
|
|
json_data[index][column] = row[key].decode('UTF-8', 'ignore')
|
|
else:
|
|
json_data[index][column] = row[key]
|
|
response = {
|
|
'code': 20000,
|
|
'message': 'success',
|
|
'data': json_data
|
|
}
|
|
except Exception as e:
|
|
print(e)
|
|
response = {
|
|
'code': 10000,
|
|
'message': str(e),
|
|
'data': {}
|
|
}
|
|
return JsonResponse(response)
|
|
|