从 mongodb 数据库中获取数据时,Fastapi 显示空列表
Posted
技术标签:
【中文标题】从 mongodb 数据库中获取数据时,Fastapi 显示空列表【英文标题】:Fastapi showing empty list when fetching data from mongodb database 【发布时间】:2021-09-23 09:50:47 【问题描述】:我正在尝试使用 fastapi 获取数据。
我的 database.py 将数据输入到 EventDetails 集合中
import pymongo
import scrap4
from backend.model import EventDetails
client = pymongo.MongoClient('mongodb://127.0.0.1:27017/')
mydb = client['Events'] #database
events = mydb.EventDetails #collection EventDetails
events.insert_many(scrap4.events_list) #data insert
模型.py
from mongoengine import Document,StringField,DateTimeField,URLField
class EventDetails(Document):
url = URLField()
title = StringField()
date = DateTimeField()
link = URLField()
get_api.py
from fastapi import FastAPI
from backend.model import EventDetails
from mongoengine import connect
app = FastAPI()
connect(db="Events",host = "127.0.0.1",port = 27017)
@app.get("/get_all_events")
def get_all_events():
details = EventDetails.objects().to_json()
return "Event_Details" : details
在输出中有一个空列表,尽管 EventDetails 数据库有条目。
"Event_Details":"[]"
【问题讨论】:
【参考方案1】:Mongo 集合区分大小写,默认情况下,MongoEngine 会将您的 Document 类名称蛇形大小写(请参阅doc)
默认情况下,集合的名称是转换为 snake_case 的类的名称(例如,如果您的 Document 类名为 CompanyUser,则相应的集合将是 company_user)。我
在您的情况下,您使用 pymongo 在名为“EventDetails”的集合中插入,但您的 MongoEngine 模型映射到名为“event_details”的集合。所以你基本上不是从同一个集合中插入和读取。
见下文:
from mongoengine import *
connect(db="Events",host = "127.0.0.1",port = 27017)
class EventDetails(Document):
url = URLField()
title = StringField()
date = DateTimeField()
link = URLField()
coll = EventDetails._get_collection()
print(coll.name) # prints "event_details"
你有两个选择:
修复您的 pymongo 插入,使其指向集合“event_details” 强制使用 MongoEngine 文档集合的名称(通过 meta = 'collection': 'EventDetails')【讨论】:
以上是关于从 mongodb 数据库中获取数据时,Fastapi 显示空列表的主要内容,如果未能解决你的问题,请参考以下文章
使用 node.js 从 Mongodb 获取数据时,浏览器会一直加载
从mongodb获取数据时如何使用momentjs格式化时间