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中初学者应会的一些基本的提升效率的小技巧
Mar 31 Python
Python中的模块和包概念介绍
Apr 13 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python+splinter自动刷新抢票功能
Sep 25 Python
python字典排序的方法
Oct 12 Python
Python partial函数原理及用法解析
Dec 11 Python
python入门之基础语法学习笔记
Feb 08 Python
Python 生成VOC格式的标签实例
Mar 10 Python
python实现粒子群算法
Oct 15 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
用60行代码实现Python自动抢微信红包
Feb 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
人大复印资料处理程序_输入篇
2006/10/09 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
python开发之for循环操作实例详解
2015/11/12 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
python微信撤回监测代码
2019/04/29 Python
Python中if有多个条件处理方法
2020/02/26 Python
python打包生成so文件的实现
2020/10/30 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
Oracle性能调优原则
2012/05/03 面试题
小学班级口号
2014/06/09 职场文书
学校安全责任书范本
2014/07/23 职场文书
生产现场禁烟通知
2015/04/23 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers