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: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
flask扩展模块flask-sqlachemy 的使用---mysql数据库的更多相关文章
- Flask与mysql数据库字段类型的区别以及基本用法
Mysql里面的int在Flask中里面使用Integer Mysql里面的varcahar在Flask中里面使用String 与Mysql数据库需要导入模块 #导入第三方链接库sql点金术 from ...
- Flask中Mysql数据库的常见操作
from flask import Flask,render_template #导入第三方链接库sql点金术 from flask_sqlalchemy import SQLAlchemy #建立对 ...
- flask连接mysql数据库
from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql pymysql.install_as_My ...
- flask + pymysql操作Mysql数据库
安装flask-sqlalchemy.pymysql模块 pip install flask-sqlalchemy pymysql ### Flask-SQLAlchemy的介绍 1. ORM:Obj ...
- Flask项目中使用mysql数据库启动项目是发出警告
Flask项目中使用mysql数据库启动项目是发出警告: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA ...
- flask下直接展示mysql数据库 字段
在工作中,会导出一份mysql的html来查看,用的是就是路过秋天大神的那个工具,所以想自己用那个样式直接在后端写一个页面做展示! 前端页面 from flask import Flask,reque ...
- Flask 操作Mysql数据库 - flask-sqlalchemy扩展
数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...
- python3 + flask + sqlalchemy +orm(1):链接mysql 数据库
1.pycharm中新建一个flask项目 2.按装flask.PyMySQL.flask-sqlalchemy 3.项目下面新建一个config.py 文件 DEBUG = True #dialec ...
- Flask框架实现登录注册功能(mysql数据库)
前言: 本例使用Flask框架完成登录和注册操作,包括前端(index.html,regist.html)和后端(app.py)两部分,前端页面不过多介绍,直接进入后端部分: 逻辑思路: 登录部分:运 ...
随机推荐
- Java 汉子转拼音
1. 引入: pinyin4j-1.1.0 包; http://pan.baidu.com/s/1eQ8a874 2. 转换; private static String ChineseToPiny ...
- iOS真机调试配置
啊!生活不易啊~~~~据说这个过程都可以当做简历技能了... 准备:已经具备了企业开发者账号,和相关证书 目标:让爪机可以真机调试 过程:1.登录官方开发网站 https://developer.ap ...
- CentOS下成功修复了Windows的grub引导
(转载) 以CentOS7和Windows为双系统,且后安装CentOS时,会出现开机没有Windows引导的问题.下图,倒数第二行可以看到Windows引导项: 修复运行终端(terminal),键 ...
- Subpub 订阅/发布
var Pubsub = (function (window) { window.handlers = {}; var o = { pub: function () { var args = Arra ...
- OC--类型为ID 的类的名称
NSString *str = [[view class] description];
- MyEclipse 修改项目字符集
项目->右键+properties->Resource->Text file container->others->utf-8
- 笔记整理——C语言-http
C语言 HTTP GZIP数据解压 - 大烧饼的实验室 - 博客园 - Google Chrome (2013/4/10 18:22:26) C语言 HTTP GZIP数据解压 这个代码在http ...
- bootstrap的alert提示框的关闭后再显示问题
bootstrap中有alert组件,如果点击关闭按钮后该组件会被删除而不是被隐藏,想再显示怎么办呢? bootstrap-alert.js源码片段: function removeElement() ...
- 【续】强行在C# Winform中渲染Cocos2d-x 3.6
[前言] 上一篇讲了怎么把Cocos2d-x 3.6渲染进MFC窗体,这里来讲一下怎么在C# Winform中做到同样的功能.如果你不熟悉MFC的使用但对C# Winform比较在行,请往下看. 这一 ...
- @dynamic、@synthesize
声明property属性后,有2种实现选择: @synthesize 编译器期间,让编译器自动生成getter/setter方法. 当有自定义的存或取方法时,自定义会屏蔽自动生成该方法 @dynami ...