python&&mysql

mysql 引入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--    <link rel="stylesheet" href="/static/js/jquery-3.6.0.min.js">-->
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1/css/bootstrap.css">
</head>
<body>

<div class="navbar navbar-default">
    <div class="container">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">
                <img alt="Brand" width="20" height="20"
                     src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAB+0lEQVR4AcyYg5LkUBhG+1X2PdZGaW3btm3btm3bHttWrPomd1r/2Jn/VJ02TpxcH4CQ/dsuazWgzbIdrm9dZVd4pBz4zx2igTaFHrhvjneVXNHCSqIlFEjiwMyyyOBilRgGSqLNF1jnwNQdIvAt48C3IlBmHCiLQHC2zoHDu6zG1iXn6+y62ScxY9AODO6w0pvAqf23oSE4joOfH6OxfMoRnoGUm+de8wykbFt6wZtA07QwtNOqKh3ZbS3Wzz2F+1c/QJY0UCJ/J3kXWJfv7VhxCRRV1jGw7XI+gcO7rEFFRvdYxydwcPsVsC0bQdKScngt4iUTD4Fy/8p7PoHzRu1DclwmgmiqgUXjD3oTKHbAt869qdJ7l98jNTEblPTkXMwetpvnftA0LLHb4X8kiY9Kx6Q+W7wJtG0HR7fdrtYz+x7iya0vkEtUULIzCjC21wY+W/GYXusRH5kGytWTLxgEEhePPwhKYb7EK3BQuxWwTBuUkd3X8goUn6fMHLyTT+DCsQdAEXNzSMeVPAJHdF2DmH8poCREp3uwm7HsGq9J9q69iuunX6EgrwQVObjpBt8z6rdPfvE8kiiyhsvHnomrQx6BxYUyYiNS8f75H1w4/ISepDZLoDhNJ9cdNUquhRsv+6EP9oNH7Iff2A9g8h8CLt1gH0Qf9NMQAFnO60BJFQe0AAAAAElFTkSuQmCC">
            </a>
        </div>
    </div>
</div>

<div class="container">
    <h3>{{title}}</h3>
    <table class="table table-bordered">
      <thead>
        <tr>
          <th>#</th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Username</th>
        </tr>
      </thead>
      <tbody>
      {% for item in data_list%}
        <tr>
          <th scope="row">1</th>
          <td>{{item}}</td>
          <td>Otto</td>
          <td>@mdo</td>
        </tr>
      {% endfor %}
<!--        <tr>-->
<!--          <th scope="row">1</th>-->
<!--          <td>Mark</td>-->
<!--          <td>Otto</td>-->
<!--          <td>@mdo</td>-->
<!--        </tr>-->
<!--        <tr>-->
<!--          <th scope="row">2</th>-->
<!--          <td>Jacob</td>-->
<!--          <td>Thornton</td>-->
<!--          <td>@fat</td>-->
<!--        </tr>-->
<!--        <tr>-->
<!--          <th scope="row">3</th>-->
<!--          <td>Larry</td>-->
<!--          <td>the Bird</td>-->
<!--          <td>@twitter</td>-->
<!--        </tr>-->
      </tbody>
    </table>
</div>

<script src="/static/plugins/bootstrap-3.4.1/js/bootstrap.js"></script>
</body>
</html>


能做数据的存储:txt文件 excel文件但是效果不高
专业存储数据的软件:数据库管理系统

  • mysql oracle sqlserver DB2 Access

mysql 概要

安装mysql


我们实验用5.7.31 版本的

下载

官方网站 https://downloads.mysql.com/archives/community/
注windows 安装的话,还需要安装补丁,并且先安装

windows 安装补丁

安装


这个 是一个免安装版本,直接解压,并放到一个目录。(不要有中文路径)

创建配置文件

注:放在mysql 解压后的目录下

初始化

  • 打开终端,并且以管理员的权限运行
  • 输入初始化的命令

    注:加引号是命令中可能有空格,初始完后会在目录下面生成一个data的目录

启动mysql

有两种方式 1. 临时启动 2. 制作成windows服务
临时启动

注:不推荐,黑框不能关,如果关了,mysql服务就停了
制作mysql windows服务

命令服务操作

连接测试




设置密码


set password = password("root123");

查看已有的数据库

退出

exit;

忘记密码

  1. 关闭mysql 服务

  2. 修改配置文件,改为无帐号启动模式

  3. 重新启动

  4. 登陆修改为新密码

  5. 取消无帐号模式,再重新启动

mysql 指令

Mysql 认知
数据库 文件夹
数据表 文件(excel文件)

数据库管理(文件夹)

show databases;   #查看数据库命令
create database 数据库名  default charset utf8 COLLATE utf8_general_ci;  # 创建数据库
drop database;数据库名 #删除数据库
use 数据库名字; #进入数据库
show tables; # 查看数据库中的数据表 

数据表的管理(文件)

show databases;
use 数据库;
show tables;
create table 表名称(
列名称 类型,
列名称 类型,
列名称 类型,
) default charset=utf8;

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

create table tb1(
id int,
name varchar(16) not null,   #不允许为空
age int null default 3         #默认值为3 允许为空
) default charset=utf8;


create table tb1(
id int primary key,  #主键(不允许为空,不能重复)
name varchar(16),
age int
) default charset=utf8;
主键一般用于当前行的数据编号,类似于身份证号码。



create table tb1(
id int auto_increment primary key,  #内部维护自增
name varchar(16),
age int
) default charset=utf8;

一般情况下创建表时都这样来写

mysql 数据表常用的数据类型

  • tinyint

有符号:0~255
无符号:-128~127
默认是有符号的,设置无符号时看下面语句

  • int

有符号:-2147483648~2147483647
无符号:0~2147483647

  • bigint

有符号:-9223372036854775808~9223372036854775807
无符号:0~18446744073709551615

练习

# 创建数据表
create table tb2(
id bigint not null auto_increment primary key,
salary int,  -- test
age tinyint
) default charset=utf8;

# 插入数据
insert into tb2(salary,age) values(10000,18);
insert into tb2(salary,age) values(20000,28),(40000,40);

  • float
  • double
  • decimal
准确的小数值,m是数数总个数(负号不算),d是小数点后面的个数,m最大值为65,d最大值为30
例如
system clear --数据库里面清屏
create table tb3(
id bigint not null auto_increment primary key,
salary decimal(8,2)  -- 数据总共8位,小数点后占两位
) default charset=utf8;


注:超过小数位数为四舍五入

  • char

定长字符串 查询速度快 固定长度一般用,比如密码 手机号
最多可容纳255个字符
char(11) 固定用11个字符进行存储,哪怕没有11个字符,也会占用11个字符进行存储
create table tb4(
id int not null auto_increment primary key,
mobile char(11)
) default charset=utf8;

  • varchar 节省空间

变长字符串
最大65535个字节,如果是中文的话为65535/3
create table tb5(
id int not null auto_increment primary key,
mobile varchar(11)
) default charset=utf8;

  • text

可容纳65535个字符,
create table tb6(
id int not null auto_increment primary key,
content text
) default charset=utf8;

  • mediumtext
  • longtext
  • datetime
  • date

练习题:用户表

## 创建表
create table tb7(
id int not null primary key auto_increment,
name varchar(64) not null,
password char(64) not null,
age tinyint,
salary decimal(10,2),
ctime datetime
) default charset=utf8;

insert into tb7(name,password,age,salary,ctime) values("lifei","lifei","35","1000.3","2023-11-08 10:03:00");

其它数据类型

我们开发系统时
创建数据库和表结果都是通过表结构进行创建的

数据行操作

1.新增数据

2. 删除数据

3. 修改数据

4. 查询数据

小结

案例 员工管理

  • 使用mysql 内置工具(命令)
    • 创建数据库:unicom
    • 创建数据表:admin

id,整型,自增,主键 
username 字符串,不为空
password 字符串,不为空
mobile 字符串,不为空

create database unicom default charset utf8 COLLATE utf8_general_ci;
create table admin(
id int not null primary key auto_increment,
username varchar(64) not null,
password char(64) not null,
mobile char(11) not null
) default charset=utf8;
  • python 代码实现注册:
    • 注册用户
    • 删除用户
    • 查看用户
    • 更新用户信息

依赖于第三方模块 pymysql
pip install pymysql

新增数据

import pymysql
# 连接mysql
conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 发送指令
cursor.execute("insert into admin(username,password,mobile) values('lifei','lifei','18988888888')")
conn.commit()
# 关闭连接
cursor.close()
conn.close()

动态插入数据的正确做法

import pymysql
# 连接mysql
conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 发送指令
# 千万别用字符串格式做去做拼接,有安全隐患容易被sql注入
# sql="insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql,['葛爱清','zhaobo','18888888888'])

sql="insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql,{"n1":"zhaobo","n2":"123","n3":"16666666666"})
conn.commit()

# 关闭连接
cursor.close()
conn.close()

查询数据

import pymysql
# 连接mysql
conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 执行查询指令

# sql="insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql,['葛爱清','zhaobo','18888888888'])


cursor.execute("select * from admin where id<%s",[10])
# datalist=cursor.fetchone()  获取符合条件的第一条数据

datalist=cursor.fetchall()  #获取符合条件的所有数据
print(datalist)
# conn.commit()
for rowdict in datalist:
    print(rowdict)

# 关闭连接
cursor.close()
conn.close()

删除数据

import pymysql
# 连接mysql
conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 发送指令
# 千万别用字符串格式做去做拼接,有安全隐患容易被sql注入
# sql="insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql,['葛爱清','zhaobo','18888888888'])

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

# 关闭连接
cursor.close()
conn.close()

修改数据

import pymysql
# 连接mysql
conn=pymysql.connect(host="127.0.0.1",user="root",password="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 发送指令
# 千万别用字符串格式做去做拼接,有安全隐患容易被sql注入
# sql="insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql,['葛爱清','zhaobo','18888888888'])

cursor.execute("update admin set mobile=%s where id=%s",['14088888888','114'])
conn.commit()

# 关闭连接
cursor.close()
conn.close()


案例:flask + mysql
配置文件截图

app.py

from flask import Flask,render_template,request
import pymysql
app=Flask(__name__)

@app.route("/show/user")
def show_user():
    conn = pymysql.connect(host="127.0.0.1", passwd="123456", port=3306, user="root", db="unicom", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute("select * from admin")
    data_list = cursor.fetchall()
    cursor.close()
    conn.close()
    return render_template("show_user.html",data_list=data_list)

@app.route("/add/user",methods=['GET','POST'])
def add_user():
    if request.method=='GET':
        return render_template("add_user.html")
    print(request.form)
    username=request.form.get("user")
    password=request.form.get("pwd")
    mobile=request.form.get("mobile")



# 连接mysql
    conn=pymysql.connect(host="127.0.0.1",passwd="123456",port=3306,user="root",db="unicom",charset="utf8")
    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
    print(username, password, mobile)


# 拼接mysql
#     sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
#     cursor.execute(sql, {"n1": "zhaobo", "n2": "123", "n3": "16666666666"})
    cursor.execute('insert into admin(username,password,mobile) values(%s,%s,%s)', [username, password, mobile])
    conn.commit()

# 关闭连接
    cursor.close()
    conn.close()

    return "添加成功"
if __name__ == '__main__':
    app.run()

add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>增加帐号</title>
</head>
<body>
<h1>添加用户</h1>
<form method="post" action="/add/user">
    <input type="text" name="user" placeholder="用户名">
    <input type="text" name="pwd" placeholder="密码">
    <input type="text" name="mobile" placeholder="手机号">
    <input type="submit" value="提 交">

</form>
</body>
</html>

show_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1/css/bootstrap.css"></link>
</head>
<body>

<h1 style="text-align: center;width: 100%;display: inline-block">用户信息查看</h1>
<div class="container">
<table class="table table-bordered">
    <thead>
    <tr>
        <th>用户名</th>
        <th>密码</th>
        <th>手机号</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>
</body>

</html>
posted @ 2023-11-07 15:09  lifei888  阅读(11)  评论(0)    收藏  举报