我有一個連接到 mySQL 資料庫的 Flask Restful 應用程式,我正在使用 SQLAlchemy。我們可以使用以下命令連接到 mySQL 服務器 -
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql pymysql://root:[email protected]:3306"
我正在研究一個用例,其中將通過GET請求實時提供資料庫名稱。根據提供的資料庫名稱,應用程式將連接到相應的資料庫并執行操作。為此,我想有一種方法可以讓 Flask 應用程式與提供的資料庫對話(Flask 應用程式已經連接到 mySQL 服務器)。目前,我正在 API 類中再次創建連接。
API:計算.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:[email protected]: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()
上面的東西對我有用。但我想了解是否有替代方法或更好的方法。
編輯:上面的代碼不起作用。它參考提供的第一個架構名稱,即使我在應用程式的同一運行實體中提供了新架構名稱。
uj5u.com熱心網友回復:
您可以像這樣撰寫 SQLALCHEMY 路徑:
SQLALCHEMY_DATABASE_URI='mysql pymysql://root:password@localhost:3306/database name'
uj5u.com熱心網友回復:
根據檔案,并非所有值都可以更新(第一段),在您的用例中,您應該SQLALCHEMY_BINDS在用例中使用變數,這是一個字典,并為每個模式創建一個模型。例子:
資料庫模型
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
SQLALCHEMY_DATABASE_URI = f"mysql pymysql://root:[email protected]:3306/schema_name1"
SQLALCHEMY_BINDS = {
'db1': SQLALCHEMY_DATABASE_URI, # default
'db2': f"mysql pymysql://root:[email protected]:3306/schema_name2"
}
app = Flask(__name__)
db = SQLALchemy(app)
然后為每個模式創建一個模型
class UserModeldb1(db.Model):
__tablename__ = 'user'
__bind_key__ = 'db1' #this parameter is set according to the database
id = db.Column(db.Integer, primary_key=True)
...
class UserModeldb2(db.Model):
__tablename__ = 'user'
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
...
最后在你的 get 方法中添加一些邏輯來捕獲模式并相應地執行你的模型。你應該看看這個問題真的很有幫助配置 Flask-SQLAlchemy 以在 Flask-Restless 中使用多個資料庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380534.html
標籤:Python mysql 烧瓶 sqlalchemy
