Created
May 31, 2018 01:14
-
-
Save kageurufu/2a4677974966c0ca6a196d6889ac05f8 to your computer and use it in GitHub Desktop.
Example of flask with sqlalchemy without flask_sqlalchemy for https://www.reddit.com/r/flask/comments/8n65hy/flasksqlalchemy_without_using_flask_sqlalchemy/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask, request | |
from .database import session, init_db, teardown_session | |
from .models import User | |
app = Flask(__name__) | |
app.config.from_pyfile('config.py') | |
init_db(app) | |
@app.route('/') | |
def dashboard(): | |
return ', '.join(user.email for user in User.query) | |
@app.route('/user/create', methods=['POST']) | |
def user_create(): | |
if 'email' not in request.json: | |
return "'email' is required", 422 | |
email = request.json['email'] | |
user = User.query.filter(User.email.ilike(email.strip())).first() | |
if user: | |
return f"User with email '{email}' already exists", 409 | |
user = User(email=email.strip()) | |
session.add(user) | |
session.commit() | |
return user.email, 201 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DATABASE_URI = 'sqlite:///test.db' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import current_app | |
from sqlalchemy import create_engine | |
from sqlalchemy.orm import scoped_session, sessionmaker | |
from sqlalchemy.ext.declarative import declarative_base | |
Session = sessionmaker(autocommit=False, | |
autoflush=False) | |
session = scoped_session(Session) | |
Base = declarative_base() | |
Base.query = session.query_property() | |
from . import models | |
def init_db(app=current_app): | |
engine = create_engine(app.config['DATABASE_URI'], convert_unicode=True) | |
Session.configure(bind=engine) | |
Base.metadata.create_all(bind=engine) | |
app.teardown_request(teardown_session) | |
def teardown_session(exception=None): | |
session.remove() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from sqlalchemy import Column, Integer, String | |
from .database import Base | |
class User(Base): | |
__tablename__ = 'user' | |
id = Column(Integer, autoincrement=True, primary_key=True) | |
email = Column(String(255), unique=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[source]] | |
url = "https://pypi.python.org/simple" | |
verify_ssl = true | |
name = "pypi" | |
[packages] | |
flask = "*" | |
sqlalchemy = "*" | |
[dev-packages] | |
[requires] | |
python_version = "3.6" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment