sqlalchemy mysql_Flask教程(十一)数据库操作flask_sqlalchemy

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7
  • pycharm 2020.1.2
  • flask 1.1.2
  • sqlite3

前言

web开发中,离不开数据库操作。前文我们已经介绍过SQLAlchemy这个ORM, python使用sqlalchemy操作mysql数据库, 真的非常简单好用。Flask-SQLAlchemyflask的扩展,它将SQLAlchemy的支持带到了flask应用程序中

安装

使用老方法安装

pip install flask_sqlalchemy

sqlite安装

SQLAlchemy操作mysql的示例前面已经演示过了,这次我们使用sqlite数据库。sqlite是一款轻量级的数据库,可以很方便的在嵌入式设备或者移动设备上使用,支持主流的操作系统winlinuxmacOSandroid等,目前版本已经发展到了sqlite3

来到官方站点 https://www.sqlite.org/download.html,根据自己的平台进行选择下载

1f30fd0f4f7032c2922266b1b4b5b2ab.png

将下载下来的2个压缩包分别加压缩,然后将里面的文全部件放在一个文件夹里,方便使用,然后将这个文件夹的路径加入到系统的环境变量里

4631bd85bcf34da01e2ab68ccefefa02.png

04ca5f838c4010d386ae0cacd0687eb5.png

然后,我们在任意位置,打开终端,就都可以直接使用sqlite.exe

881a012d62621eae566fff54020a7471.png

如果不熟悉sql的命令的话,可以使用图形化客户端,这里推荐一个工具,它是一个开源的项目,可以下面的地址进行下载

https://sqlitebrowser.org/dl/

代码示例

这里还是使用上一节 Flask教程(十)表单处理Flask-WTF 中的用户注册是示例,在原来的基础上进行修改,当用户提交注册信息的时候,flask会去数据库中进行查询,如果用户名不存在则将用户信息写入sqlite,否则给出无效用户名的错误信息,要求用户重新填写

from flask import Flask, render_template, requestfrom flask_wtf import FlaskFormfrom wtforms import SubmitField, StringField, PasswordFieldfrom wtforms.validators import DataRequired, EqualTo, Length, Emailfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.secret_key = "xxx"# 设置数据库URIapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///member.sqlite3'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True# 使用app作为参数实例化一个SQLAlchemy类的对象db = SQLAlchemy(app)# 创建会员模型class Member(db.Model):    id = db.Column('id', db.Integer, primary_key=True, autoincrement=True)    username = db.Column(db.String(45), unique=True)    email = db.Column(db.String(45))    password = db.Column(db.String(128))    def __init__(self, username, email, password):        self.username = username        self.email = email        self.password = password# 创建数据表db.create_all()# 使用WTF实现表单,自定义一个表单类class RegisterForm(FlaskForm):    username = StringField(label='用户名: ', validators=[DataRequired()])    email = StringField(label='邮箱: ', validators=[DataRequired(), Email(message='邮箱格式错误')])    password = PasswordField(label='密码: ', validators=[DataRequired(), Length(6, 16, message='密码格式错误')])    password2 = PasswordField(label='确认密码: ', validators=[DataRequired(), Length(6, 16, message='密码格式错误'), EqualTo('password', message='密码不一致')])    submit = SubmitField(label='注册')@app.route('/', methods=['GEt', 'POST'])def register():    register_form = RegisterForm()    if request.method == 'POST':        if register_form.validate_on_submit():            username = request.form.get('username')            email = request.form.get('email')            password = request.form.get('password')            # 判断数据库中是否已经存在相同的用户名            if Member.query.filter_by(username=username).all():                return 'Invalid username'            # 构建数据库记录并写入数据库            member = Member(username=username, email=email, password=password)            db.session.add(member)            db.session.commit()            return 'Register success.'        else:            return 'Invalid'    # 把实例化后的register_form传入到页面register.html中    return render_template('register.html', form=register_form)if __name__ == '__main__':    app.run(debug=True)

模板文件跟原来的一样,只有一个form表单,没有做任何修改

        Register            {{ form.csrf_token() }}        {{ form.username.label }} {{ form.username }}         {{ form.email.label }} {{ form.email  }}         {{ form.password.label }} {{ form.password }}         {{ form.password2.label }} {{ form.password2 }}         {{ form.submit }}    

程序运行起来后,访问http://127.0.0.1:5000,输入满足条件的注册信息

55acecd3be15676a274185f315adb459.png

d833323fb57064f5c494a5e363c1b32b.png

在项目根目录生成了数据库文件member.sqlite3

80aab7185241dc6fd1f7e25ef912b3cd.png

使用图形化工具DB Browser打开member.sqlite3可以看到刚才注册成功的用户信息,利用工具,可以很方便的进行数据的增删改查

911bc44e8f095de1f82e306a84db2ba6.png

如果用户名已经被注册过了,则页面提示错误信息,相应的信息也不会被写入数据库

9cf5ce227b4498417509f9f33480bfcd.png

备注

如果出现警告

UserWarning SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead

可以通过设置app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True来消除上面的警告

源码下载

https://github.com/xugaoxiang/FlaskTutorial

参考资料

python使用sqlalchemy操作mysql数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值