flask+sql学习记录


一、MySQL

前端开发:HTML、CSS、js,jq(静态页面)
java+前端,python+前段,go+前端
直观:

  • 静态,永远不变
  • 动态。页面上的数据可以实时修改和展示

1.1初识网站

默认编写静态效果
d动态:用到web框架的功能
在这里插入图片描述
txt和excel文件并发性差,访问速度慢
使用专业的软件:数据库管理系统
such as:mysql(*免费)
/oracle.sqlserver/db2/access


需要学习
1mysql安装&配置
启动和关闭
指令
python第三方模块,发送指令获取mysql返回的结果

flask框架下前后端逻辑简图

这是flask框架下前后端的逻辑简图,用户通过浏览器向url发送请求,url对应的函数处理请求,将数据库中的内容填入html的占位符中,因为数据库中的内容是动态的,所以此时页面是动态的。函数将整合后的html返回给浏览器,从而用户可以通过浏览器浏览数据,js的解释器可以理解为浏览器。

安装mysql

这个我提前做过了,网上的文档很多,不多赘述

1.2mysql指令

mysql中的术语
mysql中 认知
数据库 文件夹
数据表 文件

创建数据库

登陆数据库
mysql -u root -p
 查看已有数据库
 show databases;
CREATE DATABASE 名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE gx_day14 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
删除
drop gx_day14;
use gx_day14;
show tables;

数据表管理

进入数据库
use   name;
查看所有表
show tables;
创建表
create table name(
列名称 类型,
列名称 类型,
列名称 类型,
)default charset=utf8;

create table tb1(
id int,
name varchar(16),
age int)default charset=utf8;

标准创建表
create table tb1(
id int not null auto_increment primary key,--主键,不允许重复,学过数据库的不用多说了吧,一般都有自增
name varchar(16) not null,不允许为空,默认允许
age int default 3 age默认为3
)default charset=utf8;

create table tb2(
id int not null auto_increment primary key,
age  tinyint  unsigned
)default charset=utf8;

删除表
drop table name;
desc tablename;展示一下表的描述信息

常用数据类型
int 4字节
tinyint 范围,有符号-128~127或者,无符号0~255,默认不确定,想要无符号如int unsigned
bigint

操作
create table tb2(
id bigint not null auto_increment primary key,
salary int,
age  tinyint  unsigned
)default charset=utf8;
insert into tb2(salary,age) values(10000,18),(20000,28),(30000,38);

其他数据类型
float
double
decimal

decimal准确的小数值,m是数字总个数(负号不算),d是小数点后个数,m最大65,d最大为30
例如
create table tb3(
id bigint not null auto_increment primary key,
salary decimal(8,2)
)default charset=utf8;

insert into tb3(salary) values(1.28,);小数点前面不能超过6位


字符串
char 定长  char(11),不够11也按11存储。最多255字符
varchar 变长最大65535字节
text 最长65535字符
下面两个最大长度更大
mediumtext
longtext

datetime
年月日时分秒
date
年月日


练习
create table tb7(
id bigint not null auto_increment primary key,
name varchar(64) not null,
password char(64) not null,
email char(64) not null,
age tinyint unsigned,
salary decimal(10,2),
ctime datetime
)default charset=utf8;

insert into tb7(name,password,email,age,salary,ctime) values("王泓一","123456","xxx@live.com",23,1000.20,"2000-11-11 12-11-11");


数据行操作

1新增 
insert into table(列名称) values(值,值);
insert into table(列名称,列) values(值,值),(值,值),(值,值),(值,值);
insert into tb7(name,password,email,age,salary,ctime) values("武忠祥","123456","xxx@live.com",23,1000.20,"2000-11-11 12-11-11"),("张宇","123456","xxx@live.com",23,1000.20,"2000-11-11 12-11-11");

2删除数据

delete from 表明;
delete from name where 条件;
例如,delete from tb7 where id=5;delete from tb7 where id>=4;
id in(1,5)把1和5删除
3修改数据

update name set=值,列=值 where 条件;
update tb7 set password="hhh";
update tb7 set email='哈哈哈' where id in(1,4);
update tb7 set age=age+1 where id >=2;

4查询数据
select from where
select 列名称,列 from where表;

 

小结

创建数据库和表结构是需要提前做的,表中的数据一般通过程序增删查改。

案例:员工管理

使用mysql内置工具
数据库:unicom
表:admin
admin:
列:
id,整形,自增,主键
username 字符串 不空,
password 字符串 不空
mobile 字符串 不空


python实现:
添加用户
删除用户
查看用户
更新用户信息

CREATE DATABASE unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use unicom
 create table admin(
     id int not null auto_increment primary key,
     username varchar(30) not null,
     password varchar(30) not null,
     mobile varchar(30) not null)*default charset=utf8;*重要
     
show tables;

python操作连接mysql

创建数据

pip install pymysql

import pymysql
while True:
    user=input("用户名:")
    if user=="Q":
        break
    pwd=input("密码:")
    mobile=input("手机号:")
    #1.创建连接
    conn=pymysql.connect(host="127.0.0.1",port=3306,user='root',passwd='123456',charset='utf8',db='unicom')
    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

    #2.发送指令
    #千万不要用字符串格式化去做sql的拼接,安全隐患sql注入
    #cursor.execute("insert into admin(username,password,mobile) values('王泓一','22222','17731931981')")
    #应该用sql内部提供的字符串格式化方式

    # sql="insert into admin(usernaem,password,mobil) values(%s,%s,%s)"
    # cursor.execute(sql,['王泓一','22222','17731931981'])

    #也可以
    sql="insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
    cursor.execute(sql,{"n1":user,"n2":pwd,"n3":mobile})
    conn.commit()
    #3.关闭
    cursor.close()
    conn.close()

查询数据

注意.py的命名不能为select,这样会使得python文件导入包错误

import pymysql

# 1.创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令

cursor.execute("select * from admin where id> %s", [1, ])
data_list = cursor.fetchall()#这里也可以是fetchone,获取下一条数据
for item in data_list:
    print(item)

# 3.关闭
cursor.close()
conn.close()

删除数据
import pymysql

# 1.创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令

cursor.execute("delete from admin where id< %s", [3, ])
conn.commit()

# 3.关闭
cursor.close()
conn.close()

修改数据
import pymysql

# 1.创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令

cursor.execute("select * from admin where id> %s", [1, ])
data_list = cursor.fetchall()
print(data_list)
for item in data_list:
    print(item)

# 3.关闭
cursor.close()
conn.close()

强调,在执行创建删除修改的时候,记得commit,而查询的时候需要fetchall/fetchone
而且对于sql语句不要用python的字符串格式化进行拼接(会被sql注入),要用execute+参数

二、flask+前端+sql

1将浏览器上input输入框中的文字信息存入数据库

from flask import Flask,render_template,request
import pymysql
app=Flask(__name__)
@app.route("/add/user",methods=["GET","POST"])
def add_user():
    if request.method=="GET":
        return render_template("add_user.html")
    user=request.form.get("user")
    pwd=request.form.get("pwd")
    mobile=request.form.get("mobile")
    # 1连接sql
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 2执行
    sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
    cursor.execute(sql,[user,pwd,mobile])
    conn.commit()
    #3关闭
    cursor.close()
    conn.close()
    return "添加成功"
if __name__ == '__main__':
    app.run()```
```bash
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/add/user" method="post">
    <input type="text" placeholder="用户名" name="user">
    <input type="text" placeholder="密码" name="pwd">
    <input type="text" placeholder="电话" name="mobile">
    <input type="submit" value="提 交">
</form>
</body>
</html>

2show_我们亲爱的user们

flask的app.py

from flask import Flask,render_template,request
import pymysql
app=Flask(__name__)
@app.route("/add/user",methods=["GET","POST"])
def add_user():
    if request.method=="GET":
        return render_template("add_user.html")
    user=request.form.get("user")
    pwd=request.form.get("pwd")
    mobile=request.form.get("mobile")
    # 1连接sql
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 2执行
    sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
    cursor.execute(sql,[user,pwd,mobile])
    conn.commit()
    #3关闭
    cursor.close()
    conn.close()
    return "添加成功"

@app.route("/show/user")
def show_user():
    # 1.创建连接
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='123456', charset='utf8', db='unicom')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 2.发送指令
    cursor.execute("select * from admin")
    data_list = cursor.fetchall()
    print(data_list)
    # 3.关闭
    cursor.close()
    conn.close()

    return render_template("show_user.html",data_list=data_list)
if __name__ == '__main__':
    app.run()

模版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
     <link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1-dist/css/bootstrap.css">
</head>
<body>
<div class="container">
<h1>用户列表</h1>
<table class="table-bordered" >
    <thead>
    <tr>
        <th>id</th>
        <th>user</th>
        <th>pdw</th>
        <th>mobile</th>
    </tr>
    </thead>
    <tbody>


    {% for item in data_list %}
    <tr>
        <td>{{item.id}}</td>
        <td>{{item.username}}</td>
        <td>{{item.password}}</td>
        <td>{{item.mobile}}</td>
    </tr>
    {% endfor %}

    </tbody>
</table>
    </div>
<script src="/static/js/jquery-3.7.1.min.js"></script>
<script src="/static/plugins/bootstrap-3.4.1-dist/js/bootstrap.js"></script>
</body>
</html>
  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值