mysql与python交互

知识点

背景

1
2
# 非主键取默认值的方式:default
insert into 表名 (主键, 字段1, 字段2, ...) values (0, 值1, default)

同步表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 从已知表中选择数据插入到新表中
insert into 新表(字段1, 字段2, ...) select 字段1, 字段2, ... from 老表 where 条件

# 利用链表查询,将A中的pid更新为B中的ID值
update A表 as A inner join B表 as B on A.name = B.name set A.pid = B.id

# 设置表外键:设置外键时后再插入数据,此时会检查外键关联的表的数据是否存在,不存在就会报错
# 数据库中尽量少用外键约束,因为其会极大的降低表更新的效率
# 添加的外键必须不是主键,外键指向的键必须未其它表的主键
alter table 表1 add foreign key (表1字段名) references 表2(表2字段名)

# 同时修改同一个表多个字段的配置信息
alter table 表名
change 原字段名 修改名 类型 约束,
change 原字段名 修改名 类型 约束;

# 在创建数据表时就直接插入数据, 插入时选择的字段名一定要用as起别名,别名一定要为创建的表中对应的字段名
create table 表1(
id int unsigned primary key auto_increment,
name varchar(40) not null,
gender enum("男", "女")
) select 列名 as name, 列名 as gender from 表2 where 条件

# 取消外键约束,外键名(系统自动生成)可以通过【desc 表名】获取
alter table 表名 drop foreign key 外键约束名

pymysql安装

1
2
3
4
5
# 安装pymysql
sudo pip3 install pymysql

# 安装.whl文件的包
sudo pip3 install xxx.whl

pymysql使用

  • 流程图

    image-20200723003146997

  • 实现代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    from pymysql import *

    def main():
    # 创建connection连接
    conn = connect(host="localhost", port=3306, user="root", password="kmn123", database="tomexam", charset="utf8")
    # 获得cursor对象
    csl = conn.cursor()
    # 执行sql,如果是查询,则会返回受影响的行数值
    count = csl.execute("select * from tm_question")
    # 为避免sql注入,将sql中参数部分弄成execute传递的参数列表,sql语句中有多少个拼接参数,则列表中就有对应数量的元素
    count = csl.execute("select * from tm_question where name = %s", ["name"])
    # 执行sql,如果是增、删、改,则需要提交commit,他可以再一个connection过程中提交执行之前所有的sql修改
    conn.commit()
    # 执行sql,如果是增、删、改导致了错误,在未提交commit之前, 提交rollback(),可以撤回之前执行的sql
    conn.rollback()

    for i in range(count):
    # fetchone():从游标结果中一次只取出一个结果,再次取时就会迭代输出新的,返回元组
    result = csl.fetchone()
    # fetchmany(num):从游标结果中一次取出指定数量的数据,再次取时就会迭代输出新的,默认为1,返回元组
    result = csl.fetchmany(5)
    # fetchall():从游标结果中一次取出指定所有的数据,返回元组
    result = csl.fetchall()

    # 关闭游cursor对象
    csl.close()
    conn.close()

归纳

为了便于记忆,提供脑图