第一次正式做项目就用了Flask,主要是因为相对Django框架,flask更好上手。
以下将介绍Flask框架对数据库的种种使用姿势:)
版本和环境: MySQL5.7.23 + python 3.6
from flask import Flask, render_template, request, url_for, sessions, redirect, flash, jsonify, make_response
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
import config
import json
import requests
import urllib
from urllib.request import urlopen, quote
app = Flask(__name__)
app.config.from_object(config)
Base = declarative_base()
engine = create_engine("mysql+pymysql://root:root@localhost:3306/flask",
encoding="utf-8",
echo=False)
#mysql数据库模型-User
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, unique=True, nullable=False)
username = Column(String(20), nullable=False)
pw = Column(String(20), nullable=False)
#mysql数据库模型-Log
class Log(Base):
__tablename__ = 'log'
id = Column(Integer, primary_key=True, nullable=False, unique=True)
username = Column(String(20), nullable=False)
intercept = Column(String(20))
type = Column(String(20))
server = Column(String(20))
ip = Column(String(20))
···
···
location = Column(String(20))
# 数据库中没有数据表时自动创建
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
# 举例 注册时与数据库中信息进行对比并且将数据存入数据库中!!!重点
@app.route('/register', methods=['GET', 'POST'])
def register():
# 建立数据库对象
session = DBSession()
# get请求则渲染当前界面
if request.method == 'GET':
return render_template('register.html')
else:
# 从前端表单输入框中获取数据
username = request.form.get('id')
pw = request.form.get('pw')
email = request.form.get('email')
#查找数据库中数据
user = session.query(User).filter(User.username == username).first()
if user:
# flask 自带flash消息提示
flash(' 用户名已存在 ! ')
#重定向
return redirect(url_for('register'))
else:
session = DBSession()
#存入数据库
user = User(username=username, pw=pw, email=email)
session.add(user)
session.commit()
session.close()
flash('注册成功, 请前往登录 !')
return redirect(url_for('register'))
# 举例 使用数据库查询语句查询数据库中数据
# 返回服务器 其中还使用了cookie来记录登录的用户名
@app.route('/api/server', methods=['POST', 'get'])
def server_data():
username = request.cookies.get("name")
jsonData = {}
server = []
# 执行SQL语句
curl_server = engine.execute('select server as server from server where username="'+username+'"')
# 获取查询全部结果
servers = curl_server.fetchall()
for item in servers:
server.append(item[0])
jsonData['server'] = server
data = json.dumps(jsonData)
return data
json.dumps : dict转成str 一个是将字典转换为字符串
json.loads: str转成dict 一个是将字符串转换为字典
json.dump 是将python数据保存成json
json.load 是读取json数据