zoukankan      html  css  js  c++  java
  • python3.5+flask+mysql

    该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该

    安装pymysql:pip install pymysql

    在网上的好多资料都给的是使用sqlite的例子,由于很不喜欢所以今天分享一下flask-sqlalchemy操作mysql的方法.

    以前习惯使用sqlalchemy,后来发现使用flask-sqlchemy还是要简单一些(起码省去了好多模块和类的导入,create_engine,sessionmaker,declarative。。。)不过flask官方的例子用的是sqlchemy,去官网, flask-sqlalchemy官方文档

      这里写一个简单的flask web程序,来说明flask-sqlalchemy如何驱动msyql数据库.为了偷懒,这个例子以上一篇博文flask蓝图的使用为基础.

    首先看一下程序结构:

     相比上一节只多了两个文件,create_db.py,models.py

    1.建立mysql和app的连接

    在config.py中加入以下两项配置:

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8'
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    如此在app/__init__.py中加入
    app.config.
    from_object('config')
    db = SQLAlchemy(app)
    就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db

    完整的app/__init__.py代码如下:
    复制代码
    from flask import Flask, url_for, request, redirect, render_template
    from flask_sqlalchemy import SQLAlchemy
    app = Flask(__name__)
    app.config.from_object('config')
    db = SQLAlchemy(app)
    from app import models,views
    复制代码
    
    

    2.创建app/models.py模块

    上代码

    复制代码
    from app import db #db是在app/__init__.py生成的关联后的SQLAlchemy实例
    
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True)
        email = db.Column(db.String(320), unique=True)
        password = db.Column(db.String(32), nullable=False)
    
        def __repr__(self):
            return '<User %r>' % self.username
    
    
    class Admin(db.Model):
        __tablename__ = 'admins'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80), unique=True)
        email = db.Column(db.String(320), unique=True)
        password = db.Column(db.String(32), nullable=False)
    
        def __repr__(self):
            return '<User %r>' % self.username
    复制代码

     3.创建create_db.py,表结构设计完成后执行python create_db.py即可完成表的创建,如下图

    #app/create_db.py
    from app import db
    db.create_all()


    4.表已经创建完成了,接下来是我们的业务逻辑使用表的时候了

    分别在user和admin蓝图中增加一个add用户的业务

    #app/user.py

    复制代码
    from flask import Blueprint, render_template, redirect,request
    from app import db
    from .models import User
    user = Blueprint('user',__name__)
    
    @user.route('/index')
    def index():
        return render_template('user/index.html')
    
    @user.route('/add/',methods=['GET','POST'])
    def add():
        if request.method == 'POST':
            p_user = request.form.get('username',None)
            p_email = request.form.get('email',None)
            p_password = request.form.get('password',None)
    
            if not p_user or not p_email or not p_password:
                return 'input error'
    
            newobj = User(username=p_user, email=p_email, password=p_password)
            db.session.add(newobj)
            db.session.commit()
            users = User.query.all()
            return render_template('user/add.html',users=users)
        users = User.query.all()
        return render_template('user/add.html',users=users)
    
    @user.route('/show')
    def show():
        return 'user_show'
    复制代码

    #app/admin.py

    复制代码
    #admin.py
    from flask import Blueprint,render_template, request, redirect
    from app import db
    from .models import Admin
    
    admin = Blueprint('admin',__name__)
    
    @admin.route('/index')
    def index():
        return render_template('admin/index.html')
    
    @admin.route('/add/',methods=['POST','GET'])
    def add():
        if request.method == 'POST':
            p_admin = request.form.get('username',None)
            p_email = request.form.get('email',None)
            p_password = request.form.get('password',None)
    
            if not p_admin or not p_email or not p_password:
                return 'input error'
    
            newobj = Admin(username=p_admin, email=p_email, password=p_password)
            db.session.add(newobj)
            db.session.commit()
            admins = Admin.query.all()
            return render_template('admin/add.html',admins=admins)
        admins = Admin.query.all()
        return render_template('admin/add.html',admins=admins)
    
    @admin.route('/show')
    def show():
        return 'admin_show'
    复制代码

    #app/templates/admin/add.html

    复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>AdminsAdd</title>
    </head>
    <body>
    <form action="/admin/add/" method="POST">
        user:<input type="text" name="username" />
        email:<input type="text" name="email" />
        pwd:<input type="password" name="password" />
        <input type="submit" value="add" />
    </form>
    {% if admins %}
    <table border="1px">
        <tr>
            <th>UserName</th>
            <th>Email</th>
        </tr>
        {% for u in admins %}
            <tr>
                <td>{{u.username}}</td>
                <td>{{u.email}}</td>
            </tr>
        {% endfor %}
    </table>
    {% endif %}
    </body>
    </html>
    复制代码

    #app/templates/user/add.html

    复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>UserAdd</title>
    </head>
    <body>
    <form action="/user/add/" method="POST">
        user:<input type="text" name="username" />
        email:<input type="text" name="email" />
        pwd:<input type="password" name="password" />
        <input type="submit" value="add" />
    </form>
    {% if users %}
    <table border="1px">
        <tr>
            <th>UserName</th>
            <th>Email</th>
        </tr>
        {% for u in users %}
            <tr>
                <td>{{u.username}}</td>
                <td>{{u.email}}</td>
            </tr>
        {% endfor %}
    </table>
    {% endif %}
    </body>
    </html>
    复制代码


    #app/views.py

    复制代码
    from app import app
    from .admin import admin
    from .user import user
    
    app.register_blueprint(admin,url_prefix='/admin')
    app.register_blueprint(user, url_prefix='/user')
    复制代码

    #run.py

    from app import app
    app.run()

    到这里也就结束了,这样这个例子就结合了蓝图和flask-sqlalchemy.本例中只使用了db.session.add(),其它的还有db.session.delete()...

    看一下效果:

     localhost:5000/user/add

     

     localhost:5000/admin/add






  • 相关阅读:
    mysql5.7 编码统一utf-8
    Spring+Swagger文档无法排序问题解决
    git的常用命令
    maven常用命令
    在centos6.5中安装zookeeper集群
    在centos6.5中安装github的客户端git
    rpm安装和卸载软件
    在centos6.5中安装scp和lrzsz
    用cxf开发restful风格的WebService
    cxf的soap风格+spirng4+maven 客户端
  • 原文地址:https://www.cnblogs.com/mosson/p/6962526.html
Copyright © 2011-2022 走看看