Как указывает @jonrsharpe, вы просто не можете ожидать, что кортеж, поступающий из этого запроса к базе данных, превратится в словарь в выводе JSON. Ваша data
переменная не содержит информацию, необходимую для построения желаемого вами ответа.
Это будет зависеть от вашей базы данных, но я бы порекомендовал найти способ извлечения диктов из вашего запрос к базе данных вместо кортежей, в этом случае остальная часть вашего кода должна работать как есть. Например, для sqlite вы можете определить свой курсор c
следующим образом:
import sqlite3
connection = sqlite3.connect('dbname.db') # database connection details here...
connection.row_factory = sqlite3.Row
c = connection.cursor()
Теперь, если ваша база данных по какой-то причине не может поддерживать курсор словаря, вам нужно свернуть свой собственный словарь после получения результаты запроса к базе данных. Например, что-то вроде этого:
fieldnames = ('abstract', 'category', 'date', 'link')
numfields = len(fieldnames)
data = []
for row in c.fetchall():
for idx in range(0, numfields - 1):
dictrow[fields[idx]] = row[idx]
data.append(dictrow)
Я перебираю список меток полей, которые не обязательно должны соответствовать столбцам вашей базы данных, но do должны быть в том же порядке. и создание dict путем сопряжения метки с датумом из кортежа БД в той же позиции. Этот отрывок заменит одну строку data = c.fetchall()
в OP.