我正面临一个问题。我需要以表格格式显示db表数据,但是我无法使用python以JSON格式找到数据。我在下面解释我的代码。
gforth-ditc
我收到以下错误。
错误:
def view_book(request):
""" This function is used for disply all the data """
conn = sqlite3.connect("db.sqlite3")
cursor = conn.cursor()
cursor.execute("SELECT * FROM booking_meeting ORDER BY id desc")
all_value = cursor.fetchall()
root = []
json_output=json.dumps(all_value)
print(json_output)
for book in json_output:
root.append(
{'lname': book.location_name,
'roomname': book.room_name,
'seat': book.no_seat,
'project': book.projector,
'video': book.video,
'from_date': book.from_date,
'to_date': book.to_date})
return render(request, 'booking/view_book.html', {'people': root})
在这里,我需要将所有数据附加到JSON格式,以便我能够在表格中显示它。请帮助我。
答案 0 :(得分:1)
为什么在>强制转换为JSON后尝试访问属性? JSON是一个字符串,如果不进行解析,则无法迭代其属性。
如果您不打印它,请不要使用JSON,在处理后将数据渲染为JSON:
def view_book(request):
""" This function is used for disply all the data """
conn = sqlite3.connect("db.sqlite3")
conn.row_factory = sqlite3.Row # needs this to create dictionaries
cursor = conn.cursor()
cursor.execute("SELECT * FROM booking_meeting ORDER BY id desc")
all_value = cursor.fetchall()
root = []
for book in all_value:
book = dict(book) # map it into a dict
root.append(
{'lname': book["location_name"],
'roomname': book["room_name"],
'seat': book["no_seat"],
'project': book["projector"],
'video': book["video"],
'from_date': book["from_date"],
'to_date': book["to_date"]})
return render(request, 'booking/view_book.html', {'people': root})
当然,如果您希望people
保留文字JSON,请在返回之前将其转换为JSON:
return render(request, 'booking/view_book.html', {'people': json.dumps(root)})
答案 1 :(得分:0)
执行all_value = cursor.fetchall()
后,all_value
已经是您的记录的可迭代内容。
然后当您执行json_output=json.dumps(all_value)
时,您将其全部转换为字符串。
因此,for book in json_output:
将遍历字符串。
您可以跳过JSON转换:
def view_book(request):
""" This function is used for disply all the data """
conn = sqlite3.connect("db.sqlite3")
cursor = conn.cursor()
cursor.execute("SELECT * FROM booking_meeting ORDER BY id desc")
all_value = cursor.fetchall()
root = []
for book in all_value:
root.append(
{'lname': book.location_name,
'roomname': book.room_name,
'seat': book.no_seat,
'project': book.projector,
'video': book.video,
'from_date': book.from_date,
'to_date': book.to_date})
return render(request, 'booking/view_book.html', {'people': root})
答案 2 :(得分:0)
问题是,一旦将其转换为JSON对象,它将被python视为字符串。因此,在迭代的过程中,你没有得到“预订”。作为一个对象,而不是一个字符串,这就是你得到这个错误的原因。您可以尝试以下方法:
1)迭代all_value而不是json_output。
2)遍历json.loads(json_output)。我不确定这是否有用。
3)编写原始SQL查询不是一个好习惯,而是使用django ORM。你可能想这样做:
def view_book(request):
""" This function is used for disply all the data """
all_value = BookingMeeting.objects.order_by('-id')
root = []
for book in all_value:
root.append(
{'lname': book.location_name,
'roomname': book.room_name,
'seat': book.no_seat,
'project': book.projector,
'video': book.video,
'from_date': book.from_date,
'to_date': book.to_date})
json_output=json.dumps(root)
return render(request, 'booking/view_book.html', {'people': root})