武沛齐Django web学习(二) -MySQL

2. MySQL

1. 安装MySQL(5.7.31)

MySQL本质就是一个软件

MySQL :: Download MySQL Community Server (Archived Versions)

创建配置文件

在目录中创建一个my.ini配置文件

 [mysqld]

# port

# set basedir to your installation path
basedir=D:\\Code\\mysql-5.7.31-winx64

# ser datadir to the location of your data directory
datadir=D:\\Code\\mysql-5.7.31-winx64\\data

初始化

以管理员身份在cmd运行D:\Code\mysql-5.7.31-winx64\bin\mysqld.exe" --initialize-insecure

2. MySQL启动

  • 临时启动(不建议)

    "D:\Code\mysql-5.7.31-winx64\bin\mysqld.exe"
    
    image-20240219223746412

​ 临时启动的话这个黑框不能关掉,关掉就关闭了

  • 制作成Windows服务,服务来进行关闭和开启

    • 制作服务

      "D:\Code\mysql-5.7.31-winx64\bin\mysqld.exe" --install mysql57
      

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 启动服务

      image-20240219225002266

3. 连接测试

MySQL有很多连接方式,这里我们先试一下MySQL自带的工具连接

>>> "D:\Code\mysql-5.7.31-winx64\bin\mysql.exe" -h 127.0.0.1 -P 3306 -u root -p 
>>> "D:\Code\mysql-5.7.31-winx64\bin\mysql.exe" -u root -p 

为方便以后使用,我们将 D:\Code\mysql-5.7.31-winx64\bin 添加到环境变量

4. 命令

mysql -u root -p	#进入mysql

set password = password("123456");	#设置密码
show databases;	#查看所有文件夹
exit;	#退出

5. 忘记密码

  1. 停止现在的mysql服务

  2. 修改配置文件以无账号模式登录

    在my.ini文件中 + skip-grant-tables=1

  3. 再次登录,无需密码

​ 执行命令设置密码

use mysql;

update user set authentication_string = password('新密码'),password_last_changed=now() where user='root';
  1. 重新修改配置文件为有账号登陆模式
  2. 登陆时输入新的密码即可

6. MySQL指令

MySQL认知
数据库文件夹
数据表文件(Excel)

6.1 数据库管理

  • 查看已有的数据库

    show databases;
    
  • 创建数据库

    create database 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
  • 删除数据库

    drop database 数据库名字;
    
  • 进入数据库

    use 数据库名字;
    
  • 查看数据库下所有数据表

    show tables;
    

6.2 数据表管理

  • 创建表

    create table 表名(
    	id int primary key,		-- 主键(不允许空,不允许重复)
        name varchar(16) not null,	-- 不允许为空
        age int null,		-- 允许为空(默认)
        height int default 3	-- 默认值为3
    )default charset=utf8;
    
  • create table 表名(
    	id int auto_increment primary key,		-- 内部维护 自增
        name varchar(16) not null,
        age int null,
        height int default 3
    )default charset=utf8;
    
  • 一般我们都这么写:

    create table table1(
    	id int not null auto_increment primary key,		-- 内部维护 自增
        name varchar(16) not null,
        age int null,
        height int default 3
    ) default charset=utf8;
    
    desc 表名;
    
    +--------+-------------+------+-----+---------+----------------+
    | Field  | Type        | Null | Key | Default | Extra          |
    +--------+-------------+------+-----+---------+----------------+
    | id     | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name   | varchar(16) | NO   |     | NULL    |                |
    | age    | int(11)     | YES  |     | NULL    |                |
    | height | int(11)     | YES  |     | 3       |                |
    +--------+-------------+------+-----+---------+----------------+
    
  • 删除表

    drop table 表名;
    

常用数据类型:

  • tinyint

    有符号,取值范围:-128 ~ 127 【默认】
    无符号,取值范围:0 ~ 255 -- 加上unsigned	
    
  • int

    int	有符号,取值范围:-2147483648 ~ 2147483647
    int unsigned 有符号,取值范围:0 ~ 4294967659
    
  • 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);
insert into tb2(salary, age) values(20000, 28), (30000, 38);

# 查看表中数据
select * from tb2;
  • float

  • double

  • decimal

    准确的小数值,m是数字的总个数(负号不算),d是小数点后个数。m最大值为65,d最大值为30.
    
    例如:
    create table tb3(
    	id int not null primary key auto_increment,
        salary decimal(8,2)
    ) default charset=utf8;
    
    insert into tb3(salary) values(2.222);
    小数点后超过两位了,会进行四舍五入
    
  • char,速度快

    定长字符串,最大为255
    char(11),固定11个字符存储,哪怕没有11个字符,也会按11个存储
    
  • varchar,节省空间

    变长字符串,最大65535个字节 / 3 = 最大m
    varchar(最大长度) 真实多长就按多长存储	
    
  • text

    用于保存变长的大字符串,可以组到(2**16 - 1)个字符
    
  • mediumtext

  • longtext

  • datetime

    YYYY-MM-DD HH:MM:SS
    
  • date

    YYYY-MM-DD
    
create table tb4(
	id int not null primary key auto_increment,
    name varchar(64) not null,
    email varchar(64) not null,
    password char(64) not null,
    age tinyint,
    salary decimal(10,2),
    ctime datetime
) default charset=utf8;

insert into tb4(name, email, password, age, salary, ctime) values("高宇轩", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");
insert into tb4(name, email, password, age, salary, ctime) values("叶鹏辉", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");
insert into tb4(name, email, password, age, salary, ctime) values("田伟胜", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");
insert into tb4(name, email, password, age, salary, ctime) values("陈潇鹏", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");
insert into tb4(name, email, password, age, salary, ctime) values("陈琦煜", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");
insert into tb4(name, email, password, age, salary, ctime) values("林博亦", "123@outlook.com", "123", 19, 10000.12, "2004-07-26 06:16:16");

6.3 数据行操作

1. 新增数据
insert into 表名(列名,列名) values(,), (,);
2. 删除数据
delete from 表名;
delete from 表名 where 条件;

delete from tb4 where id = 1;
delete from tb4 where id = 1 and name = "高宇轩";
delete from tb4 where id = 1 or name = "叶鹏辉";
delete from tb4 where id >=4;
delete from tb4 where id != 4;
delete from tb4 where id in (1, 5, 3);
3. 修改数据
update 表名 set=值 列=;
update 表名 set=where 条件;

update tb4 set age = age + 4 where id = 3;
4. 查询数据
select * from 表名;	#查询表中所有数据
select 列名,列名 from 表名;
select 列名,列名 from 表名 where 条件;

7. 案例:员工管理

  • 使用MySQL内置工具

    • 创建数据库:unicom

    • 数据一张表:admin

      表名:admin
      列:
      	id,整型,自增,主键
      	username 字符串,不为空
      	password 字符串,不为空
      	mobile 字符串 不为空
      
  • Python代码实现

    • 添加用户
    • 删除用户
    • 查看用户
    • 更新用户信息
7.1 创建数据表
create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

use unicom;

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;
7.2 Python操作MySQL
pip install pymysql
import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='123', charset='utf8', database='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
# sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql, ['高宇轩', '456', '19999'])

sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {"n1": "gyx", "n2": "789", "n3": "188888"})

conn.commit()

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

​ 动态

import pymysql

while True:
    user = input("用户名:")
    if user.upper() == "QUIT":
        break
    pwd = input("密码:")
    mobile = input("手机号码:")

    # 1.连接mysql
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='123', charset='utf8', database='unicom')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    # 2.发送指令(千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入)
    # sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
    # cursor.execute(sql, ['高宇轩', '456', '19999'])

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

    conn.commit()

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

获取数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='123', charset='utf8', database='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
cursor.execute("select * from admin where id > %s", [2, ])
result = cursor.fetchall()
for row in result:
    print(row)

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

删除数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='123', charset='utf8', database='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
sql = "delete from admin where id = %s"
cursor.execute(sql, [2, ])

conn.commit()

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

修改数据

import pymysql

# 1.连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='123', charset='utf8', database='unicom')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
sql = "update admin set mobile = %s where mobile = %s"
cursor.execute(sql, [18888888, 199999999])
conn.commit()

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

强调:

  • 在进行增删改时,一定要记得commit,不然数据库没有数据
cursor.execute("...")
conn.commit()
  • 在查询时不需要commit,但是需要执行fetchall/fetchone
  • 对于SQL语句不要用Python的字符串格式化进行拼接(会被SQL注入),一定要用execute+参数

8. Flask + MySQL案例

from flask import Flask, render_template, request
import pymysql

app = Flask(__name__)

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

    # 获取数据
    username = request.form.get("user")
    pwd = request.form.get("pwd")
    mobile = request.form.get("mobile")

    # 1.连接MySQL
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", database="website", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

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

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

    return "添加成功"


@app.route("/show/user", methods=['GET', 'POST'])
def show_user():
    # 1.连接MySQL
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", database="website", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    # 2.执行MySQL
    sql = "select * from admin"
    cursor.execute(sql)
    data_list = cursor.fetchall()

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

    print(data_list)

    return render_template("show_user.html", data_list=data_list)
if __name__ == "__main__":
    app.run(debug=True)
  • 42
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 武沛齐是一位知名的技术博主和Python开发者,他在技术领域有着丰富的经验和深厚的技术功底。他对于Django源码的理解和解读也相当深刻。 首先,Django是一款使用Python编写的开源Web开发框架,它提供了一系列的工具和功能,使开发者可以快速构建高效、安全和可扩展的Web应用程序。 在武沛齐Django源码进行解读时,他会深入研究框架的各个模块和组件,包括路由系统、视图模板、数据库映射、中间件等。他会对这些模块的实现原理进行详细的剖析,并解释它们的设计思路和运行机制。 此外,武沛齐Django源码的解读也会涉及到一些高级主题,例如性能优化、安全性、并发处理等。他会探讨这些问题在Django框架中是如何考虑和解决的,并给出相应的代码示例和实践经验。 值得一提的是,武沛齐在他的博客和社交媒体平台上经常分享他对Django源码的研究成果和心得体会。他不仅对源码的解读给予了详细的说明,还会提供一些实际的应用案例和开发技巧,以帮助广大开发者更好地理解和使用Django框架。 总的来说,武沛齐Django源码的解读是基于深入研究和实践经验的,他的分析和解释对于理解Django框架的运行机制和实践开发非常有帮助。通过阅读他的博客和文章,开发者可以更好地掌握Django框架的核心概念和编程技巧,提升自己在Web开发领域的能力。 ### 回答2: 武沛齐是一名中国计算机科学家和程序员,擅长于Web开发和Python编程。他是Django这个流行的开源Web框架的核心开发者之一。 Django源码是指Django框架的代码库。Django是一个高效、灵活且功能丰富的Web开发框架,它采用了MTV(模型-模板-视图)的设计模式,可以帮助开发者快速、高效地构建Web应用。 Django源码包含了各种重要的模块和组件,例如HTTP请求处理、数据库操作、模板系统、表单验证等等。在源码中可以看到大量精巧的设计和优雅的实现,这些都是Django如此受欢迎的重要原因之一。 对于想要深入理解Django框架的开发者来说,研究源码是非常有价值的。通过阅读源码,可以学习到更多关于Web开发的最佳实践、设计模式以及高效的编程技巧。 然而,由于Django源码庞大而复杂,要完全理解和掌握它并不容易。需要具备扎实的Python编程基础和对Web开发的相关知识有一定的了解。 幸运的是,Django社区提供了丰富的文档和教程,以帮助开发者更好地理解和使用Django框架。此外,还可以参考一些专门讲解Django源码的书籍和教程,如《Django源码深度解析》等。 总的来说,武沛齐Django源码的贡献使得这个框架更加强大和稳定。对于想要深入学习Django的开发者来说,研究源码是非常有价值的,可以帮助他们更好地理解和掌握这个优秀的Web开发框架。 ### 回答3: 武沛齐是一位知名的编程教育者,他在教授编程的过程中广泛使用Django框架,并深入研究了Django源码。Django是一个基于Python的开源web框架,被广泛应用于快速开发高质量的网站和Web应用程序。 武沛齐Django源码的研究主要包括以下几个方面: 首先,他深入了解了Django框架的核心组件,如请求处理、路由分发、模型、视图和模板等。通过分析这些组件的源码,他了解了Django的工作原理,也能够更好地解决在实际项目中遇到的问题。 其次,武沛齐研究了Django的扩展机制和插件系统,并掌握了如何编写自定义中间件和应用程序。他对Django的源码进行深入分析,了解了其灵活性和可扩展性。这使得他在教授学生时可以分享各种基于Django的优秀开源插件和库,提高学生的编程能力。 此外,武沛齐也对Django的数据库处理进行了深入研究。他了解了Django ORM(对象关系映射)的工作原理,包括数据库查询、事务处理等方面。这使他能够更好地解释数据库相关的概念和技术,帮助学生理解和掌握数据库操作。 最后,武沛齐还致力于研究Django框架的性能优化和安全性。通过深入研究Django源码和相关文档,他能够发现并解决潜在的性能瓶颈和安全漏洞,提高网站和Web应用程序的质量和稳定性。 可以说,武沛齐Django源码的研究和实践让他成为一位在编程教育领域非常有影响力的专家。他通过解析Django源码,教授学生如何充分利用Django框架的强大功能,开发高效、安全和易维护的Web应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青帝_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值