Python使用flask框架操作sqlite3的两种方式


Posted in Python onJanuary 31, 2018

本文实例讲述了Python使用flask框架操作sqlite3的两种方式。分享给大家供大家参考,具体如下:

方式一: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)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
python 显示数组全部元素的方法
Apr 19 Python
对Django url的几种使用方式详解
Aug 06 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
Python属性和内建属性实例解析
Jan 14 Python
pytorch 修改预训练model实例
Jan 18 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
python不同版本的_new_不同点总结
Dec 09 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
PyQt QMainWindow的使用示例
Mar 24 Python
用Python生成会跳舞的美女
Jan 18 Python
pyqt5简介及安装方法介绍
Jan 31 #Python
Python实现的圆形绘制(画圆)示例
Jan 31 #Python
Python Json序列化与反序列化的示例
Jan 31 #Python
Python实现JSON反序列化类对象的示例
Jan 31 #Python
python删除过期log文件操作实例解析
Jan 31 #Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 #Python
使用Python制作微信跳一跳辅助
Jan 31 #Python
You might like
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
python实现连接mongodb的方法
2015/05/08 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python集合删除多种方法详解
2020/02/10 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
国际经济贸易专业推荐信
2013/11/06 职场文书
考试退步检讨书
2014/01/15 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
领导干部考核评语
2015/01/04 职场文书
开幕式邀请函
2015/01/31 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS