在使用Flask或FastAPI创建web应用程序时,会有一个基本上实例化并运行所有内容的main.py文件。我认为这也是数据库连接和初始化的正确位置。因此,理想情况下,我希望有一个单独的model.py文件,基本上只有对象文档映射定义,没有其他内容
在乌蒙戈有可能做这样的事情吗
我的意思是我们需要在每个对象文档映射类上面调用@instance.register
。但是如果它在一个单独的文件中,并且数据库没有在那里初始化,那么在该文件中就没有实例。实例将在main.py文件中声明
例如,当您使用Tortoise时,它允许您将整个model.py文件作为模块传递,并使用FastAPI注册它,如下所示-
register_tortoise(
app,
db_url=os.environ.get("DATABASE_URL"),
modules={"models": ["models.model"]}, #model -> model.py which has all the class definitions
generate_schemas=True
)
对于演示,您可以将以下内容作为model.py
文件内容-
from umongo import Document
from umongo.fields import StringField, URLField, DateTimeField
from datetime import datetime
class WebData(Document):
url = URLField()
summary = StringField()
created_at = DateTimeField(missing=datetime.now)
def __str__(self):
return self.url
以及以下使用FastAPI的main.py文件-
from fastapi import FastAPI
from pymongo import MongoClient
from umongo import Instance
#db = MongoClient().test
#instance = Instance(db)
app = FastAPI()
@app.get('/ping')
async def pong():
return {'ping': 'pong'}
if __name__ == "__main__":
import uvicorn
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
您可以在导入时实例化该实例,但在app init时将DB连接传递给它
普通的.py
model.py
init.py
(注意:在umongo 3 beta中,
instance.init
被重命名为instance.set_db
。)相关问题 更多 >
编程相关推荐