Attualmente, questo è qualcosa che non è ben supportato, ma non impossibile da fare. Vedere this issue nell'elenco dei problemi Flask-SQLAlchemy, che ammette che l'attuale implementazione dell'estensione rende questa situazione più mal di testa di quanto pensino dovrebbe. Speriamo che questo sia meglio supportato in futuro (una volta stabilito un solido percorso di migrazione e una nuova API).
Tale questione ha pronunciato la seguente codice di esempio:
from flask import Flask
from models import Base, User # Your non-Flask-SQLAlchemy models...
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
@app.before_first_request
def setup():
# Recreate database each time for demo
Base.metadata.drop_all(bind=db.engine)
Base.metadata.create_all(bind=db.engine)
db.session.add(User('Bob Jones', '[email protected]'))
db.session.add(User('Joe Quimby', '[email protected]'))
db.session.commit()
@app.route('/')
def root():
users = db.session.query(User).all()
return u"<br>".join([u"{0}: {1}".format(user.name, user.email) for user in users])
if __name__ == '__main__':
app.run('127.0.0.1', 5000)
Ci sono alcune cose da notare qui:
In primo luogo, si perde la capacità di fare User.query
(perché l'utente è stato creato utilizzando la propria dichiarativa base), insieme a tutte le altre cose fornite da Flask-SQLAlchemy db.Model (ad esempio la possibilità di generare automaticamente i nomi e i metodi della tabella come first_or_404()
).
In secondo luogo, ogni volta che è necessario eseguire operazioni che coinvolgono i metadati (ad esempio drop_all o create_all), non è possibile utilizzare i metodi Flask-SQLAlchemy. È necessario utilizzare i metadati originali, associati al motore Flask-SQLAlchemy.
Non l'ho provato da solo, quindi non sono sicuro che ci siano altri trucchi per questo approccio. Potresti voler partecipare a quel biglietto se ne trovi uno.
fonte
2013-10-01 16:13:29
sarebbe un problema riscrivere gli script della riga di comando utilizzando il modello flask-sqlalchemy? –
Non so - non ho usato la fiaschetta prima, o l'alchimia delle fiasche e non conosco gli effetti collaterali. Gli script devono essere riscritti o solo il modello che viene importato? Avrei anche dovuto dire che ho usato l'alambicco per tenere traccia delle modifiche al database, nel caso in cui ci siano problemi di compatibilità lì. –