2022-01-16 09:46:01    18    0    0

title

2022-01-16 09:45:48    13    0    0
2023-02-12 08:04:16    13    0    0
  1. '''
  2. l.sort() sort不带参数, 升序排序
  3. reverse 布尔类型: true:降序排序, false: 升序排序, 默认值是false
  4. key 比较函数, 默认是按照数据类型比较(整数,默认int)
  5. '''
  6. l = [10, 0, 1, 6, 12, 8]
  7. l.sort(key=str)
  8. print(l)
  9. t = (10, 0, 1, 6, 12, 8)
  10. nt = sorted(t, reverse=True, key=str)
  11. print(nt)
  12. print(t)
  13. '''
  14. sort是列表的方法, sorted是全局方法
  15. sort会改变原有对象的数据, sorted不会改变原有数据而是返回一个新对象
  16. sort只能排序列表, sorted可以排序列表/元组
  17. sorted返回的数据类型是列表
  18. reverse 布尔类型: true:降序排序, false: 升序排序, 默认值是false
  19. key 比较函数, 默认是按照数据类型比较(整数,默认int)
  20. '''
  21. '''
  22. 10 0
  23. int: 10 0
  24. str: str(10),str(0),str(1),str(6),str(12),str(8) ==> ['10', '0', '1', '6', '12', '8'] 排序后: ['0','10']
  25. '1a' '12'
  26. '''
  27. '''
  28. ASCII表
  29. 参考地址: https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin
  30. 主要掌握知识点:
  31. 1. 0 a A 在ASCII中的编码
  32. 2. ASCII使用16进制的表示形式: 如\x01
  33. '''
  34. '''
  35. 集合的元素 只能是不可变类型, 不能是可变类型
  36. 字典的键 只能是不可变类型, 不能是可变类型
  37. 改变指的是内存中数据的改变
  38. a-> 0x001(内存空间)
  39. 不可变类型: int/float/str/tuple/bool
  40. 可变类型: list/set/dict
  41. '''
  42. '''
  43. map(映射) 将一个元素通过一种方法转换成另外一个元素
  44. - 转换函数
  45. - 待映射的数据
  46. 会对列表里的每个元素, 使用转换函数进行转换, 得到一个新的列表
  47. map(st
2022-12-25 13:07:10    11    0    0
  1. # 定义一个列表来存储所有学生信息
  2. import sqlite3
  3. conn = sqlite3.connect('student.db')
  4. conn.execute('''
  5. create table if not exists student (
  6. sid text primary key not null,
  7. name text not null,
  8. sex text not null,
  9. phone text not null
  10. )
  11. ''')
  12. # 打印功能菜单
  13. def print_menu():
  14. print('=' * 30)
  15. print('学生管理系统')
  16. print('1.添加学生信息')
  17. print('2.删除学生信息')
  18. print('3.修改学生信息')
  19. print('4.显示所有学生信息')
  20. print('0.退出系统')
  21. print('=' * 30)
  22. # 添加学生信息
  23. def add_stu_info():
  24. sid = input('请输入新学生的学号:')
  25. cursor = conn.execute("select * from student where sid=?", (sid,))
  26. if len(cursor.fetchall()) > 0:
  27. print('要添加的学生已存在')
  28. else:
  29. name = input('请输入新学生的姓名:')
  30. sex = input('请输入新学生的性别:')
  31. phone = input('请输入新学生的手机号码:')
  32. conn.execute("insert into student(sid,name,sex,phone) values (?,?,?,?)", (sid, name, sex, phone))
  33. conn.commit()
  34. # 删除学生信息
  35. def del_stu_info():
  36. sid = input('请输入要删除的学号:')
  37. cursor = conn.execute("select * from student where s
2022-12-25 12:57:39    13    0    0

学生管理系统

详细功能见pdf文件

学生管理系统.pdf

2022-12-24 07:55:04    20    0    0

Python中使用SQLite

Python 3.x版安装完成后有内附SQLite数据库,这一章将以此为实例讲解,在使用此SQLite前需要导入此SQLite

  1. import sqlite3

为了使用 sqlite3 模块,您首先必须创建一个表示数据库的连接对象,然后您可以有选择地创建光标对象,这将帮助您执行所有
的 SQL 语句。

连接数据库

操作数据库之前需要先连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
使用connect方法连接数据, 格式为:

  1. sqlite3.connect(database [,timeout ,other optional arguments])

该 API 打开一个到 SQLite 数据库文件 database 的链接。您可以使用 “:memory:” 来在 RAM 中打开一个到 database 的数
据库连接,而不是在磁盘上打开。如果数据库成功打开,则返回一个连接对象。

当一个数据库被多个连接访问,且其中一个修改了数据库,此时 SQLite 数据库被锁定,直到事务提交。timeout 参数表示连接
等待锁定的持续时间,直到发生异常断开连接。timeout 参数默认是 5.0(5 秒)。

如果给定的数据库名称 filename 不存在,则该调用将创建一个数据库。如果您不想在当前目录中创建数据库,那么您可以指定
带有路径的文件名,这样您就能在任意地方创建数据库。

例如:

  1. import sqlite3
  2. conn = sqlite3.connect('test.db')
  3. print ("数据库打开成功")

运行上面的程序,在当前目录中创建我们的数据库 test.db, 可以根据需要改变路径
在这里,您也可以把数据库名称复制为特定的名称 :memory: ,这样就会在 RAM 中创建一个数据库。

获取游标

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句
逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。

使用cursor函数获取游标, 格式如下

2022-12-11 13:48:20    13    0    0
  1. --创建表 create table
  2. create table 表名 (列名1 列类型,列名2 列类型, ..., 列名n 列类型);
  3. -- 分号;用户分隔多条sql语句, 多个sql语句同时执行, 分号必不可少. 如果只执行一条sql, 分号可有可无
  4. create table student_01 (student_no text, name text, birthday text, sex text);
  5. --添加数据(插入数据)
  6. insert into 表名 (列名1,列名2,...,列名n) values (数据1,数据2,...,数据n);
  7. --sql中字符串必须只能用单引号, 不能用双引号
  8. insert into student_01 (student_no, name, birthday, sex) values ('0001','张三','2000-10-11','男');
  9. --当插入的字段是表里面所有字段时, 字段列表可以省略. 条件是数据的顺序必须和字段的顺序保持一致
  10. insert into student_01 values ('0001','张三','2000-10-11','男');
  11. insert into student_01 values ('张三','0001','2000-10-11','男');
  12. -- 使用sql建一张成绩表 score_01
  13. --查询数据
  14. select 列名1,列名2,...,列名n from 表名;
  15. select student_no,name,birthday,sex from student_01;
  16. --当我们查一张表的所有字段时, 可以用*代替字段名
  17. select * from student_01;
  18. --条件查询, 列表=列值 (比较运算符) (相等: =) <><=>=!=
  19. select * from student_01 where student_no='0001';
  20. select * from student_01 where name='张三';
  21. --sql同样支持逻辑运算符, and or
  22. select * from student_01 where student_no='0001' and name='张三';
  23. s
2022-12-11 13:45:58    18    0    0

SQLite 数据类型

SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是
相关的,而不是与它的容器相关

每个存储在 SQLite 数据库中的值都具有以下存储类之一:

title

SQLite基本操作

创建表

SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类
型。

CREATE TABLE 语句的基本语法如下:

  1. CREATE TABLE database_name.table_name(
  2. column1 datatype PRIMARY KEY(one or more columns),
  3. column2 datatype,
  4. column3 datatype,
  5. .....
  6. columnN datatype,
  7. )

写入数据

SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行

INSERT INTO 语句有两种基本语法,如下所示:

  1. INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
  2. VALUES (value1, value2, value3,...valueN);

在这里,column1, column2,…columnN 是要插入数据的表中的列的名称

如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。
SQLite 的 INSERT INTO 语法如下:

  1. INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

查询数据

SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。

SQLite 的 SELECT 语句的基本语法如下:

  1. S
2022-12-04 12:09:22    32    0    0

什么是数据库

每个人家里都会有冰箱,冰箱是用来干什么的?冰箱是用来存放食物的地方

同样的,数据库是存放数据的地方。正是因为有了数据库后,我们可以直接查找数据。

例如支付宝查看自己的账户收益,就是从数据库读取数据后给你的。

title

有人可能会问了:我的数据就存放在自己电脑的excel表里就可以了,为什么还要搞个数据库呢?

这是因为数据库比excel有更多的优势。数据库可以存放大量的数据,允许很多人同时使用里面的数据。

举个例子,excel好比是一个移动硬盘,我们使用了这个移动硬盘其他人就用不了了。数据库好比是网盘,很多人可以同时访问里面里的数据。而且网盘比移动硬盘能放更多的数据。

数据库是如何存放数据的?

数据库有很多种类,这里我们重点学习使用最广泛的关系数据库。

关系数据库是由多个表组成的。就像Excel一样,Excel是一张一张的二维表。每个表都是由行和列组成的。

同样的,关系数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:

关系数据库=多张表+各表之间的关系

title

对应的,学会关系数据库我们只要掌握两点就可以:

  • 多张表里面,每一张表的结构
  • 各表之间的关系

表的结构

表的结构是指要了解关系数据库中每张表长什么样。

每个表由一个名字标识。表包含带有列名的列,和记录数据的行。我们举个具体的例子就一目了然了。

下面图片里的表名是:学生表,记录了每个学生的信息。

title

表中每一列都有一个名字来标识出该列,这个表里有4列,列名分别是学号,姓名,出生日期,性别。从列名上你也可以知道这一列对应记录的是什么数据。

表的每一行里记录着数据。这里的一行表示该名学生的信息,比如第2行是学号0002学生的信息,他的姓名是猴子,出生日期是1990-12-21,性别是女。

各表之间的关系

关系数据库是由多张表组成的,图片里是存放在学校数据库里的4张表。

你能发现下面这4张表之间有什么关系吗?

title

其实,数据之间也是有关系的。关系数据库里各个表之间如何建立起关系呢?

我们来看图中“学生表”,“成绩表”这两个表之前的关系。

title

这两张表通过”学号”关联起来,为了更清楚的看到这两个表的关系,PPT里我用相同

2022-11-13 12:32:04    11    0    0
  1. import smtplib
  2. from email.header import Header
  3. from email.mime.text import MIMEText
  4. # 发送方的账号密码
  5. sender = "lou_yj@163.com"
  6. password = "EKKGWNSQKDPAIYWN"
  7. receivers = ["super_leoning@163.com"]
  8. subject = "测试邮件"
  9. # 最简单的纯文本邮件->plain
  10. # application/json, text/plain, text/xml
  11. message = MIMEText("这是一封测试邮件", "plain", "utf-8") # 邮件正文, 邮件类型, 邮件编码
  12. message["From"] = Header(sender, "utf-8") # 发件人信息
  13. message["To"] = Header(';'.join(receivers), "utf-8") # 收件人
  14. message["Subject"] = Header(subject, "utf-8") # 标题
  15. smtpObj = smtplib.SMTP("smtp.163.com", 25) # 和服务器进行连接
  16. smtpObj.login(sender, password) # 登录
  17. smtpObj.sendmail(sender, receivers, message.as_string()) # 发邮件
  18. smtpObj.quit() # 关闭
  19. print("邮件发送成功")
1/5