您好,登錄后才能下訂單哦!
怎么在flask框架中配置mysql數據庫?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
安裝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框架中配置mysql數據庫問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。