flask扩展模块flask-sqlachemy 的使用---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:[email protected]: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


时间: 2024-10-22 09:34:01

flask扩展模块flask-sqlachemy 的使用---mysql数据库的相关文章

Flask web开发----使用mysql数据库

根据<flask web开发>书中说不建议在生产环境中使用SQLite,所以在我跟着书本敲完api这一章的代码时,准备将数据库改用成mysql 1.现将这俩个文件删除,因为这是之前使用的SQLite数据库相关的文件 2.将原项目中的config文件中数据库的地址修改为如图所示的Mysql数据库.你需要现在你本机电脑上安装Mysql数据库,而且你存在一个用户的账户为:root,密码为:root,创建的数据库名称为Flask.(这里对mysql不做过多的讲解) 出于安全考虑可以将路径通过 (ven

flask + pymysql操作Mysql数据库

安装flask-sqlalchemy.pymysql模块 pip install flask-sqlalchemy pymysql 安装Mysql数据库 from flask.ext.sqlalchemy import SQLAlchemy from flask import Flask '''配置数据库''' app = Flask(__name__) app.config['SECRET_KEY'] ='hard to guess' # 这里登陆的是root用户,要填上自己的密码,MySQL

三 Flask+ MySQL 数据库操作

一: __init__.py作用: __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件.通常__init__.py 文件为空,但是我们还可以为它增加其他的功能.我们在导入一个包时,实际上是导入了它的__init__.py文件.这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入. __init__.py: from flask import Flask, url_for,

《Flask web开发》笔记4:数据库

一.实现功能:通过web表单生成登录界面.当输入的用户名不在后台数据库里时,加进去:在时,显示Happy see you again样式: 1.数据库引擎:MySQL (安装没有要求路径,我是用之前的没动) 2.数据库框架: Flask-SQLAlchemy(书上推荐,直接pip install  Flask-SQLAlchemy 就行) 二. Flask-SQLAlchemy建一个简单的表: aa.py: # coding: utf-8 from flask import Flask from

连接mysql数据库,创建用户模型

from flask import Flask from flask_sqlalchemy import SQLAlchemy import config app = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app) class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer,primary_key=True,autoincrem

flask框架----flask基础

知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi 2.实例化Flask对象,里面是有参数的 app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx') 3.两种添加路由的方式 方式一: @app.route('/xxxx') # @decorator def index(): return "Index" 方式二: def index():

django指定mysql数据库 ORM查询

django原生自带数据库,不过自带的数据库是sqlite 这次使用的orm框架操作数据库 这时候你就需要换上你想用的数据库比如大众化的mysql 但是你还是首先要先安装pymysql的驱动 pip install PyMySQL 在Django的工程同名子目录的__init__.py文件中添加如下语句 from pymysql import install_as_MySQLdb install_as_MySQLdb()django 在python2.7一直使用的是db操作数据库由于django

python连接远程mysql数据库 拒绝

flask 创建数据库时,出现mysql服务拒绝 ,发现是没有开启mysql远程连接配置 ,记录下解决方法 1.修改服务器ubuntu下mysql配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf bind-address =127.0.0.1 更改为 bind-address =0.0.0.0 2.支持root账号远程连接mysql数据库 grant all privileges on *.* to 'root'@'%' identified by

[Flask]学习Flask第三天笔记总结

1 from flask import Flask,render_template,request 2 from others import checkLogin 3 app = Flask(__name__) 4 5 #从templates里引用index.html 6 #return render_template("index.html") 7 @app.route('/') 8 def index(): 9 return '''<form action="/lo