1. 程式人生 > 資料庫 >Python使用flask框架操作sqlite3的兩種方式

Python使用flask框架操作sqlite3的兩種方式

本文例項講述了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','[email protected]'),('guest1','[email protected]'),('guest2','[email protected]'),('guest3','[email protected]'),('guest4','[email protected]')]
  # 插入資料
  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','[email protected]')
  db.session.add(admin)
  guestes = [User('guest1',User('guest2',User('guest3',User('guest4','[email protected]')]
  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操作SQLite資料庫技巧總結》、《Python常見資料庫操作技巧彙總》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》

希望本文所述對大家Python程式設計有所幫助。