python flask扩展_flask扩展模块flask-sqlachemy 的使用---mysql数据库

这篇博客介绍了如何在Python Flask应用中使用flask-sqlalchemy扩展与MySQL数据库进行交互。首先,配置了环境并安装了pymysql。然后,通过在`config.py`和`app/__init__.py`中设置配置,建立了与数据库的连接。接着,创建了`models.py`定义了User和Admin数据模型。最后,展示了在`create_db.py`中创建数据库表的步骤,以及在user和admin蓝图中添加用户的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇博客配置环境为: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 importFlask, url_for, request, redirect, render_templatefrom flask_sqlalchemy importSQLAlchemy

app= Flask(__name__)

app.config.from_object('config')

db=SQLAlchemy(app)from app import models,views

2.创建app/models.py模块

上代码

from app importdb #db是在app/__init__.py生成的关联后的SQLAlchemy实例classUser(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 '' %self.usernameclassAdmin(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 '' % self.username

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

#app/create_db.py

from app importdb

db.create_all()

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

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

#app/user.py

from flask importBlueprint, render_template, redirect,requestfrom app importdbfrom .models importUser

user= Blueprint('user',__name__)

@user.route('/index')defindex():return render_template('user/index.html')

@user.route('/add/',methods=['GET','POST'])defadd():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 notp_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')defshow():return 'user_show'

#app/admin.py

#admin.py

from flask importBlueprint,render_template, request, redirectfrom app importdbfrom .models importAdmin

admin= Blueprint('admin',__name__)

@admin.route('/index')defindex():return render_template('admin/index.html')

@admin.route('/add/',methods=['POST','GET'])defadd():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 notp_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')defshow():return 'admin_show'

#app/templates/admin/add.html

AdminsAdd

user:email:pwd:

{% if admins %}

UserNameEmail{% for u in admins %}{{u.username}}{{u.email}}{% endfor %}{% endif %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值