【发布时间】:2022-01-14 00:05:03
【问题描述】:
我有一个烧瓶 restful 应用程序连接到 mySQL 数据库,我正在使用 SQLAlchemy。我们可以使用以下命令连接到 mySQL 服务器 -
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://root:password@127.0.0.1:3306"
我正在研究一个用例,其中将通过GET 请求实时提供数据库名称。根据提供的数据库名称,应用程序将连接到相应的数据库并执行操作。为此,我想有一种方法可以告诉烧瓶应用程序与提供的数据库对话(烧瓶应用程序已经连接到 mySQL 服务器)。目前,我正在 API 类中再次创建连接。
API:Calculate.py
from flask_restful import Resource, reqparse
from app import app
class Calculate(Resource):
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('schema', type=str, required=True, help='Provide schema name.')
args = parser.parse_args()
session['schema_name'] = args.get('schema')
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://root:password@127.0.0.1:3306/{session['schema_name']}"
from db_models.User import User
...
数据库模型:User.py
from flask import session
from flask_sqlalchemy import SQLAlchemy
from app import app
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
__table_args__ = {"schema": session['schema_name']}
User_ID = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50))
db.create_all()
上面的东西对我有用。但我想了解是否有替代方法或更好的方法。
编辑:上面的代码不起作用。即使我在应用程序的同一个运行实例中提供了新的架构名称,它也会引用提供的第一个架构名称。
【问题讨论】:
-
关于一个小问题,你调试过这段代码吗?也许正在发生的事情是您的会话字典没有被更新。另外我在Calculate
from flask import session上看不到这条线 -
所以我在这里错过了那部分,因为我只复制粘贴了程序的一部分。是的,字典没有更新。无论第一次提供什么连接,它都会继续指向该连接。
app.config['SQLALCHEMY_DATABASE_URI'] = f"...."这行好像没有效果。 -
这个问题你解决了吗?
-
@Carlos 不。我使用了其他一些方法,但无法达到本文中所期望的目标。刚刚看到您的解决方案,似乎很有趣。我会尽快检查并更新您。谢谢。
标签: python mysql flask sqlalchemy