import logging
import sys
from fastapi import FastAPI
from tortoise import Tortoise, run_async
from router import aerich
from starlette.middleware.cors import CORSMiddleware
from tortoise.contrib.fastapi import register_tortoise
app = FastAPI(title="DFS - FastAPI Tortoise ORM CRUD",
description='''
''')
register_tortoise(
app,
db_url="sqlite://db.sqlite3",
modules={"models": ["model"]},
generate_schemas=False,
add_exception_handlers=True,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(aerich)
if __name__ == '__main__':
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
handler.setFormatter(fmt)
logging_db_client = logging.getLogger("tortoise.db_client")
logging_db_client.setLevel(logging.DEBUG)
logging_db_client.addHandler(handler)
logging_db_client.info("11111111111111")
import uvicorn
uvicorn.run("main:app", reload=True, port=5000,log_config=None)
以上写法没有效果
fastapi + tortoise-orm 如何实现对db操作时候,打印出sql语句日志
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
阿里嘎多学长 2025-03-16 11:33关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解决方案
FastAPI 和 Tortoise-ORM 都支持日志记录,可以使用 Python 的 logging 模块来实现。下面是一个简单的示例:
import logging from tortoise import Tortoise # 设置日志级别 logging.basicConfig(level=logging.INFO) # 创建一个日志记录器 logger = logging.getLogger('tortoise') # 使用 Tortoise 的 `set_log_level` 方法设置日志级别 Tortoise.set_log_level(logging.INFO) # 创建一个 FastAPI 应用程序 app = FastAPI() # 使用 Tortoise 的 `run_async` 函数来运行数据库操作 @app.on_event("startup") async def startup_event(): await Tortoise.init(db_url='sqlite:///test.db', modules={'models': ['models']}) await Tortoise.generate_schemas() # 在数据库操作中使用日志记录 @app.get("/users/") async def read_users(): users = await User.all() logger.info(f"SELECT * FROM users") return users # 在 models.py 文件中定义 User 模型 from tortoise import Model, IntField, CharField class User(Model): id = IntField(pk=True) name = CharField(max_length=255) def __str__(self): return self.name在上面的示例中,我们使用
logging模块设置日志级别为INFO,然后使用Tortoise.set_log_level方法设置 Tortoise 的日志级别为INFO。在数据库操作中,我们使用logger.info方法来记录 SQL 语句。在
models.py文件中,我们定义了User模型,并使用__str__方法来定义模型的字符串表示。在
main.py文件中,我们创建了一个 FastAPI 应用程序,并使用Tortoise.init方法来初始化 Tortoise。然后,我们使用Tortoise.generate_schemas方法来生成数据库 schema。在
read_users函数中,我们使用User.all方法来获取所有用户,然后使用logger.info方法来记录 SQL 语句。这样,在数据库操作时,我们可以看到 SQL 语句的日志记录。
解决 无用评论 打赏 举报