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奇偶行分开存储实现代码
Mar 19 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
openCV提取图像中的矩形区域
Jul 21 Python
python 实现控制鼠标键盘
Nov 27 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python读写Excel表格的方法
Mar 02 Python
解决Pytorch中关于model.eval的问题
May 22 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中读写文件实现代码
2011/10/20 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
js利用iframe实现选项卡效果
2020/08/09 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
Python中__call__用法实例
2014/08/29 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
django 多数据库配置教程
2018/05/30 Python
Python错误处理操作示例
2018/07/18 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
餐厅销售主管职责范本
2014/02/19 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
婚庆答谢词
2015/01/04 职场文书