当前位置: 首页>编程语言>正文

python flask 数据存 session flask设置session

前言


前面我们学习了Flask如何构建一个程序的流程,又研究了它的路由如何设定,还对如何获取模板表单数据进行了梳理,这一篇文章来研究一下如何将Flask数据库连接。

在这个系列的第一篇文章中,就已经提到之所以选择Flask的一个很重要的原因就是它和SQLAlchemy的对接做得比较好,而DjangoORM部分相对封闭了些,再加上之前自己的一个系统中用的也是SQLAlchemy的缘故。


这里稍插入一点题外话:家里的计算机上安装的是Lubuntu19.10,但在安装Mariadb数据库时,始终提示ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)这个错误,研究了网上能找得到的方案都无助于解决,前后也完全删除并重装了数次,依旧没有效果,后想起是否可借助tasksel工具将LAMP直接安装上去,结果提示LAMP安装成功,但运行时依然有同样的错误发生,所以无奈之下准备卸载LAMP,但恰恰就是利用tasksel来取消勾选框后,卸载是卸载了,可系统重起后始终定于openbox登录界面无法加载成功,试了数次后,无奈只得用liveCD备份系统数据,并重新安装,之后直接升级到Lubuntu20.04版本,再安装Mariadb,然后运行mysql_secure_installation,竟然成功了,然而终究是无法知道原版本为何出问题了,鉴于在这个小问题上纠缠了两个小时,颇有些郁闷,故记于此,以期某天能知道是哪里出了故障。

连接数据的准备工作


刚才提到在系统中安装了Mariadb数据库,这个数据库是mysql的一个衍生版本,关于两者的恩怨同学们可以去网格上搜索,这里就不再重述了。

通过root帐号进入数据库中,创建新的数据库:


create database mydb default character set utf8mb4 collate utf8mb4_unicode_ci;


这语句后面的 character

是设定数据库字符集。 准备好数据库后,要安装flask-sqlalchemy,这是Flask的一个插件,也相当于FlaskSQLAlchemy的一个接口,安装代码如下:


pip3 install flask-sqlalchemy


为了使 Python

能和 mariadb

数据库连接起来,这里用的是 pymysql

驱动:

pip3 install pymysql


创建数据表 首先要导入相应的包:

from flask import Flask from flask_sqlalchemy import SQLAlchemy


接着创建与数据库的接口:

app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/mydb?charset=utf8' app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True db= SQLAlchemy(app)


上述代码中 app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

这一行如果不添加,程序会报警告。 db=SQLAlchemy(app)

这一句即完成了将Flask与数据库的连接,所创建的db就是一个抽象的数据库对象。

下面我们来基于刚才创建的db对象构造一个User类:


class User(db.Model):     id     = db.Column(db.Integer, primary_key = True)     name   = db.Column(db.String(100))     email = db.Column(db.String(100))       passwd = db.Column(db.String(200))     demo   = db.Column(db.String(100))     def __init__(self, name, email, passwd, demo):         self.name = name         self.email = email         self.passwd = passwd         self.demo = demo


在上述类中,我们为 User

创建了五个字段,下面可以通过运行一句语句来将上述类映射到数据库中:

db.create_all()


这时我们来 mysql

看看我们创建的表是否存在,如下图所示:

python flask 数据存 session flask设置session,python flask 数据存 session flask设置session_数据库,第1张


向数据库添加数据 在创建完成后,要开始对数据库进行操作,首先来添加数据,为了用户添加方便,我们需要添加一个用户输入界面,这个可以借鉴之前的用户登录页面设置:

<html>    <body>       <h3>用户信息录入h3>       <hr/>       <form action = "{{ request.path }}" method = "post">           <label for = "name">用户名:label>           <input type = "text" name = "name" placeholder = "用户名" /><br>           <label for = "email">邮 箱:label>           <input type = "text" name = "email" placeholder = "" /><br>           <label for = "passwd">密 码:label>           <input type ="password" name = "passwd" placeholder = "" /><br>           <label for = "demo">备 注:label>           <textarea name = "demo" placeholder = "">textarea><br>           <input type = "submit" value = "添加" />       form>    body> html>


这一次我们将表单的 action

直接指向当前路径,这就要求在当前路径所对应的函数中,对 POST

数据进行处理:

@app.route('/newuser/', methods = ['GET', 'POST'])def newuser():    if request.method == 'POST':        if request.form['name'] and request.form['email'] and request.form['passwd']:            curuser = User(request.form['name'], request.form['email'], request.form['passwd'], request.form['demo'])            db.session.add(curuser)            db.session.commit()            return redirect(url_for('dispAllUser'))    return render_template('newuser.html')


如果熟悉 SQLAlchemy

的同学,肯定对 session.add

以及 session.commit

这两个方法很熟悉,在 SQLAlchemy

中, session

是通过 sessionmake

engine

进行绑定后的实例化对象,而在 flask-sqlalchemy

中,这个 session

就直接通过 db

就可以访问,关于 db

的创建在上文中有提及。 注意:上述代码中,url_for()后面跟的函数必须与实际的函数相对应,而不是和路由一致。

显示的界面如下:

python flask 数据存 session flask设置session,python flask 数据存 session flask设置session_flask session_02,第2张


将数据库的数据显示出来 在上述newuser的路由函数中,当用户添加成功后,会将页面重定向至显示所有用户页面的函数中,这就需要再来写一个页面,关于这一个可参考上一篇文章中显示所有用户的页面模板:


<html>   <head>head>   <body>      <h3>所有用户信息h3>      <h3>新建 (<a href = "{{ url_for('newuser') }}">增加用户a>)h3>      <table border="1">         <thead>            <tr>               <th>姓名th>               <th>邮箱th>               <th>密码th>               <th>备注th>            tr>         thead>                  <tbody>            {% for user in users %}               <tr>                  <td>{{ user.name }}td>                  <td>{{ user.email }}td>                  <td>{{ user.passwd }}td>                  <td>{{ user.demo }}td>               tr>            {% endfor %}         tbody>      table>   body>html>


当然,对于显示所有用户信息需要单独用一个路由来实现:

@app.route('/dispalluser/')def dispAllUser():   return render_template('dispalluser.html', users = User.query.all() )


上述代码中,我们向模板增加了一个User的变量,该变量将数据查询信息传递给模板dispalluser.html

显示的结果如下:

python flask 数据存 session flask设置session,python flask 数据存 session flask设置session_flask session_03,第3张


在数据库中查询的结果如下:

python flask 数据存 session flask设置session,python flask 数据存 session flask设置session_flask session_04,第4张


小结 本文对 Flask

如何连接 mariadb

数据库进行了分析,并实现了一个用户信息的增加和查询功能,在接下来的学习中,我们将对该程序进行更好的完善。


https://www.xamrdz.com/lan/5hh1959810.html

相关文章: