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实现网络端口转发和重定向的方法
Sep 19 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
教你用Python写安卓游戏外挂
Jan 11 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
python re库的正则表达式入门学习教程
Mar 08 Python
Django  ORM 练习题及答案
Jul 19 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
3.从实例开始
2006/10/09 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP中header用法小结
2016/05/23 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python的函数的一些高阶特性
2015/04/27 Python
Django中url的反向查询的方法
2018/03/14 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
python爬取个性签名的方法
2018/06/17 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
python opencv调用笔记本摄像头
2019/08/28 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
高校毕业生自我鉴定
2013/10/27 职场文书
法学个人求职信范文
2014/01/27 职场文书
促销活动总结范文
2014/04/30 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python