Skip to content

Instantly share code, notes, and snippets.

@kageurufu
Created May 31, 2018 01:14
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kageurufu/2a4677974966c0ca6a196d6889ac05f8 to your computer and use it in GitHub Desktop.
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/
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
DATABASE_URI = 'sqlite:///test.db'
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()
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)
[[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