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 相关文章推荐
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
python3之模块psutil系统性能信息使用
May 30 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python实现微信小程序自动回复
Sep 10 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
python如何求100以内的素数
May 27 Python
Python requests接口测试实现代码
Sep 08 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
Dec 17 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中ini_set和ini_get函数的用法小结
2014/02/18 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
python快速查找算法应用实例
2014/09/26 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Python request使用方法及问题总结
2020/04/26 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
什么是封装
2013/03/26 面试题
小组合作学习反思
2014/02/18 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
个人授权委托书
2014/04/03 职场文书
《假如》教学反思
2014/04/17 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
先进党组织事迹材料
2014/12/26 职场文书
高一地理教学工作总结
2015/08/12 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
java代码实现空间切割
2022/01/18 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis