English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite de Flask

Python tiene soporte integrado para SQLite. SQlite3El módulo se acompaña del lanzamiento de Python. En esta sección, veremos cómo la aplicación Flask interactúa con SQLite.

Crea una base de datos SQLite ‘database.db’y crea una tabla student en ella.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
import sqlite3
 conn = sqlite3.connect('database.db')
 print "Opened database successfully";
 conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
 print "Table created successfully";
 conn.close()

La aplicación Flask tiene tres funciones de vista.

La función new_student() se asocia con la regla de URL (‘/addnew())。 Presenta el archivo HTML que contiene el formulario de información de estudiante.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
@app.route('/enternew')
 def new_student():
     return render_template('student.html')

El script HTML de 'student.html' es el siguiente -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask示例</title>
 </head>
    <body>
     <form action="{{ url_for('addrec') }}" method="POST">
          <h3>Información de estudiante</h3>
          Nombre<br>
          <input type = "text" name = "nm" /></br>
          Dirección<br>
          <textarea name = "add" /><br>
          Ciudad<br>
          <input type = "text" name = "city" /><br>
          Código postal<br>
          <input type = "text" name = "pin" /><br>
          <input type = "submit" value = "Enviar" /><br>
       </form>
    </body>
 </html>

Se puede ver que los datos del formulario se publican al binding de la función addrec(), que corresponde a URL => '/addrec' .

La función addrec() recupera los datos del formulario mediante el método POST y los inserta en la tabla de estudiantes. Los mensajes correspondientes al éxito o al error de la operación de inserción se presentan como 'result.html'.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
@app.route('/addrec', methods = ['POST', 'GET'])
 def addrec():
     if request.method == 'POST':
        try:
           nm = request.form['nm']
           addr = request.form['add']
           city = request.form['city']
           pin = request.form['pin']
           with sql.connect("database.db") as con:
              cur = con.cursor()
              cur.execute("INSERT INTO students (name,addr,city,pin) 
                VALUES (?,?,?,?)",(nm,addr,city,pin))
              con.commit()
              msg = "Record successfully added"
        except:
           con.rollback()
           msg = "error in insert operation"
        finally:
           return render_template("result.html", msg = msg)
           con.close()

result.html El script HTML contiene instrucciones de escape para mostrar los resultados de la operación de inserción {{ msg }}.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask示例</title>
 </head>
    <body>
       Resultados de la operación: {{ msg }}
       <h2><a href = "/">返回主页</a></h2>
    </body>
 </html>

Esta aplicación contiene un URL => '/list' representa otra función list(). Llena 'fila' de un objeto MultiDict que contiene todos los registros de la tabla de estudiantes. Este objeto se pasa a la plantilla list.html.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
@app.route('/list')
 def list():
     con = sql.connect("database.db")
     con.row_factory = sql.Row
     cur = con.cursor()
     cur.execute("select * from students
     rows = cur.fetchall(); 
     return render_template("list.html", rows=rows)

Este list.html es un plantilla, que itera sobre la colección de filas y presenta los datos en una tabla HTML.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Flask示例</title>
 </head>
    <body>
       <table border = 1>
          thead>
             <td>改名</td>
             <td>地址</td>
             <td>城市</td>
             <td>编码</td>
          </thead>
          {% for row in rows %}
             tr>
                <td>{{row["name"]}}</td>
                <td>{{row["addr"]}}</td>
                <td>{{row["city"]}}</td>
                <td>{{row['pin']}}</td> 
             </tr>
          {% endfor %}
       </table>
       <a href = "}}/">返回主页</a>
    </body>
 </html>

最后,URL => ‘/‘规则呈现一个’home.html’作为应用程序的入口点。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
@app.route('/)
 def home():
     return render_template('home.html')

这里是Flask-SQLite应用程序的完整代码。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by: es.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template, request
 import sqlite3 as sql
 import sqlite3
 app = Flask(__name__)
 @app.route('/)
 def home():
     return render_template('home.html')
 @app.route('/enternew')
 def new_student():
     return render_template('student.html')
 @app.route('/addrec', methods = ['POST', 'GET'])
 def addrec():
     if request.method == 'POST':
        try:
           nm = request.form['nm']
           addr = request.form['add']
           city = request.form['city']
           pin = request.form['pin']
           with sql.connect("database.db") as con:
              cur = con.cursor()
              cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?, ?, ?, ?)", (nm, addr, city, pin))
              con.commit()
              msg = "Record successfully added"
        except:
           con.rollback()
           msg = "error in insert operation"
        finally:
           return render_template("result.html", msg = msg)
           con.close()
 @app.route('/list')
 def list():
     con = sql.connect("database.db")
     con.row_factory = sql.Row
     cur = con.cursor()
     cur.execute("select * from students
     rows = cur.fetchall();
     return render_template("list.html", rows=rows)
 @app.route('/init())
 def init():
     conn = sqlite3.connect('database.db')
     print("Database opened successfully")
     conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
     print("Table created successfully")
     conn.close()
     return None
 if __name__ == '__main__':
     app.run(debug=True)

Ejecute este script desde el shell de Python y ejecute el servidor de desarrollo cuando comience. Acceda a: http:// localhost:5000/ Mostrar un menú simple en el navegador -

Hacer clic Agregar información de estudiante Se abre el formulario para agregar información de estudiante.

Complete el formulario y envíelo. La función de bajo nivel insertará este registro en la tabla de estudiantes.

Volver a la página principal y hacer clic en el enlace "Mostrar lista", se mostrará la tabla de datos de muestra.