文章目录
一、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>