首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FastAPI 学习之路(五十二)根据环境不同连接不同数据库

FastAPI 学习之路(五十二)根据环境不同连接不同数据库

作者头像
雷子
发布2021-10-12 16:34:57
发布2021-10-12 16:34:57
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

前言

我们之前分享FastAPI 学习之路(五十一)WebSockets(八)接受/发送json格式消息,这次我们分享如何根据项目选择不一样的数据库呢

正文

在实际的开发过程中,我们数据库,可以根据连接的环境不一样,我们会拆分成不一样的数据库,根据我们所要用的环境来选择对应的数据库即可,那么我们应该如何去实现根据选择去选择不一样的数据库呢。

首先,我们找一个配置的文件,我们这里演示 我们使用config.py去配置环境。配置如下

代码语言:javascript
代码运行次数:0
运行
复制
EVENT="test"

接下来,我们去创建一个测试用的数据库配置,起名:testDatabse.py

代码语言:javascript
代码运行次数:0
运行
复制
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test1.db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base =   declarative_base()

然后我们修改models.py。如下

代码语言:javascript
代码运行次数:0
运行
复制
from  config import EVENT
if EVENT=="test":
    from models.testDatabase import Base,engine

else:
    from  models.database import Base,engine
 ....数据库设计
 Base.metadata.create_all(bind=engine)

接下来我们去根据不同环境去连接不一样的数据库即可。

代码语言:javascript
代码运行次数:0
运行
复制
from models.database import *
from models.testDatabase import TestingSessionLocal
from config import EVENT
def get_test_db():
    db=TestingSessionLocal()
    try:
        yield db
    finally:
        db.close()

def get_db_pro():
    """
    每一个请求处理完毕后会关闭当前连接,不同的请求使用不同的连接
    :return:
    """
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
if EVENT =="test":
    get_db=get_test_db
else:
    get_db=get_db_pro

最后在连接数据库的地方,我们把get_db替换成从

代码语言:javascript
代码运行次数:0
运行
复制
from get_db import get_db

因为我们去创建了不一样的数据库,根据不一样的环境去连接的。我们写一个测试方法,去测试下

代码语言:javascript
代码运行次数:0
运行
复制
def test_create_user():
    client = TestClient(app)
    response = client.post(
        "/user/users/",
        json={"email": "test@example.com", "password": "leizi"},
    )
    assert response.status_code == 200
if __name__ == "__main__":
    test_create_user()

我们去执行下看下,

我们可以看到,执行完毕后数据落在了我们配置的测试环境的测试数据看中。

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

如果你有问题可以留言或者加我微信:952943386。

2021,一起牛转钱坤,一起牛逼。

如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档