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字符串的常用操作方法小结
May 21 Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 Python
python中模块的__all__属性详解
Oct 26 Python
Python内建模块struct实例详解
Feb 02 Python
简单实现python数独游戏
Mar 30 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
pytorch实现线性回归以及多元回归
Apr 11 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
8个PHP程序员常用的功能汇总
2014/12/18 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python 实现目录复制的三种小结
2019/12/04 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
急诊科护士自我鉴定
2013/10/14 职场文书
征婚广告词
2014/03/17 职场文书
学生会主席演讲稿
2014/04/25 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python