python flask SQLALchemy连接两个数据库怎么实现
一个单独的文件配置一个数据库配置,共2个配置文件
在其他地方如何使用,执行SQL
可以通过在 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')
```bash
```
定义两个数据库配置文件,
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user1:password1@host1/db1'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://user2:password2@host2/db2'
在 Flask 初始化文件中加载两个配置,例如:
app = Flask(__name__)
app.config.from_pyfile('config1.py')
app.config.from_pyfile('config2.py')
定义两个 SQLAlchemy 的 Session 对象,并绑定两个配置:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
engine1 = create_engine(app.config['SQLALCHEMY_DATABASE_URI1'], echo=True)
engine2 = create_engine(app.config['SQLALCHEMY_DATABASE_URI2'], echo=True)
db1 = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine1))
db2 = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine2))
执行 SQL 时,指定使用哪个 Session:
# 使用 db1
result = db1.execute('SELECT * FROM table1;')
# 使用 db2
result = db2.execute('SELECT * FROM table2;')
对模型类应用同样的 Session:
from sqlalchemy.ext.declarative import declarative_base
Base1 = declarative_base()
Base2 = declarative_base()
class Table1(Base1):
__tablename__ = 'table1'
# ...
class Table2(Base2):
__tablename__ = 'table2'
# ...
Table1.query = db1.query_property()
Table2.query = db2.query_property()
对两个数据库的表进行查询
Table1.query.all()
Table2.query.filter_by(id=1).first()
望采纳!
如果你真看懂框架里的连接到底是怎么配的,而不是只会用别人写好的代码
那再照猫画虎加一个不就行了