2016-12-22 2 views
1

Ich bin ein Projekt mit Flask und Flask-SQLAlchemy codieren, und in diesem Projekt muss ich auf unbekannte Datenbanken zugreifen und in diesen Datenbanken Abfragen mit db.engine.execute(<SQL>) ausführen.Führen Sie SQL in mehreren verschiedenen Datenbanken mit Flask-SQLAlchemy

Aber wie kann ich angeben, welche Datenbank die Abfrage erhalten wird?

Beispiel:

app = Flask(__name__, static_url_path="") 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:******@127.0.0.1:3306/api' 
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True 

app.config['SQLALCHEMY_BINDS'] = { 
    'db1':  'mysqldb://localhost/users', 
    'db2':  'sqlite:////path/to/appmeta.db' 
} 
api = Api(app) 
auth = HTTPBasicAuth() 
db = SQLAlchemy() 
db.init_app(app) 
@app.before_first_request 
def create_database(): 
    db.drop_all() 
    db.create_all() 


@app.route('/test') 
def test(): 
    result = db.engine.execute("show tables;") 
    names = [] 
    for row in result: 
     names.append(row[0]) 
    return str(names) 

Wie kann ich show tables; im DB1 laufen? Und in db2?

Antwort

1

können Sie die get_engine() Methode in Flask-SQLAlchemy verwenden:

engine_db1 = db.get_engine(app, 'db1') 
engine_db2 = db.get_engine(app, 'db2') 

sql = text("SHOW TABLES") 
results_db1 = engine_db1.execute(sql) 
results_db2 = engine_db2.execute(sql) 
Verwandte Themen