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简单实现子网掩码转换的方法
Apr 13 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
详解Python中类的定义与使用
Apr 11 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
django 常用orm操作详解
Sep 13 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
python print 按逗号或空格分隔的方法
May 02 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
python GUI模拟实现计算器
Jun 22 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
Python Tkinter基础控件用法
2014/09/03 Python
Python 操作文件的基本方法总结
2017/08/10 Python
python如何读写csv数据
2018/03/21 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
郭明义电影观后感
2015/06/08 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
Python使用永中文档转换服务
2022/05/06 Python