From df16b3e27dcf857b8dced0106368cd522f1062f6 Mon Sep 17 00:00:00 2001 From: doylejg Date: Wed, 30 Mar 2022 00:11:13 -0700 Subject: [PATCH 1/2] Updated with sqlalchemy 2.0 syntax (using 1.4 with future) --- app.py | 52 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/app.py b/app.py index 4b6ccca..003315f 100644 --- a/app.py +++ b/app.py @@ -1,50 +1,66 @@ +from sqlalchemy import create_engine, select +from sqlalchemy import Column, Integer, String, Boolean +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker from flask import Flask, render_template, request, redirect, url_for -from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # /// = relative path, //// = absolute path app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False -db = SQLAlchemy(app) -class Todo(db.Model): - id = db.Column(db.Integer, primary_key=True) - title = db.Column(db.String(100)) - complete = db.Column(db.Boolean) +engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], connect_args={"check_same_thread": False}) + +Session = sessionmaker(bind = engine, future = True) +Base = declarative_base(bind = engine) + +class Todo(Base): + __tablename__ = 'todo_list' + + id = Column(Integer, primary_key=True) + title = Column(String(100)) + complete = Column(Boolean) + + def __repr__(self): + return f"Todo(id={self.id!r}, title={self.title!r}, complete={self.complete!r})" @app.route("/") def home(): - todo_list = Todo.query.all() - return render_template("base.html", todo_list=todo_list) + with Session() as session: + todo_list = session.execute(select(Todo)).scalars().all() + return render_template("base.html", todo_list=todo_list) @app.route("/add", methods=["POST"]) def add(): title = request.form.get("title") - new_todo = Todo(title=title, complete=False) - db.session.add(new_todo) - db.session.commit() + with Session() as session: + new_todo = Todo(title=title, complete=False) + session.add(new_todo) + session.commit() return redirect(url_for("home")) @app.route("/update/") def update(todo_id): - todo = Todo.query.filter_by(id=todo_id).first() - todo.complete = not todo.complete - db.session.commit() + with Session() as session: + todo = session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + todo.complete = not todo.complete + session.commit() return redirect(url_for("home")) @app.route("/delete/") def delete(todo_id): - todo = Todo.query.filter_by(id=todo_id).first() - db.session.delete(todo) - db.session.commit() + with Session() as session: + todo = session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + session.delete(todo) + session.commit() return redirect(url_for("home")) if __name__ == "__main__": - db.create_all() + Base.metadata.create_all(engine) app.run(debug=True) From 6ecf02a90c043abe9849b295a1c5fb346c2b7a43 Mon Sep 17 00:00:00 2001 From: Jonathan Doyle Date: Wed, 30 Mar 2022 09:04:26 -0700 Subject: [PATCH 2/2] added other two version --- app2.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app3.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 app2.py create mode 100644 app3.py diff --git a/app2.py b/app2.py new file mode 100644 index 0000000..4755b6d --- /dev/null +++ b/app2.py @@ -0,0 +1,66 @@ +from sqlalchemy import create_engine, select, update, delete +from sqlalchemy import Column, Integer, String, Boolean +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +from flask import Flask, render_template, request, redirect, url_for + +app = Flask(__name__) + +# /// = relative path, //// = absolute path +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite' +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + + +engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], connect_args={"check_same_thread": False}) + +Session = sessionmaker(bind = engine, future = True) +Base = declarative_base(bind = engine) + +class Todo(Base): + __tablename__ = 'todo_list' + + id = Column(Integer, primary_key=True) + title = Column(String(100)) + complete = Column(Boolean) + + def __repr__(self): + return f"Todo(id={self.id!r}, title={self.title!r}, complete={self.complete!r})" + + +@app.route("/") +def home(): + with Session() as session: + todo_list = session.execute(select(Todo)).scalars().all() + return render_template("base.html", todo_list=todo_list) + + +@app.route("/add", methods=["POST"]) +def add(): + title = request.form.get("title") + with Session() as session: + new_todo = Todo(title=title, complete=False) + session.add(new_todo) + session.commit() + return redirect(url_for("home")) + + +@app.route("/update/") +def update(todo_id): + with Session() as session: + todo = session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + todo.complete = not todo.complete + session.commit() + return redirect(url_for("home")) + + +@app.route("/delete/") +def delete(todo_id): + with Session() as session: + todo = session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + session.delete(todo) + session.commit() + return redirect(url_for("home")) + +if __name__ == "__main__": + Base.metadata.create_all(engine) + app.run(debug=True) diff --git a/app3.py b/app3.py new file mode 100644 index 0000000..bc296dd --- /dev/null +++ b/app3.py @@ -0,0 +1,63 @@ +from sqlalchemy import create_engine, select, update, delete +from sqlalchemy import Column, Integer, String, Boolean +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker, scoped_session +from flask import Flask, render_template, request, redirect, url_for + +app = Flask(__name__) + +# /// = relative path, //// = absolute path +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite' +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + +engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'], connect_args={"check_same_thread": False}) + +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine, future = True) +app.session = scoped_session(SessionLocal) + +Base = declarative_base(bind = engine) + +class Todo(Base): + __tablename__ = 'todo_list' + + id = Column(Integer, primary_key=True) + title = Column(String(100)) + complete = Column(Boolean) + + def __repr__(self): + return f"Todo(id={self.id!r}, title={self.title!r}, complete={self.complete!r})" + + +@app.route("/") +def home(): + todo_list = app.session.execute(select(Todo)).scalars().all() + return render_template("base.html", todo_list=todo_list) + + +@app.route("/add", methods=["POST"]) +def add(): + title = request.form.get("title") + new_todo = Todo(title=title, complete=False) + app.session.add(new_todo) + app.session.commit() + return redirect(url_for("home")) + + +@app.route("/update/") +def update(todo_id): + todo = app.session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + todo.complete = not todo.complete + app.session.commit() + return redirect(url_for("home")) + + +@app.route("/delete/") +def delete(todo_id): + todo = app.session.execute(select(Todo).filter_by(id=todo_id)).scalar_one() + app.session.delete(todo) + app.session.commit() + return redirect(url_for("home")) + +if __name__ == "__main__": + Base.metadata.create_all(engine) + app.run(debug=True)