方式一: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的两种方式的更多相关文章

  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 使用 SQLAlchemy 的两种方式

    1. 使用 flask-SQLAlchemy 扩展 # flask-ext-sqlalchemy.py from flask import Flask from flask.ext.sqlalchem ...

  4. Struts2实现ajax的两种方式

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

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

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

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

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

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

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

  8. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  9. (转)SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步

    最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...

随机推荐

  1. Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. 【Python】TypeError: a bytes-like object is required, not 'str'解决

    对所使用的字符串类型调用encode()方法进行转换即可

  3. 记一款bug管理系统(bugdone.cn)的开发过程(4) - 新增BugTalk功能

    测试人员提出一个Bug,如果开发人员对Bug有疑义,会直接面对面讨论或者通过QQ等线上聊天工具讨论,但过后再去找讨论记录会很麻烦.因此BugDone提出一个全新的概念:将问题的讨论留在问题内.BugD ...

  4. 【SPL标准库专题(8)】 Datastructures:SplFixedArray

    SplFixedArray主要是处理数组相关的主要功能,与普通php array不同的是,它是固定长度的,且以数字为键名的数组,优势就是比普通的数组处理更快. 类摘要 SplFixedArray im ...

  5. python 之@staticmethod和@classmethod

    在python中,要调用一个类中的方法,一般的操作步骤如下: 1.实例化此类 2.调用此类中的方法 而@staticmethod和@classmethod则打破了这种引用方式,可以在不实例化类的情况下 ...

  6. Jboss7或者wildfly部署war包的问题

    如果在Jboss7或者wildfly中部署war包是遇到类似如下错误: "{"JBAS014671: Failed services" => {"jbos ...

  7. Dictionary CovertTo List

    示例代码 假设有如下一个Dictionary 要转换成List Dictionary<string, string> dicNumber = new Dictionary<strin ...

  8. 看代码网备份|利用WebClient|eKing.CmdDownLoadDbBakOper|实现定时拷贝数据库备份文件到文件服务器

    摘要: 1.有两台服务器 (1)看代码网(记为A):内网IP:10.186.73.30 (2)文件服务器(记为B):内网IP:10.135.87.157 2.在A架设一个网站,端口8088(防火强设置 ...

  9. windows的一些好用命令-自己总结:

    在win+R运行框中:     cmd:进入命令行界面     msconfig:可以查看“系统配置”     msinfo32:查看系统信息     services.msc打开"服务&q ...

  10. AngularJS 中<a> 超链接标签不起作用?

    开始时遇到个问题,单页应用<a>元素链接点击就是不跳转页面,使用超链接标签<a href='group'>click</a> 不起作用. 解决方法: 如果你不巧配置 ...