PyMysql整理笔记

zip函数(将多个可迭代对象解耦)

a = [1,3,5,7,9]
b = [2,4,6,8,10]
c = [11,12,13,14]
for itemA,itemB,itemC in zip(a,b,c):
   print(itemA,itemB,itemC)
#打印结果:
 1,2,11
 3,4,12
 5,6,13
 7,8,14

数据库

排名名称类型主导公司
1OracleRelational DBMSOracle
2MySQLRelational DBMSOracle
3Microsoft SQL ServerRelational DBMSMicrosoft
4MongoDBDocument storeMongoDB

MySQL是开源、免费的关系型数据库**

SQL语句分为三类:

  1. DDL:数据定义语言
    1)数据库相关
*创建数据库
**create** database if not exists 数据库名
*删除数据库
**drop** database 数据库名
*查看数据库
**show** databases;
*定义数据库的字符集
**create** database if not exists 数据库名 default charset=utf8
*进入到某个数据库
**use** 数据库名

2)表相关

*创建表
**create** table if not exists 表明(
字段1 字段类型(字段的长度) 字段属性 字段约束,
字段2 字段类型(字段的长度) 字段属性 字段约束,
......);
*查看表结构
**desc** 表名
*查看数据表
**show** tables;
*删除表
**drop** table if not exists 表明
*修改表名
alter table 旧表名 **rename as** 新表名
*修改字段名
alter table 表名 **change** 旧字段名 新字段名 字段类型及属性
*修改字段类型
alter table 表名 **modify** 字段名 字段类型属性
*添加字段
alter table 表名 **add** 字段名 字段类型及属性
*删除字段
alter table 表名 **drop** 字段名
数据表字段的约束类型
主键:`primary key`
唯一:`unique`
自增长:`auto_increment`
外键:`foreign key`
`添加主键约束`
create table if not exists `表名`(
字段1 类型(长度) primary key)
`添加唯一约束`
create table if not exists `表名`(
字段1 类型(长度) unique)
`添加自增长约束`
create table if not exists `表名`(
字段1 类型(长度) auto_increment)
`添加外键约束`
1)建表时添加
CREATE TABLE `表名` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, PRIMARY KEY (`id`), CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2)建表之后添加
alter table 从表 add constraint FK_ID foreign key(从表某字段) references 主表(主表某字段)
3)注意事项
1.主表中的字段只能有主键约束时才能添加外键
2.需要添加外键约束的表的类型必须是InnoDB
*指定表的类型
create table if not exists 表名(
字段1 字段类型(字段的长度) 字段属性 字段约束,
字段2 字段类型(字段的长度) 字段属性 字段约束,
......)engine=InnoDB/MyISAM
*字段注释和字段默认值
create table if not exists 表名(
字段1 类型(长度)字段属性 字段约束 comment "注释" default 默认值
  1. DML:数据管理语言

*添加数据

1)指定字段名
**insert into** 表名(字段1,字段2...)values(值1,值2...)
2)不指定字段名
**insert into** 表名 values(值1,值2...)  #values中给定数据的个数必须与字段数相同
3)同时添加多条数据
insert into 表名 values(值1,值2,...),(值1,值2...)...

*删除数据

1)条件删除
delete from 表名where condition
2)删除所有数据
delete from 表名
truncate [table] 表名
**区别**:delete删除数据后索引不会重置
truncate会将索引重置

*更新数据

1)根据条件更新部分数据
update 表名 set 字段1=values1,字段2=values2,...where condition
2)更新所有数据
update 表名 set 字段1=values1,字段2=values2,...

*查询数据

01)无条件查询
    001->查询表中所有数据
    select * from 表名    # *代表所有字段
    002->查询指定的字段
    select 字段1,字段2,字段3... from 表名
02) 条件查询
    001->语法
        select * from 表名 where condition
    002->查询条件
        (1)between...and... 查询字段在某一区间内的所有记录
        (2)is null      查询字段值为null的所有记录
        (3)is not null 查询字段值不为null的所有记录
        (4)like        模糊匹配,查询字段中出现给定字符的所有记录
        (5)in           查询字段的值在某个集合内的所有记录("张三",“李四”)
        (6)条件1 and 条件2...   查询同时满足条件1,条件2,...所有记录数
        (7)条件1 or 条件2...    查询满足条件1至条件n中某一个条件的所有记录
        (8)not 条件1      查询不符合条件1所有记录
        (9)条件1 xor 条件2   查询不同时满足条件1和条件2的所有记录
        (10)算术运算符
            <    >   =   >=    <=   (!=  <>)
003->分组查询
    select 字段1,字段2,... from 表名 group by 字段x
    按照字段x对查询到的数据进行分组
    eg: select c_id,c_name,c_madein from commodity **group by** c_madein
        将查询到的商品按产地进行分组
004->分页查询(每页显示记录数pageNum)
    select * from commodity **limit** (page-1)*pageNum,pageNum
005->排序
    select * from commodity **order by**  c_inprice asc/desc
    对查询到的结果按照进价进行升序/降序排列
006->子查询:已知数码产品的商品分类的ct_id=0,根据该条件从商品表中查询出所有的数码产品
    select * from commodity where c_type=(
    select ct_id from commoditytype where ct_name="数码产品")

007->链表查询

表a数据
    id      name
    1       a
    2       aa
    4       aaaa
表b数据
    id      name
    1       b
    2       bb
    3       bbb
001->左链表查询
    select * from a left join b on a.id=b.id
    结果:
    id  name    id  name
    1   a       1   b
    2   aa      2   bb
    4   aaaa    
002->内链表查询
    select * from a inner join b on a.id=b.id
    结果:
    id  name    id  name
    1   a       1   b
    2   aa      2   bb
003->右链表查询
    select * from a right join b on a.id=b.id
    id  name    id  name
    1   a       1   b
    2   aa      2   bb
                3   bbb
004->全链接(若a有m行数据,b有n行数据,则结果有m*n行数据)
    select * from a inner/full join 
  1. 函数
001->求和函数:sum()
select sum(c_num) as "所有商品库存" from commodity
查询所有商品进货量的总和
002->求平均:avg()
select avg(c_inprice) as "进价均值" from commodity
查询所有商品进价的均值
003->count()
1.查询表中所有记录数
select count(*) from 表名
2.查询某个字段不为null值的所有记录数
select count(c_num) as "进货量不为null的商品种类数" from 表名
3.max()/min()
select max(字段名) from 表名

3.DCL:数据管理语言

Python+MySQL

  1. pymysql的安装
    pip install pymysql
  2. 使用pymysql链接mysql数据库
    导入模块
    import pymysql
    链接数据库
    connect = pymysql.connect(host=”“,user=”“,password=”“,db=”“,charset=”“)
    cursor = connect.cursor()
  3. 执行和提交sql语句
    sql = “Insert into tableName values(‘%s’,’%d’)”
    cursor.execute(sql%(value1,value2))
    connect.commit()
  4. 处理结果集
    01->获取结果集中所有数据
    all=cursor.fetchall()
    02->获取结果集中一条数据
    one=cursor.fetchone()
    03->获取结果集中多条数据
    many=cursor.fetchmany(size=?)
  5. 如何获取表头
    field=cursor.description
  6. 关闭链接
    cursor.close()
    connect.close()
  7. 用python+mysql实现分页查询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值