• Flask框架——Flask-SQLite数据库


    目录

    SQLite数据库

    安装SQLite

    创建SQLite数据库

    使用SQLite


    上篇文章我们学习了Flask框架——Flask-Mail邮件,这篇文章我们学习Flask-SQLite数据库。

    SQLite数据库

    SQLite是一款轻型的数据库,遵守ACID的关系型数据库管理系统,占用资源非常的低,能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Python、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

    SQLite3为SQLite的第一个版本。

    其特点为:

    • 零配置,无需安装和管理配置;

    • 储存在单一磁盘文件中的一个完整的数据库;

    • 数据库文件可以在不同字节顺序的机器间自由的共享;

    • 足够小, 大致13万行C代码, 4.43M,支持数据库大小可至2TB;

    • 数据库操作快;

    • 不需要任何外部的依赖。

    虽然SQLite数据库是零配置,无需安装与管理,但为了能更好地管理SQLite中的数据库,我们建议还是安装,其安装方法很简单。这里我们在windows系统中安装

    安装SQLite

    在进入SQLite下载页面,找到Precompiled Binaries for Windows,如下图所示:

    下载红框中的压缩后,创建sqlite文件夹,并在此文件夹下解压上面两个压缩文件,如下图所示:

    这里我们在E盘中创建sqlite文件夹,大家可以根据自身习惯来创建

    解压后,需要将E:/sqlite添加到PATH环境变量中,如下图所示:

    在命令提示符中输入sqlite3,如下图所示:

    好了,这样就成功安装SQLite了。

    接下来我们通过Flask程序来演示如何使用SQLite。

    创建SQLite数据库

    创建Flask项目并在项目目录下创建名为test.py文件,如下图所示:

    test.py文件作用为创建SQLite数据库,代码如下所示:

    1. import sqlite3
    2. conn = sqlite3.connect('database.db')  #建立database.db数据库连接
    3. conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)'#执行单条sql语句
    4. conn.close()       #关闭连接

    创建SQLite数据库很简单:建立连接——创建数据表——关闭连接。

    使用sqlite3.connect()创建数据库连接,当连接的数据库不存在时,会自动在test.py文件同级路径下创建数据库,再使用execute()方法创建数据表,最后.close()关闭连接。

    其中SQLite数据库存储的数据表值类型有:

    存储类描述
    NULL值是一个 NULL 值。
    INTEGER值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
    REAL值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
    TEXT值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
    BLOB值是一个 blob 数据,完全根据它的输入存储。

    好了,运行test.py可以发现在项目目录中创建了一个名为database的数据库。

    使用SQLite

    首先在app.py文件中编写create_student视图函数,代码如下所示:

    1. @app.route('/create')
    2. def create_student():
    3.     return render_template('student.html')  #渲染student.html模板

    使用render_template()方法渲染student.html模板,student.html模板代码如下所示:

    1. <html>
    2.  <head>
    3.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    4.  <title>Titletitle>
    5.  head>
    6.     <body>
    7.      <form action = "{{ url_for('add_student') }}" method = "POST">
    8.           <p>姓名<input type = "text" name = "nm" />p>
    9.           <p>地址<textarea name = "add" >textarea>p>
    10.           <p>城市<input type = "text" name = "city" />p>
    11.           <p>邮编<input type = "text" name = "pin" />p>
    12.           <input type = "submit" value = "提交" />
    13.        form>
    14.     body>
    15.  html>

    使用url_for()方法将表单中的数据传递到视图函数add_student中,该视图函数代码如下所示:

    1. @app.route('/addstudent',methods = ['POST''GET'])
    2. def add_student():
    3.     try:
    4.         #获取请求中的nm、add、city、pin的数据
    5.         nm = request.form['nm']
    6.         addr = request.form['add']
    7.         city = request.form['city']
    8.         pin = request.form['pin']
    9.         with sqlite3.connect("database.db"as con:  #建立与database.db数据库的连接
    10.            cur = con.cursor()    #获取游标
    11.            cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)",(nm,addr,city,pin) )     #添加数据,执行单条的sql语句
    12.            con.commit()     #提交事务
    13.            msg = "数据添加成功"
    14.     except:
    15.         con.rollback()    #撤消当前事务中所做的所有更改
    16.         msg = "操作失败"
    17.     finally:
    18.         return render_template("result.html",msg = msg)  #渲染result.html模板并传递msg值
    19.         con.close()     #关闭数据库连接

    首先获取请求中的数据,在建立与database.db数据库连接,使用.cursor()获取数据库游标,在使用execute()方法添加数据,执行单条sql语句,最后提交事务,当数据添加失败时,调用rollback()方法撤消当前事务中所做的所有更改,使用render_template()方法渲染result.html模板并传递msg值。

    result.html模板代码如下所示:

    1. <html>
    2.  <head>
    3.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    4.  <title>Titletitle>
    5.  head>
    6.     <body>
    7.        操作结果 : {{ msg }}
    8.     body>
    9.  html>

    接下来编写展示数据的视图函数show_student,代码如下所示:

    1. @app.route('/show')
    2. def show_student():
    3.     con = sqlite3.connect("database.db")  #建立数据库连接
    4.     con.row_factory = sqlite3.Row      #设置row_factory,对查询到的数据,通过字段名获取列数据
    5.     cur = con.cursor()        #获取游标
    6.     cur.execute("select * from students")   #执行sql语句选择数据表
    7.     rows = cur.fetchall()      #获取多条记录数据   
    8.     return render_template("show.html",rows = rows)  #渲染show.html模板并传递rows值

    建立数据库连接并设置row_factory对象查询到的数据通过字段名来获取列数据,使用cursor()方法获取数据操作游标,再使用execute()方法执行sql语句选择数据表,使用fetchall()放过获取多条数据,最后使用render_template方法渲染show.html模板并传递rows值。

    show.html模板代码如下所示:

    1. <html>
    2.  <head>
    3.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    4.  <title>Titletitle>
    5.  head>
    6.     <body>
    7.        <table border = 1>
    8.           <thead>
    9.              <td>改名td>
    10.              <td>地址td>
    11.              <td>城市td>
    12.              <td>编码td>
    13.           thead>
    14.           {% for row in rows %}
    15.              <tr>
    16.                 <td>{{row["name"]}}td>
    17.                 <td>{{row["addr"]}}td>
    18.                 <td>{{row["city"]}}td>
    19.                 <td>{{row['pin']}}td>
    20.              tr>
    21.           {% endfor %}
    22.        table>
    23.     body>
    24.  html>

    启动Flask程序,访问http://127.0.0.1:5000/create写入数据,如下图所示:

    点击提交就会跳转http://127.0.0.1:5000/addstudent并显示:操作结果 : 数据添加成功。

    访问http://127.0.0.1:5000/show,如下图所示:

    好了,Flask框架——Flask-SQLite数据库就讲到这里了,感谢观看,下篇文章我们学习Flask框架——Flask Sijax

    公众号:白巧克力LIN

    该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章!

    - END -

  • 相关阅读:
    websocket 封装在vue中使用
    uniapp微信小程序解决上方刘海屏遮挡
    Python 爬虫之lxml和Xpath提取网页数据
    Instant-NGP论文笔记
    动手写prometheus的exporter-01-Gauge(仪表盘)
    CG Magic分享同一场景里下,VR渲染器和CR渲染器哪个好?
    UTS 数据库同步原理
    JavaWeb-JSP
    生成拼图游戏
    微信小程序组件传值
  • 原文地址:https://blog.csdn.net/weixin_52122271/article/details/126010942