Now that we have several "moving parts", I have made this app fairly simple, with form, model and controller (@route) in app.py. In a real app consider moving the model into its own models.py file (or even have separate models.py files for each part of the application, as demonstrated in flask-blueprints.
Key parts
In app.py:
Import your installed libraries related to database and migrations:
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
Configure your database (set data path etc), and define a variable to use for your database queries (db):
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
Migrate(app, db)
Define your database table (called model, though defined as a Python class and inherits from db.Model). Include an __init__()
method to initialise your objects and and a __repr__()
method to give your bojects a string representation (so you can print them...):
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
# initialise an instance (row) of a table/entity
def __init__(self, email, name):
self.email = email
self.name = name
def __repr__(self):
return '<User %r>' % self.username
At the bottom of your model definitions (if you have more than one), add this line to create the tables:
db.create_all()
You can now create a user in @app.route('/'):
user = User(email=form.email.data,
name = form.name.data)
# To add a row to the User table in the database:
db.session.add(user)
db.session.commit()
And query the database as seen in @app.route('/users'):
users_list = User.query.all()
If you have not installed Python3, please do.
First create and activate some form of environment to store your dependencies. I like Conda:
$ conda create -n myenv python=3.7
$ conda activate myenv
Or just use Pythons built in environments:
$ python3 -m venv venv
$ . venv/bin/activate
Then install Flask, Flask-SQLAlchemy, Flask-Migrate, and also WTForms (because we added a form to update the database).
$ pip install Flask Flask-WTF Flask-SQLAlchemy Flask-Migrate
$ flask run
You should now be able to see the output in your browser window (at http://127.0.0.1:5000)
index.html
users.html