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)

区别

flask 使用 SQLAlchemy 的两种方式的更多相关文章

  1. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

  2. flask 操作mysql的两种方式-sql操作

    flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...

  3. flask使用sqlit3的两种方式

    方式一:raw_sql import sqlite3 from flask import Flask, request, jsonify app = Flask(__name__) DATABASE_ ...

  4. Python与数据库 sqlalchemy 建立声明层表对象的两种方式

    在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 1 from sqlalchemy.sql.schema import Table, ...

  5. Python与数据库[2] -> 关系对象映射/ORM[2] -> 建立声明层表对象的两种方式

    建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 from sqlalchemy.sql.schema i ...

  6. Struts2实现ajax的两种方式

    基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...

  7. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  8. 两种方式实现java生成Excel

    Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...

  9. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

随机推荐

  1. Struts2(十一)OGNL标签三与Struts2标签

    一.UI标签 二.简单例子 <h1>添加信息</h1> <!--通过指定theme的属性改变主题 --> <s:form action="" ...

  2. SoapUI接口测试实例(webservice接口)

    接口测试步骤 注:以测试queryHistoryAccepts接口作举例. 1. 用户登录获取SessionKey实体信息 注:由于大部分的接口都需要SessionKey实体的信息,因此测试那些接口都 ...

  3. Android Design Support Library——Snackbar

    Snackbar是一个轻量级控件,它可以很方便的提供消息的提示和动作反馈,类似于Toast.Snackbar包括一段文字信息与一个可选的操作按钮,超时自动隐藏,也可以通过滑动来删除.效果如下所示: S ...

  4. http://runjs.cn/

    http://runjs.cn/ RunJS - 在线编辑.展示.分享.交流你的 JavaScript 代码

  5. 页面间(窗口间)的取值赋值及获取iframe下的window对象

    ①同一个窗口中,获取某个iframe的信息 <body> <iframe id="PAID" name="PA" src="Item ...

  6. C# listview 拖动节点

    /// <summary> /// 当拖动某项时触发 /// </summary> /// <param name="sender"></ ...

  7. luluzero的angularJs学习之路_angularJs示例代码

    最近开始自学 angularJs这个前端MVC框架,感觉在前端实现MVC很酷有木有.哈哈哈... 先说说我对前端MVC的一个基本的理解吧(刚开始学习接触得还比较浅显,理解可能会有些不到位,还请各位大神 ...

  8. nginx命令详解

    nginx的configure命令支持以下参数: --prefix=path    定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录.默认使用 /usr/local/nginx. --s ...

  9. 虚拟机下Ubuntu没有GUI图形界面,解决方法

    先说下快捷键,CLI切换到GUI:Ctrl+Alt+F7: GUI切换到CLI:Ctrl+Alt+F1. 今天折腾虚拟机时,打开Ubuntu后显示的是命令行界面,按快捷键后并没转换到图形界面,而是一直 ...

  10. 免费微信公众号专用h5在线电影票API

    免费h5在线电影票API,通过嵌套返回的h5页面url,实现电影票购买. 接口文档:https://www.juhe.cn/docs/api/id/252,通过此申请APPKEY 接口备注:通过请求返 ...