• MySQL外键


    目录

    一.外键

    1.表与表之间建立关系

    2.什么是外键

    3.一对多关系

    4.多对多关系

    (1)建表会遇到的问题

    (2)解决循环建表的问题

    5.一对一关系

    6.小结

    二.多表查询

    1.数据准备

    2.多表查询案例

    (1)联表

    (2)子查询

    三.Navicat的使用

    1.用途

    2.简单使用

    (1)execute

    (2)fetchone

    (3)fetchall

    (4)fetchmany

    (5)scroll


    一.外键

    1.表与表之间建立关系

    • 表与表之间只有三种关系
      • 一对一
      • 多对一
      • 一对多
    • 在MySQL的关系中没有多对一的说法
    • 一对多、多对多,都叫一对多

    2.什么是外键

    外键是关系数据库中的一个概念,用于建立两个关系表之间的关联关系

    它是一个列或一组列,用来指向另一个表的主键

    外键在建立数据表与数据表之间的关系时起到了重要的作用

    3.一对多关系

    • 一对多关系,外键建在字段多的地方
    • 在创建表的时候一定要先创建被关联表
    • 在录入数据的时候必须先录入被关联表

    以员工部门表为例:

    • 在员工表
      • 要考虑到员工表里面的一个员工是否能对应部门表里的多个部门
    • 在部门表
      • 要考虑到一个部门是否能对应员工表里多个员工
    • 总结
      • 员工表与部门表只是单项的一对多成立,那么员工表与部门表就是一对多关系
    创建部门表
    1. create table dep(
    2. id int primary key auto_increment,
    3. dep_name char(16),
    4. dep_desc char(32)
    5. );
    6. #Query OK, 0 rows affected (0.82 sec)
    查看部门表
    1. desc dep;
    2. +----------+----------+------+-----+---------+----------------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +----------+----------+------+-----+---------+----------------+
    5. | id | int(11) | NO | PRI | NULL | auto_increment |
    6. | dep_name | char(16) | YES | | NULL | |
    7. | dep_desc | char(32) | YES | | NULL | |
    8. +----------+----------+------+-----+---------+----------------+
    9. 3 rows in set (0.01 sec)
    创建员工表
    1. create table emp(
    2. id int primary key auto_increment,
    3. emp_name char(16),
    4. emp_gender enum("male","female","others") default "male",
    5. dep_id int,
    6. foreign key (dep_id) references dep(id)
    7. );
    8. # Query OK, 0 rows affected (0.92 sec)
    查看员工表
    1. desc emp;
    2. +------------+--------------------------------+------+-----+---------+----------------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +------------+--------------------------------+------+-----+---------+----------------+
    5. | id | int(11) | NO | PRI | NULL | auto_increment |
    6. | emp_name | char(16) | YES | | NULL | |
    7. | emp_gender | enum('male','female','others') | YES | | male | |
    8. | dep_id | int(11) | YES | MUL | NULL | |
    9. +------------+--------------------------------+------+-----+---------+----------------+
    10. 4 rows in set (0.00 sec)
    插入部门表数据
    1. insert into dep(dep_name,dep_desc) values("sm运动社","日常活动"),("游戏社","休闲娱乐"),("技术部","能力提升"),("cp外交部","社交沟通");
    2. # Query OK, 4 rows affected (0.14 sec)
    3. # Records: 4 Duplicates: 0 Warnings: 0
    插入员工表数据
    1. insert into emp(emp_name,emp_gender,dep_id) values("dream","male",1),("chimeng","female",4),("mengmeng","female",2),("drunkmeng","male",3);
    2. # Query OK, 4 rows affected (0.13 sec)
    3. # Records: 4 Duplicates: 0 Warnings: 0
    查看部门表数据
    1. select * from dep;
    2. +----+-------------+--------------+
    3. | id | dep_name | dep_desc |
    4. +----+-------------+--------------+
    5. | 1 | sm运动社 | 日常活动 |
    6. | 2 | 游戏社 | 休闲娱乐 |
    7. | 3 | 技术部 | 能力提升 |
    8. | 4 | cp外交部 | 社交沟通 |
    9. +----+-------------+--------------+
    10. 4 rows in set (0.00 sec)
    查看员工表数据
    1. select * from emp;
    2. +----+-----------+------------+--------+
    3. | id | emp_name | emp_gender | dep_id |
    4. +----+-----------+------------+--------+
    5. | 1 | dream | male | 1 |
    6. | 2 | chimeng | female | 4 |
    7. | 3 | mengmeng | female | 2 |
    8. | 4 | drunkmeng | male | 3 |
    9. +----+-----------+------------+--------+
    10. 4 rows in set (0.00 sec)

    4.多对多关系

    以图书表和作者为例

    • 站在图书表角度
      • 一本书可以有多个作者
    • 站在作者表的角度
      • 一个作者可以写多本书
    • 总结
      • 如果两个都可以那么就是多对多关系

    *****  针对多对多的表关系,外键字段在第三张表中  *****

    (1)建表会遇到的问题

    创建图书表
    1. id title price author_id
    2. create table book(
    3. id int primary key auto_increment,
    4. title varchar(32),
    5. price int,
    6. author_id int,
    7. foreign key(author_id) references author(id)
    8. on update cascade
    9. on delete cascade
    10. )
    创建作者表
    1. id name age book_id
    2. create table author (
    3. id int primary key auto_increment,
    4. name varchar(32),
    5. age int,
    6. book_id int,
    7. foreign key(book_id) references book(id)
    8. on update cascade
    9. on delete cascade
    10. )

    这种方式建表,由于外键具有”在创建表的时候一定要先创建被关联表“的特性,从而导致都无法创建彼此的关联表,针对多对多字段关系,不能在原有两张表的基础上创建外键,需要创建一张新表来建立两表的关系

    (2)解决循环建表的问题

    建表
    1. book
    2. id title price
    3. author
    4. id name age
    5. book_connect
    6. id boo_id author_id
    创建表
    1. # 图书表
    2. create table book(
    3. id int primary key auto_increment,
    4. title varchar(32),
    5. price int
    6. );
    7. # 作者表
    8. create table author(
    9. id int primary key auto_increment,
    10. name varchar(32),
    11. age int
    12. );
    13. # 中转联系表
    14. create table book_connect(
    15. id int primary key auto_increment,
    16. author_id int,
    17. book_id int,
    18. foreign key(author_id) references author(id)
    19. on update cascade
    20. on delete cascade,
    21. foreign key(book_id) references book(id)
    22. on update cascade
    23. on delete cascade
    24. );
    查看表
    1. desc book;
    2. +-------+-------------+------+-----+---------+----------------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+----------------+
    5. | id | int(11) | NO | PRI | NULL | auto_increment |
    6. | title | varchar(32) | YES | | NULL | |
    7. | price | int(11) | YES | | NULL | |
    8. +-------+-------------+------+-----+---------+----------------+
    9. 3 rows in set (0.00 sec)
    10. desc author;
    11. +-------+-------------+------+-----+---------+----------------+
    12. | Field | Type | Null | Key | Default | Extra |
    13. +-------+-------------+------+-----+---------+----------------+
    14. | id | int(11) | NO | PRI | NULL | auto_increment |
    15. | name | varchar(32) | YES | | NULL | |
    16. | age | int(11) | YES | | NULL | |
    17. +-------+-------------+------+-----+---------+----------------+
    18. 3 rows in set (0.00 sec)
    19. desc book_connect;
    20. +-----------+---------+------+-----+---------+----------------+
    21. | Field | Type | Null | Key | Default | Extra |
    22. +-----------+---------+------+-----+---------+----------------+
    23. | id | int(11) | NO | PRI | NULL | auto_increment |
    24. | author_id | int(11) | YES | MUL | NULL | |
    25. | book_id | int(11) | YES | MUL | NULL | |
    26. +-----------+---------+------+-----+---------+----------------+
    27. 3 rows in set (0.00 sec)
    插入数据
    1. insert into book(title,price) values("西游记",18),("水浒传",29),("三国演义",99),("如何让富婆爱上你",999);
    2. insert into author(name,age) values("dream",18),("chimeng",28),("mengmeng",38);
    3. insert into book_connect(author_id,book_id) values(1,3),(2,1),(2,3),(1,1);
    查看表数据
    1. select * from book;
    2. +----+--------------------------+-------+
    3. | id | title | price |
    4. +----+--------------------------+-------+
    5. | 1 | 西游记 | 18 |
    6. | 2 | 水浒传 | 29 |
    7. | 3 | 三国演义 | 99 |
    8. | 4 | 如何让富婆爱上你 | 999 |
    9. +----+--------------------------+-------+
    10. 4 rows in set (0.00 sec)
    11. select * from author;
    12. +----+----------+------+
    13. | id | name | age |
    14. +----+----------+------+
    15. | 1 | dream | 18 |
    16. | 2 | chimeng | 28 |
    17. | 3 | mengmeng | 38 |
    18. +----+----------+------+
    19. 3 rows in set (0.00 sec)
    20. select * from book_connect;
    21. +----+-----------+---------+
    22. | id | author_id | book_id |
    23. +----+-----------+---------+
    24. | 1 | 1 | 3 |
    25. | 2 | 2 | 1 |
    26. | 3 | 2 | 3 |
    27. | 4 | 1 | 1 |
    28. +----+-----------+---------+
    29. 4 rows in set (0.00 sec)

    5.一对一关系

    在MySQL的关系中没有多对一的说法

    一对多、多对多 都叫做 一对多

    如果一个表的字段特别多,每次查询又不是所有字段的数据都需要,那么可以将表一分为二

    • 用户表
      • 一个用户不能对应多个用户详情
    • 用户详情表
      • 一个用户详情表不属于多个用户
    • 结论
      • 单向的一对多都不能成立,那么这个时候两者之间的表关系要么是一对一,要么就没有关系
    创建表
    1. authors
    2. id name age author_detail_id
    3. author_detail
    4. id phone addr

    一对一,外键建在任意一方都可以,但是建议建立在查询频率较高的表内

    创建表
    1. create table author_detail(
    2. id int primary key auto_increment,
    3. phone int,
    4. addr varchar(64)
    5. );
    6. create table authors(
    7. id int primary key auto_increment,
    8. name varchar(16),
    9. age int,
    10. author_detail_id int unique,
    11. foreign key(author_detail_id) references author_detail(id)
    12. on update cascade
    13. on delete cascade
    14. );
    查看表
    1. desc author_detail;
    2. +-------+-------------+------+-----+---------+----------------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+----------------+
    5. | id | int(11) | NO | PRI | NULL | auto_increment |
    6. | phone | int(11) | YES | | NULL | |
    7. | addr | varchar(64) | YES | | NULL | |
    8. +-------+-------------+------+-----+---------+----------------+
    9. 3 rows in set (0.01 sec)
    10. desc authors;
    11. +------------------+-------------+------+-----+---------+----------------+
    12. | Field | Type | Null | Key | Default | Extra |
    13. +------------------+-------------+------+-----+---------+----------------+
    14. | id | int(11) | NO | PRI | NULL | auto_increment |
    15. | name | varchar(16) | YES | | NULL | |
    16. | age | int(11) | YES | | NULL | |
    17. | author_detail_id | int(11) | YES | UNI | NULL | |
    18. +------------------+-------------+------+-----+---------+----------------+
    19. 4 rows in set (0.01 sec)

    6.小结

    • 表关系的建立需要用到foreign key
    • 一对多
      • 外键在多的一方
    • 多对多
      • 建立第三张表作为媒介
    • 一对一
      • 建在任意一方均可,推荐建在查询频率较高的表里
    • 判断表与表之间的关系要站在双方的角度考虑

    二.多表查询

    1.数据准备

    创建数据库
    create database day04;
    
    创建表
    1. create table dep(
    2. id int,
    3. name varchar(20)
    4. );
    5. CREATE TABLE emp (
    6. id INT PRIMARY KEY AUTO_INCREMENT,
    7. name VARCHAR(20),
    8. sex ENUM("male","female") NOT NULL DEFAULT "male",
    9. age INT,
    10. dep_id INT
    11. );
    插入数据
    1. insert into dep(id,name) values
    2. ("200","技术部"),
    3. ("201","人力资源"),
    4. ("202","销售部"),
    5. ("203","运营部"),
    6. ("204","售后部"),
    7. ("206","外交部");
    8. insert into emp(name,sex,age,dep_id) values
    9. ("dream","male",18,200),
    10. ("chimeng","female",18,201),
    11. ("menmgneg","male",38,202),
    12. ("hope","male",18,203),
    13. ("own","male",28,204),
    14. ("thdream","male",18,205);

    2.多表查询案例

    • 只要涉及到多表查询就两种思路:
      • 联表
      • 子查询

    (1)联表

    先拿到部门和员工表拼接之后的结果

    对拼接后的结果进行部门分组

    查询数据
    1. select * from emp inner join dep on emp.dep_id = dep.id;
    2. +----+----------+--------+------+--------+------+--------------+
    3. | id | name | sex | age | dep_id | id | name |
    4. +----+----------+--------+------+--------+------+--------------+
    5. | 1 | dream | male | 18 | 200 | 200 | 技术部 |
    6. | 2 | chimeng | female | 18 | 201 | 201 | 人力资源 |
    7. | 3 | menmgneg | male | 38 | 202 | 202 | 销售部 |
    8. | 4 | hope | male | 18 | 203 | 203 | 运营部 |
    9. | 5 | own | male | 28 | 204 | 204 | 售后部 |
    10. +----+----------+--------+------+--------+------+--------------+
    11. 5 rows in set (0.00 sec)
    查询数据
    1. select dep.name from emp inner join dep
    2. on emp.dep_id = dep.id
    3. group by dep.name
    4. having avg(age) > 25
    5. ;
    6. select dep.name from emp inner join dep
    7. on emp.dep_id = dep.id
    8. group by dep.name
    9. having avg(age) > 25
    10. ;

    (2)子查询

    分步操作

    查询数据
    1. select name from dep where id in
    2. (select dep_id from emp group by dep_id
    3. having avg(age) > 25);
    4. +-----------+
    5. | name |
    6. +-----------+
    7. | 销售部 |
    8. | 售后部 |
    9. +-----------+
    10. 2 rows in set (0.00 sec)

    三.Navicat的使用

    1.用途

    Navicat可以充当多个数据库的客户端

    2.简单使用

    (1)execute

    返回的是查询到的数据的条数

    1. # -*-coding: Utf-8 -*-
    2. # @File : 01 简介 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. # (1)链接数据库
    8. conn = pymysql.connect(
    9. # 指定 ip端口
    10. host='127.0.0.1',
    11. port=3306,
    12. # 指定用户名密码
    13. user='root',
    14. password='1314521',
    15. # 指定数据库
    16. database='day04',
    17. # 指定编码
    18. charset='utf8'
    19. )
    20. # (2)创建游标对象 - 执行命令 对象
    21. cursor = conn.cursor()
    22. # (3)创建SQL语句
    23. sql = 'select * from emp;'
    24. # (4)游标对象执行SQL语句
    25. # 【1】execute: 返回的是数据的条数
    26. res = cursor.execute(sql)
    27. print(res) # 6

    (2)fetchone

    返回查询到的第一条数据

    返回数据以元祖形式:
    1. # -*-coding: Utf-8 -*-
    2. # @File : 01 简介 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. # (1)链接数据库
    8. conn = pymysql.connect(
    9. # 指定 ip端口
    10. host='127.0.0.1',
    11. port=3306,
    12. # 指定用户名密码
    13. user='root',
    14. password='1314521',
    15. # 指定数据库
    16. database='day04',
    17. # 指定编码
    18. charset='utf8'
    19. )
    20. # (2)创建游标对象 - 执行命令 对象
    21. cursor = conn.cursor()
    22. # (3)创建SQL语句
    23. sql = 'select * from emp;'
    24. # (4)游标对象执行SQL语句
    25. # 【2】
    26. res = cursor.execute(sql) # 先执行这条语句
    27. res1 = cursor.fetchone() # 拿第一条数据
    28. print(res1) # (1, 'dream', 'male', 18, 200)
    返回数据以字典形式:
    1. # -*-coding: Utf-8 -*-
    2. # @File : 01 简介 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. # (1)链接数据库
    8. conn = pymysql.connect(
    9. # 指定 ip端口
    10. host='127.0.0.1',
    11. port=3306,
    12. # 指定用户名密码
    13. user='root',
    14. password='1314521',
    15. # 指定数据库
    16. database='day04',
    17. # 指定编码
    18. charset='utf8'
    19. )
    20. # (2)创建游标对象 - 执行命令 对象
    21. # cursor=pymysql.cursors.DictCursor:将查询的参数以字典的形式返回
    22. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    23. # (3)创建SQL语句
    24. sql = 'select * from emp;'
    25. # (4)游标对象执行SQL语句
    26. # 【2】
    27. res = cursor.execute(sql) # 先执行这条语句
    28. res1 = cursor.fetchone() # 拿一条数据 - 返回的是字典
    29. print(res1)
    30. # {'id': 1, 'name': 'dream', 'sex': 'male', 'age': 18, 'dep_id': 200}

    (3)fetchall

    1. # -*-coding: Utf-8 -*-
    2. # @File : 01 简介 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. # (1)链接数据库
    8. conn = pymysql.connect(
    9. # 指定 ip端口
    10. host='127.0.0.1',
    11. port=3306,
    12. # 指定用户名密码
    13. user='root',
    14. password='1314521',
    15. # 指定数据库
    16. database='day04',
    17. # 指定编码
    18. charset='utf8'
    19. )
    20. # (2)创建游标对象 - 执行命令 对象
    21. # cursor=pymysql.cursors.DictCursor:将查询的参数以字典的形式返回
    22. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    23. # (3)创建SQL语句
    24. sql = 'select * from emp;'
    25. # (4)游标对象执行SQL语句
    26. # 【2】
    27. res = cursor.execute(sql) # 先执行这条语句
    28. res2 = cursor.fetchall() # 拿一条数据 - 返回的是列表
    29. print(res2)
    30. # [{'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}, {'id': 3, 'name': 'menmgneg', 'sex': 'male', 'age': 38, 'dep_id': 202}, {'id': 4, 'name': 'hope', 'sex': 'male', 'age': 18, 'dep_id': 203}, {'id': 5, 'name': 'own', 'sex': 'male', 'age': 28, 'dep_id': 204}, {'id': 6, 'name': 'thdream', 'sex': 'male', 'age': 18, 'dep_id': 205}]

    (4)fetchmany

    1. # -*-coding: Utf-8 -*-
    2. # @File : 01 简介 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. # (1)链接数据库
    8. conn = pymysql.connect(
    9. # 指定 ip端口
    10. host='127.0.0.1',
    11. port=3306,
    12. # 指定用户名密码
    13. user='root',
    14. password='1314521',
    15. # 指定数据库
    16. database='day04',
    17. # 指定编码
    18. charset='utf8'
    19. )
    20. # (2)创建游标对象 - 执行命令 对象
    21. # cursor=pymysql.cursors.DictCursor:将查询的参数以字典的形式返回
    22. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    23. # (3)创建SQL语句
    24. sql = 'select * from emp;'
    25. # (4)游标对象执行SQL语句
    26. # 【2】
    27. res = cursor.execute(sql) # 先执行这条语句
    28. res3 = cursor.fetchmany(2) # 拿指定条数据 - 返回的是列表
    29. print(res3)
    30. # [{'id': 1, 'name': 'dream', 'sex': 'male', 'age': 18, 'dep_id': 200}, {'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}]

    (5)scroll

    1. # -*-coding: Utf-8 -*-
    2. # @File : 02 scroll方法 .py
    3. # author: Chimengmeng
    4. # blog_url : https://www.cnblogs.com/dream-ze/
    5. # Time:2023/7/2
    6. import pymysql
    7. def connect_mysql():
    8. import pymysql
    9. # (1)链接数据库
    10. conn = pymysql.connect(
    11. # 指定 ip端口
    12. host='127.0.0.1',
    13. port=3306,
    14. # 指定用户名密码
    15. user='root',
    16. password='1314521',
    17. # 指定数据库
    18. database='day04',
    19. # 指定编码
    20. charset='utf8'
    21. )
    22. return conn
    23. def create_cursor():
    24. conn = connect_mysql()
    25. # (2)创建游标对象 - 执行命令 对象
    26. # cursor=pymysql.cursors.DictCursor:将查询的参数以字典的形式返回
    27. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    28. # (3)创建SQL语句
    29. sql = 'select * from emp;'
    30. cursor.execute(sql)
    31. return cursor
    32. def main_fetch():
    33. cursor = create_cursor()
    34. print('第一次fetchone:>>>>', cursor.fetchone())
    35. print('第二次fetchone:>>>>', cursor.fetchone())
    36. print('fetchall:>>>>', cursor.fetchall())
    37. # 第一次fetchone:>>>> {'id': 1, 'name': 'dream', 'sex': 'male', 'age': 18, 'dep_id': 200}
    38. # 第二次fetchone:>>>> {'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}
    39. # fetchall:>>>> [{'id': 3, 'name': 'menmgneg', 'sex': 'male', 'age': 38, 'dep_id': 202}, {'id': 4, 'name': 'hope', 'sex': 'male', 'age': 18, 'dep_id': 203}, {'id': 5, 'name': 'own', 'sex': 'male', 'age': 28, 'dep_id': 204}, {'id': 6, 'name': 'thdream', 'sex': 'male', 'age': 18, 'dep_id': 205}]
    40. # 当已经执行了 fetchone 时 光标就会向下移动一次 所以最后的查询是从索引 3 开始的
    41. def main_scroll():
    42. cursor = create_cursor()
    43. # 【1】 cursor.scroll(1, 'absolute'))
    44. # 控制 光标的移动
    45. # print('第一次fetchone:>>>>', cursor.fetchone())
    46. # print('第二次fetchone:>>>>', cursor.fetchone())
    47. # print('第二次fetchone:>>>>', cursor.scroll(1, 'relative')) # 相当于光标所在的位置向后移动一次
    48. # print('fetchall:>>>>', cursor.fetchall())
    49. # 第一次fetchone:>>>> {'id': 1, 'name': 'dream', 'sex': 'male', 'age': 18, 'dep_id': 200}
    50. # 第二次fetchone:>>>> {'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}
    51. # 第二次fetchone:>>>> None
    52. # fetchall:>>>> [{'id': 4, 'name': 'hope', 'sex': 'male', 'age': 18, 'dep_id': 203}, {'id': 5, 'name': 'own', 'sex': 'male', 'age': 28, 'dep_id': 204}, {'id': 6, 'name': 'thdream', 'sex': 'male', 'age': 18, 'dep_id': 205}]
    53. # 当遇到 scroll 的时候 ,光标向下移动了一次,所以最后的索引是从4 开始的
    54. # 【2】 cursor.scroll(1, 'absolute'))
    55. print('第一次fetchone:>>>>', cursor.fetchone())
    56. print('第二次fetchone:>>>>', cursor.fetchone())
    57. print('第二次fetchone:>>>>', cursor.scroll(1, 'absolute')) # 相当于光标所在的位置向后移动一次
    58. print('fetchall:>>>>', cursor.fetchall())
    59. # 第一次fetchone:>>>> {'id': 1, 'name': 'dream', 'sex': 'male', 'age': 18, 'dep_id': 200}
    60. # 第二次fetchone:>>>> {'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}
    61. # 第二次fetchone:>>>> None
    62. # fetchall:>>>> [{'id': 2, 'name': 'chimeng', 'sex': 'female', 'age': 18, 'dep_id': 201}, {'id': 3, 'name': 'menmgneg', 'sex': 'male', 'age': 38, 'dep_id': 202}, {'id': 4, 'name': 'hope', 'sex': 'male', 'age': 18, 'dep_id': 203}, {'id': 5, 'name': 'own', 'sex': 'male', 'age': 28, 'dep_id': 204}, {'id': 6, 'name': 'thdream', 'sex': 'male', 'age': 18, 'dep_id': 205}]
    63. # 相对于数据的起始位置向后移动一位
    64. if __name__ == '__main__':
    65. main_scroll()

  • 相关阅读:
    Ubuntu环境下基于libxl库文件使用C++实现对表格的操作
    无人机反制:车载侦测干扰一体设备技术详解
    ch1_系统启动_setup.S
    dolphinscheduler负载均衡源码
    22级第三次比赛题解
    Java学习Day031(异常)
    adb 查找应用包名,应用 Activity 等信息
    MLOps最全的资料合集:书籍、课程与博文
    AIGC AI绘画 Midjourney 的详细使用手册
    【全开源】Java养老护理助浴陪诊小程序医院陪护陪诊小程序APP源码
  • 原文地址:https://blog.csdn.net/qq_65852978/article/details/134035346