Я создаю rest-api, используя комбо Python + Flask_Restful, нахожу это удивительным.
В настоящее время я разрешаю пользователю запускать sql-запрос с помощью браузера, и он работает нормально, но проблема в том, что информация заголовков не отображается в ответе.
Вот код, который я использую:
class RunCustomeSQL(Resource):
def get(self, enter_db_name, query):
if not os.path.isfile(enter_db_name+'.db'):
raise BadRequest("Database Doesn't Exist. Please select a valid database")
conn = sqlite3.connect(enter_db_name+'.db')
search_out = []
cursor = conn.execute(query)
row = None
for row in cursor:
search_out.append(row)
if not row: #This means empty response
raise BadRequest("No Results Found")
conn.commit()
conn.close()
return search_out
Хотя этот код прекрасно работает, он не печатает значения заголовка в ответе json. Текущий ответ:
[
[
"dusiri_bibi",
"11",
"----------",
" srt/None ",
"14.30 MB",
"2017-12-13 23:43:54",
"C:/Test_Software/vc_redist.x64.exe"
],
]
Ожидаемый результат:
[
[
"Machine Name" : "dusiri_bibi",
"LABEL" : "11",
"PERMISSIONS" : "----------",
"USER" : " srt/None ",
"SIZE" : "14.30 MB",
"CREATED" : "2017-12-13 23:43:54",
"FILENAME" : "C:/Test_Software/vc_redist.x64.exe"
],
]
Весь приведенный выше текст, такой как «имя машины, этикетка и т. Д.» мои заголовки таблиц, я не уверен, как распечатать их вместе с выводом.
Что если пользователь запускает select user, size from table_name
только
или
Что делать, если пользователь запускает select * from table_name
В обоих сценариях выходные данные должны отображать заголовки таблицы
Спасибо
ОБНОВЛЕНИЕ № 1 (25 апреля): мне удалось ответить на мой первый вопрос и я смог отобразить правильный ответ json, если пользователь выбрал инструкцию SELECT * в SQL, но все еще сталкивается с проблемой со вторым фрагментом
Вот ответ на первую часть, если кто-то ищет его: Использование Regex
row = None
if re.search(r'(?<=SELECT)(.*)(?=FROM)',query, re.IGNORECASE).group(1) == ' * ':
for row in cursor:
search_out.append({'NAME' : row[0], 'LABEL_NUMBER' : row[1], 'PERM' : row[2], 'USER' : row[3] , 'SIZE' : row[4], 'DATE' : row[5], 'FILENAME' : row[6]})
if not row: #This means empty response
raise BadRequest("No Results Found")
Часть II: неотвеченный запрос:
Для второй части у меня теперь есть два списка:
list_1 : [[u'LABEL_NUMBER', u'PERM', u'FILENAME']]
list_2 : [(u'11', u'----------', u'C:/Test_Software/26.avi'), (u'11', u'----------', u'C:/Test_Software/6.avi'), (u'11', u'-rwx------', u'C:/Test_Software/Debug/Current_Frame1.avi'), (u'10', u'-rwxrwx---', u'C:/Windows/WinSxS/boxed-split.avi')]
Как вы можете видеть, у меня есть два списка, и я хочу объединить их в диктовку, чтобы показать ответ:
[
{
LABEL_NUMBER : '11' ,
PERM : '-----------',
FILENAME : 'C:/Test_Software/26.avi'
},
...
....
......
{
LABEL_NUMBER : '10' ,
PERM : '-rwxrwx---',
FILENAME : 'C:/Windows/WinSxS/boxed-split.avi'
},
]
я использую следующий код, чтобы сделать то же самое:
chunks = [list_2[idx:idx+3] for idx in range(0, len(list_2), 3)]
output = []
for each in chunks:
output.append(dict(zip(list_1, each)))
print(output)
Но это не так с "TypeError: unhashable type: 'list'", я понимаю, что списки изменчивы, и именно поэтому я получаю эту ошибку, но тогда как я могу получить требуемый ответ dict? что я тут не так делаю?