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 14 Python
python实现逆波兰计算表达式实例详解
May 06 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
分享6个隐藏的python功能
Dec 07 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
python flask解析json数据不完整的解决方法
May 26 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
python groupby 函数 as_index详解
Dec 16 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 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发送邮件类代码附详细说明
2008/07/10 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
vue 的 solt 子组件过滤过程解析
2019/09/07 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
Django中的Model操作表的实现
2018/07/24 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python 学习教程之networkx
2019/04/15 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
简单了解python代码优化小技巧
2019/07/08 Python
python绘制随机网络图形示例
2019/11/21 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
网络技术专业推荐信
2014/02/20 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
工作目标责任书
2014/07/23 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
人才市场接收函
2015/01/30 职场文书
学生犯错保证书
2015/05/09 职场文书