qq_39196807 2023-05-11 15:20 采纳率: 83%
浏览 15
已结题

Flask SQLALchemy 多个数据库连接如果实现

python flask SQLALchemy连接两个数据库怎么实现

要求,一个单独的文件配置一个数据库配置,共2个配置文件

在其他地方如何使用,执行SQL

  • 写回答

2条回答 默认 最新

  • 瞬间的未来式 2023-05-11 15:29
    关注

    该回答引用chatgpt:有不对的地方可以联系我,我在调整
    可以通过在 Flask 应用中使用 SQLAlchemy 的 bind_key 参数,为每个数据库指定一个名称,然后在模型中使用这个名称指定模型对应的数据库连接。

    以下是一个使用 Flask SQLAlchemy 连接两个数据库的示例:

    首先,创建两个数据库配置文件,例如 config1.py 和 config2.py,分别定义两个数据库连接的相关配置,如下所示:

    config1.py

    SQLALCHEMY_DATABASE_URI = 'database_uri_for_db1'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    
    
    

    config2.py

    SQLALCHEMY_DATABASE_URI = 'database_uri_for_db2'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    
    
    

    接着,在 Flask 应用的初始化中,可以通过加载这两个配置文件来创建两个数据库连接:

    
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config.from_object('config1')
    app.config.from_object('config2')
    
    db1 = SQLAlchemy(app, bind_key='db1')
    db2 = SQLAlchemy(app, bind_key='db2')
    
    

    在上面的代码中,我们使用 bind_key 参数为每个数据库连接指定一个名称,这里分别为 db1 和 db2。

    接下来,在模型中,可以通过设置 bind_key 属性来指定模型对应的数据库连接:

    class User(db1.Model):
        __tablename__ = 'users'
        __bind_key__ = 'db1'
    
        id = db1.Column(db1.Integer, primary_key=True)
        name = db1.Column(db1.String(80))
    
    
    
    class Order(db2.Model):
        __tablename__ = 'orders'
        __bind_key__ = 'db2'
    
        id = db2.Column(db2.Integer, primary_key=True)
        total_price = db2.Column(db2.Float)
    
    
    

    在上面的代码中,User 模型对应的数据库连接为 db1,而 Order 模型对应的数据库连接为 db2。

    最后,可以通过访问相应的数据库连接对象,执行 SQL 语句,例如:

    # 访问 db1 连接对象,执行 SQL 查询
    db1.session.execute('SELECT * FROM users')
    
    # 访问 db2 连接对象,执行 SQL 查询
    db2.session.execute('SELECT * FROM orders')
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 关于路由器的路由协议配置
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫