flask使用sqlit3的两种方式
方式一:raw_sql
import sqlite3
from flask import Flask, request, jsonify
app = Flask(__name__)
DATABASE_URI = ":memory:"
# 创建表格、插入数据
@app.before_first_request
def create_db():
    # 连接
    conn = sqlite3.connect(DATABASE_URI)
    c = conn.cursor()
    # 创建表
    c.execute('''DROP TABLE IF EXISTS user''')
    c.execute('''CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)''')
    # 数据
    # 格式:用户名,邮箱
    purchases = [('admin', 'admin@example.com'),
                 ('guest1', 'guest1@example.com'),
                 ('guest2', 'guest2@example.com'),
                 ('guest3', 'guest3@example.com'),
                 ('guest4', 'guest4@example.com')]
    # 插入数据
    c.executemany('INSERT INTO user(name, email) VALUES (?,?)', purchases)
    # 提交!!!
    conn.commit()
    # 关闭
    conn.close()
def get_db():
    db = sqlite3.connect(DATABASE_URI)
    db.row_factory = sqlite3.Row
    return db
def query_db(query, args=(), one=False):
    db = get_db()
    cur = db.execute(query, args)
    db.commit()
    rv = cur.fetchall()
    db.close()
    return (rv[0] if rv else None) if one else rv
@app.route("/user")
def users():
    res = query_db("SELECT * FROM user WHERE id <= ?", args=(6,))
    return "<br>".join(["{0}: {1}".format(user[1], user[2]) for user in res])
@app.route("/user/<int:id>")
def user(name):
    res = query_db("SELECT * FROM user WHERE id=?", args=(id,)) #不妨设定:第一次只返回6个数据
    return jsonify(id = res[1],
                   name = res[2],
                   email = res[3]) # 返回json格式
if __name__ == "__main__":
    app.run(debug=True)
方式二:orm(既flask-SQLAlchemy)
# flask_sqlalchemy.py
from flask import Flask
from flask_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 create_db():
    # Recreate database each time for demo
    #db.drop_all()
    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)
flask使用sqlit3的两种方式的更多相关文章
- flask 操作mysql的两种方式-sqlalchemy操作
		flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ... 
- flask 操作mysql的两种方式-sql操作
		flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ... 
- flask 使用 SQLAlchemy 的两种方式
		1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.py from flask import Flask from flask.ext.sqlalchem ... 
- Struts2实现ajax的两种方式
		基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ... 
- CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
		CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ... 
- 两种方式实现java生成Excel
		Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ... 
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
		Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ... 
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
		在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ... 
- (转)SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
		最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ... 
随机推荐
- Jenkins自动化打包配置
			具体流程不细讲,教程很多 * 环境配置: * xmapp安装 * Jenkins.war丢到Tomcat目录中,配置Jenkins * 宿主机安装jdk,gradle,配置环境变量(在Jenkins的 ... 
- 转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系
			引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ... 
- python Pipe 双管道通信
			管道:是python多进程中一种交换数据的方式 from multiprocessing import Process,current_process,Queue,Pipe import time i ... 
- JRebel for Hybris ,Idea and Windows
			参考: Jrebel官网参考地址:https://manuals.zeroturnaround.com/jrebel/standalone/hybris.html Wiki Hybris参考地址:ht ... 
- 记录一次nginx配置vhost的小bug
			话说这篇博客是在是为了保持自己记录生活的习惯而写的,没有什么阅读的价值,各位读者可以直接忽略了.今天在配置一个域名的时候,写了new_example.com(举例而已) 因为是内测,所以并未想象到深层 ... 
- 用户不再sudoers文件中
			1.修改/etc/sudoers文件权限 # chmod 777 /etc/sudoers 2.编辑/etc/sudoers文件,添加要提升权限的用户: 在文件中找到root ALL=(ALL) AL ... 
- phpstudy绑定项目(dist文件)域名--陈远波
			该篇博客是针对已经打包好的dist文件用phpstudy工具进行域名绑定,dist文件生成在这笔者不进行描述,绑定步骤如下: 一:官网下载phpstudy软件进行安装:http://phpstudy. ... 
- 将jar包添加到maven仓库
			Maven资源库配置 访问http://mvnrepository.com/,在搜索栏中输入你要搜索的 JAR 包的关键字 例如下载ImpalaJDBC41这个jar包 选择你想要下载的Jar包版 ... 
- IIS  注册Asp.net 4.0
			32位的Windows:---------------------------------------------------------------------------1. 运行->cmd ... 
- ubuntu16.04忘记密码解决方案
			主要解决通过sudo apt-get install安装mysql时输入密码时输错导致安装成功后,无法登陆MySQL. 之前遇到这种问题时,我个人比较喜欢通过卸载并重新安装解决,后来觉得这个虽然可以解 ... 
