简介

结构

$ tree -I "__pycache*|*.pyc" -FCL 3
.
|-- database.db
|-- models.py
|-- templates/
| |-- home.html
| |-- list.html
| |-- result.html
| `-- students.html
`-- views.py

展示

1. 主页

2. 学生信息查看

3. 添加学生信息

技术

  • Flask – SQLite的使用
  • flask中表单数据的传递

运行

python .\views.py

代码

创建数据库表单

# crdb.py

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()

views视图

from flask import Flask, render_template, request
import sqlite3 as sql app = Flask(__name__) @app.route('/')
def home():
return render_template('home.html') @app.route('/enternew')
def new_student():
return render_template('students.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 = "添加成功"
except:
con.rollback()
msg = "添加失败" 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) if __name__ == '__main__':
app.run(debug=True)

models模块

import sqlite3 as lite

class Database():

    def __init__(self, db='database.db'):

        self.con = lite.connect(db, check_same_thread=False)
self.cur = self.con.cursor() def create_students(self):
"""创建表单"""
with self.con:
sql = """create table students(
id integer primary key autoincrement,
name TEXT not null,
addr TEXT not null,
city TEXT,
pin TEXT)"""
self.cur.execute("DROP TABLE IF EXISTS students")
self.cur.execute(sql) def insert_students(self, name, addr, city, pin):
"""插入用户信息"""
with self.con:
sql = "INSERT INTO students(name, addr, city, pin) VALUES(?, ?, ?, ?)"
self.cur.execute(sql, (name, addr, city, pin)) if __name__ == '__main__':
db = Database('database.db')
db.create_students()

home主页

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>主页</title>
</head>
<body>
<h1><a href = "/list">查看学生信息</a></h1> <br>
<h1><a href = "/enternew">添加学生信息</a></h1>
</body>
</html>

list列表页

<!doctype html>
<html>
<body>
<h1>学生表</h1>
<hr>
<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>
<br>
<a href = "/">返回主页</a>
</body>
</html>

result消息结果页

<!doctype html>
<html>
<body>
<h3>添加结果 : {{ msg }}</h3><br>
<h2><a href = "\">返回主页</a></h2>
</body>
</html>

studentst添加成员

<html>
<body>
<form action = "{{ url_for('addrec') }}" method = "POST">
<h3>学生信息</h3>
姓名<br>
<input type = "text" name = "nm" /></br><br> 地址<br>
<textarea name = "add" ></textarea><br><br> 城市<br>
<input type = "text" name = "city" /><br><br> 区号<br>
<input type = "text" name = "pin" /><br><br> <input type = "submit" value = "输入" /><br>
</form>
</body>
</html>

Flask – SQLite:增加成员的更多相关文章

  1. 为什么 Category 不能增加成员变量-nonfragile

    三.既然是 non-fragile ivars,为什么 Category 不能增加成员变量?     看过一些资料,理由并不是很让人信服.我觉得并不是做不到,只是现在没有做,现在不支持.我在 Opti ...

  2. 给 Qt sqlite 增加加密功能

    整合sqlite代码 开源的sqlite中没有实现加密的功能,所以如果需要加密功能,需要自己实现 sqlite3_keysqlite3_rekey 等相关函数 不过开源的 wxsqlite3中已经实现 ...

  3. iOS运行时,如何增加成员变量

    必须实现getter和setter方法 ``` - (void)setName:(NSString *)name { /** * 为某个类关联某个对象 * * @param object#> 要 ...

  4. android数据库sqlite增加删改查

    http://hi-beijing.iteye.com/blog/1322040 http://www.cnblogs.com/wenjiang/archive/2013/05/28/3100860. ...

  5. sqlite 增加字段语句

    ALTER TABLE `table1` ADD `AAAA` VARCHAR( 10 ) NOT NULL ; ALTER TABLE 'IPC_FGUID' ADD 'iPassageway' V ...

  6. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

  7. [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程

    鉴于网上关于flask-SQLAlchemy的实例使用教程参差不齐,于此写下工作学习过程中的使用过程,以便分享交流. 对于python关于flask有一定了解的高端玩家来说,请转至flask官方开发文 ...

  8. Flask学习之旅--数据库

    一.写在前面 在Web开发中,数据库操作是很重要的一部分,因为网站的很多重要信息都保存在数据库之中.而Flask在默认情况下是没有数据库.表单验证等功能的,但是可以用Flask-extension为W ...

  9. 实验3、Flask数据库操作-如何使用Flask与数据库

    1. 实验内容 数据库的使用对于可交互的Web应用程序是极其重要的,本节我们主要学习如何与各种主要数据库进行连接和使用,以及ORM的使用 2. 实验要点 掌握Flask对于各种主要数据库的连接方法 掌 ...

随机推荐

  1. C++数组或vector求最大值最小值

    可以用max_element()及min_element()函数,二者返回的都是迭代器或指针. 头文件:#include<algorithm> 1.求数组的最大值或最小值 1)vector ...

  2. OCCT 7.4.0 beta version is available

    OpenCASCADE 7.4.0测试版本发布 OCC在9月16号发布了opencascade740 beta测试版本,新版本里面做了如下一些重点修改如下: 造型算法部分主要对网格化算法BRepMes ...

  3. 图解SQL的Join

    原文地址:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的 ...

  4. 左神算法书籍《程序员代码面试指南》——1_01设计一个有getMin功能的栈

    [题目] 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. [要求] 1.pop.push.getMin操作的时间复杂度都是O(1).2.设计的栈类型可以使用现成的栈结构. ...

  5. 网络爬虫技术Jsoup

    Jsoup介绍:Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址.HTML文本内容 Jsoup主要有以下功能: 1. 从一个URL,文件或字符串中解析HTML 2. 使用D ...

  6. springboot思维导图

  7. 6.Spring【AOP】XML方式

    1.AOP术语 1. Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点 2. Pointcut(切入点):所谓切 ...

  8. QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: 设备上没有空间

    解决办法: 添加最大监控文件数量 临时解决:(重启之后恢复) 命令设置:sudo sysctl fs.inotify.max_user_watches=524288 生效: sudo sysctl - ...

  9. mysql高级教程(二)-----性能分析

    MySQL常见瓶颈 1.cpu SQL中对大量数据进行比较.关联.排序.分组 2.IO a.实例内存满足不了缓存数据或排序等需要,导致产生大量物理 IO. b.查询执行效率低,扫描过多数据行. 3.锁 ...

  10. gin框架中间件

    1. Gin框架中间件Gin框架中间件A. Gin框架允许在请求处理过程中,加入用户自己的钩子函数.这个钩子函数就叫中间件B. 因此,可以使用中间件处理一些公共业务逻辑,比如耗时统计,日志打印,登陆校 ...