Flask后端总结-操作MySQL数据库

版权声明:本文为博主精心打造,转载请标明出处。>_< https://blog.csdn.net/slyslyme/article/details/82843707

第一次正式做项目就用了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数据

猜你喜欢

转载自blog.csdn.net/slyslyme/article/details/82843707