前端+数据库+djago入门(数据库部分)

软件: mysql 社区版

安装

补丁下载

在微软官网下载 vc redist.x64与dxwebsetup软件并安装。如果vc软件安装失败,并提示已经有另一版本的软件已安装,可不安装

mysql安装

  • 将mysql解压到纯英文文件夹中,创建my.ini文件(见附件)
  • 初始化mysql 

已管理员身份运行cmd,输入下列内容运行即可

"C:\mysql-8.2.0-winx64\bin\mysqld.exe"  --initialize-insecure

成功会在mysql文件夹中创建data文件夹。

mysql的启动

将Mysql制作成windows服务

cmd已管理员运行下列内容来制作服务

"C:\mysql-8.2.0-winx64\bin\mysqld.exe"  --install mysql11 #(后面的mysql11可以自己随意写)

启动服务
cmd已管理员运行下列内

net start mysql11

关闭服务

net stop mysql11z

用任务管理器打开或关闭服务 

mysql连接

用cmd 方式将mysql与电脑连接

 C:\mysql-8.2.0-winx64\bin\mysql.exe

安装文件夹下的mysql.exe 

cmd管理员运行

"C:\mysql-8.2.0-winx64\bin\mysql.exe"  -h 127.0.0.1(连接本地电脑) -p 3306 (在my.ini配置文件夹中定义的端口) -u root(用户) -p (密码)

"C:\mysql-8.2.0-winx64\bin\mysql.exe"  -h 127.0.0.1 -p 3306  -u root -p

用环境变量快速启动Mysql

将路径添加到环境变量

"C:\mysql-8.2.0-winx64\bin\mysql.exe"

将路径添加到环境变量,就会简化为

mysql -u root -p

设置密码

set password = password("root123")

查看现在已有文件夹(数据库)

连接mysql后输入show databases; (注意分号是必须的)

 退出/关闭连接

输入exit;

忘记muysql密码

  • 关闭Mysql服务
  • 修改配置文件(安装目录下的main.ini),添加一句

 

  •  重新启动Mysql 服务
  • 在cmd中重新登录mysql(无需密码)
  • 重新设置密码

分别在cmd中运行下列两行命令

use mysql;

update user set authentication_string = password('新密码‘), password_last_changed = now() where user = 'root;

  • 重修修改配置文件(以需密码的形式登录)

首先在任务管理器关闭mysql服务,之后在mysql安装目录下的配置文件,直接删掉刚添加的最后一行,并保存。

  • 重新启动mysql服务

MySQL指令

数据库的管理

创建数据库

create database  数据库名字 DEFAULT CHARSET utf8 COLLATE 

utf8_general_ci;

删除数据库

drop databse 数据库名字;

进入数据库(进入文件夹)

use xxx; (xxx:数据库名称)

查看数据库下的所有数据表(文件)

show tables;

数据表的管理

创建表

create table 表名称(

        列名称 类型,

        列名称 类型,

        列名称 类型,

        ...

)default charset = utf-8;

案例: 在数据库下创建一个数据表

create table b1(id int, name varchar(16), age int) default

 charset=utf8;

表格中设定默认值

create table b1(

id int,

name varchar(16),

age int default 3 // 设定默认值是3

) default charset=utf8;

加入主键

create table b1(

id int primary key,   //主键(不允许为空,不允许重复)

name varchar(16),

age int default 3 // 设定默认值是3

) default charset=utf8;

主键一般表示当前行的数据编号

让主键自增

create table b1(

id int auto_increment primary key,   //主键(不允许为空,不允许重复)

name varchar(16),

age int default 3 // 设定默认值是3

) default charset=utf8;

// 下面为纯代码

create table b1(

id int auto_increment primary key,   

name varchar(16),

age int default 3 

) default charset=utf8;

删除表

drop table 表名称,

展示表的具体内容

desc 表名称;

数据库常见数据类型
  •  tinyint 

有符号,取值范围:-128~127(有正有负)【默认】

无符号,取值范围:0~255 (只有正)【默认】

create table b1(

id int auto_increment primary key,   

name varchar(16),

age tinyint -- 有符号,取值范围:-128~127

) default charset=utf8;

create table b1(

id int auto_increment primary key,   

name varchar(16),

age tinyint unsigned -- 无符号:取值范围: 0~255

) default charset=utf8;

  • int

int      有符号,取值范围:-2147483648 ~ 2147483647

int unsigned  无符号,取值范围:0~ 4294967295

  • bigint

bigint      有符号,取值范围:-922337203654775808 ~ 922337203654775808

bigint unsigned  无符号,取值范围:0~ 18446744073709551615

案例:简历表格并插入数据

create table tb2(

id bigint not null auto_increment primary key,

salary int, age tinyint

) default charset=utf8;

插入数据

insert into tb2(salary,age) values(10000,18);

insert into tb2(salary,age) values(10000,18), (20000,30); //表示插入了两行数据

查看表中的数据 

select * from tb2;

  • float
  • double
  • decimal

decimal表示准确的小数值,m是数字总个数(负号不算),d是小数点后个数。m最大值为65,d最大值为30.

create table tb2(

id bigint not null auto_increment primary key,

salary decimal (8,2)  //这就表示总共有8个数字,小数点后有两位数字

) default charset=utf8;

  • char

定长字符串, 最多可以容纳255个字符

create table tb3(

id bigint not null auto_increment primary key,

mobile char(11) //固定使用11个字符存储,哪怕没有用11个字符,也会按照11个字符存储

) default charset=utf8;

  • varchar

变长字符串, 最大‘65535个字节

create table tb4(

id bigint not null auto_increment primary key,

mobile varchar(11) //按真实数据的长度进行存储。

) default charset=utf8;

  • text

变长字符串, 最大65535(2的16次方减1)个字符。一般情况下,长文本会用text类型,例如:文章,新闻等

create table tb5(

id int not null auto_increment primary key,

title varchar(128),

content text

) default charset=utf8;

  • mediumtext
  • longtext
  • data

YYYY-MM-DD (1000-01-01/9999-12-31)

练习:创建用户表

create table tb6(

id int not null auto_increment primary key,

name varchar(64) not null,

password char(64) not null,

email varchar(64) not null,

age tinyint, 

salary decimal(10,2),

ctime datetime

) default charset=utf8;

插入数据:

insert into tb6(name,password,email,age,salary,ctime) value("bruce","123","bruce@qq.com",20,10000.10,"2024-1-15 19:51:00");

数据行操作

新增数据

insert into  表名(列名,列名) value (值,值);

删除数据

delete from  表名; //删掉整张表

delete form 表名 where 条件;

Notes: mysql数据表的增删查改建议买一本工具书粗略看看,可以再去牛客网的在线练习实操一段时间,就能有一定进步。

修改数据

update 表明 set 列=值;

案例:员工管理(结合python)

利用Python实现查看,更改,查删。

创建管理员表

create table admin(

id int not null auto_increment primary key,   

username varchar(64) not null,

password varchar(64) not null,

mobile varchar(64) not null

) default charset=utf8;

用python操作数据表
import pymysql

# 链接mysql

conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令

cursor.execute("insert into admin(username,password,mobile) values ('bruce','bruce123','123456780')")
conn.commit()

# 3. 关闭链接
cursor.close()
conn.close()
让用户输入值来传递到数据库中  
注意点:为什么最后面的q会替换上一行的用户名

这一整个代码是while循环语句,所有在while后面的代码都要首行缩进。

import pymysql

while True:
    user = input("用户名:")
    if user.upper() == 'Q':
        break
    pwd = input("password:")
    mobile = input("手机号:")

# 链接mysql

    conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令 (千万不能用字符串格式化去做SQL的拼接,有安全隐患,SQL的注入风险),可用下面的两种方法方法

# 第一种
# sql = "insert into admin(username,password,mobile) values (%s,%s,%s)"
# cursor.execute(sql, ["bru","bruce123","124353245"])

# 第二种
    sql = "insert into admin(username,password,mobile) values (%s,%s,%s)"
    cursor.execute(sql, [user,pwd,mobile])

    conn.commit()

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

 错误示例(输入的用户名会被Q替代)

import pymysql

while True:
    user = input("用户名:")
    if user.upper() == 'Q':
        break
    pwd = input("password:")
    mobile = input("手机号:")

# 链接mysql

conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令 (千万不能用字符串格式化去做SQL的拼接,有安全隐患,SQL的注入风险),可用下面的两种方法方法

# 第一种
# sql = "insert into admin(username,password,mobile) values (%s,%s,%s)"
# cursor.execute(sql, ["bru","bruce123","124353245"])

# 第二种
sql = "insert into admin(username,password,mobile) values (%s,%s,%s)"
cursor.execute(sql, [user,pwd,mobile])

conn.commit()

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

注意点, (2003, "Can't connect to MySQL server on 'locost'

如果出现报错,比如:OperationalError.(1049,"Unkonwm databases 'unicom'"),或者pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'locost' ([Errno 11001] getaddrinfo failed)")或者是IP地址,“127.0.0.1”之类,可以尝试改成上面的代码。

查询数据

import pymysql

# 链接mysql

conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令 (千万不能用字符串格式化去做SQL的拼接,有安全隐患,SQL的注入风险),可用下面的两种方法方法

# 第二种
cursor.execute("select * from admin where id > 2")
data_list = cursor.fetchall()
for row_dict in data_list:
    print(row_dict)

 删除数据

import pymysql
# 链接mysql

conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令 (千万不能用字符串格式化去做SQL的拼接,有安全隐患,SQL的注入风险),可用下面的两种方法方法

# 第二种
cursor.execute("delete from admin where id=%s or id=%s", [4,9])
conn.commit()
# 3. 关闭链接
cursor.close()
conn.close()

修改数据 

import pymysql
# 链接mysql

conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令 (千万不能用字符串格式化去做SQL的拼接,有安全隐患,SQL的注入风险),可用下面的两种方法方法

# 第二种
cursor.execute("update admin set mobile=%s where id=%s",["1888883737383",5])
conn.commit()
# 3. 关闭链接
cursor.close()
conn.close()

案例: web页面与用户数据交互

1. 用flask搭建web页面

需要在项目文件夹中,建立templates文件夹,html文件放在该文件夹下

from flask import Flask, render_template

app = Flask(__name__)


@app.route("/add/user")
def add_user():
    return render_template("add_user.html")


if __name__ == '__main__':
    app.run()
<body>
<h1>添加用户</h1>
<from>
    <input type="text" name="user" placeholder="用户名">
    <input type="text" name="pwd" placeholder="密码">
    <input type="text" name="mobile" placeholder="手机号">
    <input type="submit" value="提交">
    
</from>



</body>
</html>
2. 获取用户输入的信息

这时用户输入在网页中的信息会被抓取

from flask import Flask, render_template, request

app = Flask(__name__)


@app.route("/add/user", methods=["GET", "POST"])
def add_user():
    if request.method == "GET":
        return render_template("add_user.html")

    username = request.form.get("user")
    password = request.form.get("pwd")
    mobile = request.form.get("mobile ")

    return "添加成功"



if __name__ == '__main__':
    app.run()
<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>

3. 将用户输入的信息写道mysql中

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

    username = request.form.get("user")
    password = request.form.get("pwd")
    mobile = request.form.get("mobile")

    # 1. 链接mysql
    conn = pymysql.connect(host="localhost", port=3306, user="root", password="", charset='utf8', db='bruce')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    # 2. 执行sql
    sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
    cursor.execute(sql, [username, password, mobile])
    conn.commit()

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

    return "添加成功"


if __name__ == '__main__':
    app.run()
Notes: 在实操中,提交后页面反馈服务器错误
username = request.form.get("user")
password = request.form.get("pwd")
mobile = request.form.get("mobile ")

        上面的代码时源程序中的一段,因为在mobile后面多了一个空格,程序会从网页中获取“mobile带空格”这个输入框的值,但实际没有这个输入框,就会产生一个null值给到mobile变量。之后的程序将mobile变量的null值写道sql的mobile列中,但是这个列不允许错误,就会报错。

        加上程序并没有错误异常处理的功能,就会报这个错误。下面是改善的程序

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

    username = request.form.get("user")
    password = request.form.get("pwd")
    mobile = request.form.get("mobile")

    try:
        # 1. 链接mysql
        conn = pymysql.connect(host="localhost",port=3306, user="root", password="", charset='utf8', db='bruce')
        with conn.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
            # 2. 执行sql
            sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
            cursor.execute(sql, [username, password, mobile])
            conn.commit()
        return "添加成功"
    except Exception as e:
        return str(e), 500  # 返回错误信息和500内部服务器错误状态码
    finally:
        conn.close()  # 确保连接被关闭,无论是否发生异常

if __name__ == '__main__':
    app.run()
3. 写入与查询所有数据
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")

    username = request.form.get("user")
    password = request.form.get("pwd")
    mobile = request.form.get("mobile")

    try:
        # 1. 链接mysql
        conn = pymysql.connect(host="localhost",port=3306, user="root", password="", charset='utf8', db='bruce')
        with conn.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
            # 2. 执行sql
            sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
            cursor.execute(sql, [username, password, mobile])
            conn.commit()
        return "添加成功"
    except Exception as e:
        return str(e), 500  # 返回错误信息和500内部服务器错误状态码
    finally:
        conn.close()  # 确保连接被关闭,无论是否发生异常

@app.route("/show/user")
def show_user():
    try:
        # 1. 链接mysql
        conn = pymysql.connect(host="localhost",port=3306, user="root", password="", charset='utf8', db='bruce')
        with conn.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
            # 2. 执行sql
            sql = "select * from admin"
            cursor.execute(sql)
            data_list = cursor.fetchall()
            print(data_list)
        return render_template('show_user.html', data_list = data_list)
    except Exception as e:
        return str(e), 500  # 返回错误信息和500内部服务器错误状态码
    finally:
        conn.close()  # 确保连接被关闭,无论是否发生异常



if __name__ == '__main__':
    app.run()

新建名为show_user.html文件 

<body>

    <h1>用户列表</h1>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <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>

</body>

  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值