• flask 使用 SQLAlchemy 的两种方式


    1. 使用 flask-SQLAlchemy 扩展

    # flask-ext-sqlalchemy.py
    
    from flask import Flask
    from flask.ext.sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    db = SQLAlchemy(app)
    
    
    # 定义ORM
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(80), unique=True)
        email = db.Column(db.String(120), unique=True)
    
        def __init__(self, name, email):
            self.name = name
            self.email = email
    
        def __repr__(self):
            return '<User %r>' % self.name
            
    
    # 创建表格、插入数据
    @app.before_first_request
    def setup():
        # Recreate database each time for demo
        db.create_all()
        
        admin = User('admin', 'admin@example.com')
        db.session.add(admin)
    
        guestes = [User('guest1', 'guest1@example.com'),
                   User('guest2', 'guest2@example.com'),
                   User('guest3', 'guest3@example.com'),
                   User('guest4', 'guest4@example.com')]
        db.session.add_all(guestes)
        db.session.commit()
        
        
    # 查询
    @app.route('/user')
    def users():
        users = User.query.all()
        return "<br>".join(["{0}: {1}".format(user.name, user.email) for user in users])
        
    # 查询
    @app.route('/user/<int:id>')
    def user(id):
        user = User.query.filter_by(id=id).one()
        return "{0}: {1}".format(user.name, user.email)
        
    # 运行
    if __name__ == '__main__':
        app.run('127.0.0.1', 5000) 

    2. 使用原生 SQLAlchemy

    # flask-pure-sqlalchemy.py
    
    from flask import Flask
    from sqlalchemy import Column, Integer, String
    from sqlalchemy import create_engine
    from sqlalchemy.orm import Session
    from sqlalchemy.ext.declarative import declarative_base
    
    app =  Flask(__name__)
    
    Base = declarative_base()
    # 定义ORM
    class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50), unique=True) email = Column(String(120), unique=True) def __init__(self, name=None, email=None): self.name = name self.email = email def __repr__(self): return '<User %r>' % (self.name) # 创建表格、插入数据 @app.before_first_request def setup(): # Recreate database each time for demo engine = create_engine('sqlite://', echo=True) global session session = Session(engine) Base.metadata.drop_all(bind=engine) Base.metadata.create_all(bind=engine) admin = User('admin', 'admin@example.com') session.add(admin) guestes = [User('guest1', 'guest1@example.com'), User('guest2', 'guest2@example.com'), User('guest3', 'guest3@example.com'), User('guest4', 'guest4@example.com')] session.add_all(guestes) session.commit() # 查询 @app.route('/user') def users(): users = session.query(User).all() return "<br>".join(["{0}: {1}".format(user.name, user.email) for user in users]) @app.route('/user/<int:id>') def user(id): user = session.query(User).filter(User.id == id).one() return "{0}: {1}".format(user.name, user.email) if __name__ == '__main__': app.run('127.0.0.1', 5000)

    区别

  • 相关阅读:
    Inter IPP & Opencv + codeblocks 在centos 环境下的配置
    Inter IPP 绘图 ippi/ipps
    Inter IPP+ VS + opencv 在 Windows下的环境搭建
    15省赛题回顾
    Blocks(POJ 3734 矩阵快速幂)
    Tr A(HDU 1575 快速矩阵幂模板)
    本原串(HDU 2197 快速幂)
    Python正则表达式指南
    ACboy needs your help(HDU 1712 分组背包入门)
    滑雪(POJ 1088 记忆化搜索)
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5529538.html
Copyright © 2020-2023  润新知