doraemon的python 数据库2和pymysql

##### 10.3.2.2 约束

约束:

- not null 某一个字段不能为空
- default 给某个字段设置默认值
- unique 设置一个字段不能重复
- auto_increment 设置某一个int类型的字段 自动增加
- primary key  设置一个字段非空且不能重复
  - 外键关联的那张表中的字段必须unique
  - 级联操作:on update cascade on delete cascade
- foreign key 外键
- unsigned 只能是正数 

not null和default:

```python
create table t1(
id int not  null,
name char(8) not null,
gender enum(‘male‘,‘female‘) not null default ‘male‘
);
```

unique:

```python
create table t2(
id int unique,
username char(4) unique,
password char(8) not null
);
```

联合唯一

```python
create table t3(
in int,
ip char(15),
server char(15),
port int,
unique(ip,port)
);
```

自增 auto_increment

- 自增字段必须是数字且必须是唯一的

```python
create table t4(
id int unique auto_increment,
username char(4),
password char(4)
);
```

primary key 主键

- 一张表只能设置一个主键
- 一张表最好设置一个主键(默认规范)
- 约束这个字段非空(not null)且唯一(unique)

```python
create table t5(
id int(4) not null unique,     #第一个非空且唯一的字段会被默认定义为主键
name char(12) not null unique
);
```

```python
#手动设置
create table t5(
id int(4) primary key,     #第一个非空且唯一的字段会被默认定义为主键
name char(12) not null unique
);
```

联合主键

```python
create table t3(
in int,
ip char(15),
server char(15),
port int,
unique(ip,port),
primary key(id,ip)
);
```

外键 foreign key 涉及到两张表

```python
create  table t6(
id int primary key auto_increment,
age int,
gender enum(‘male‘,‘female‘),
salary float(8,2),
hire date date,
post_id int,
foreign key (post_id) references post(pid)
);
#关联的键是不允许修改和删除的

create table pid(
pid int primary key,
phone cahr(11)
);
```

级联删除和级联更新

```python
create  table t6(
id int primary key auto_increment,
age int,
gender enum(‘male‘,‘female‘),
salary float(8,2),
hire date date,
post_id int,
foreign key (post_id) references post(pid) on update cascade on delete cascade
);
#现在就可以一起删除个更新了

create table pid(
pid int primary key,
phone cahr(11)
);
```

##### 10.3.2.3 修改表

什么时候用表修改:

- 创建项目之前
- 项目开发、运行过程中

alter table 表名 add 添加字段

- alter table 表名 add 字段名 数据类型(宽度) 约束

alter table 表名 drop 删除字段

- alter table 表名 drop 字段名

alter table 表名 modify 修改已经存在的字段的宽度、约束

- alter table 表名 modify name char(4)  not null

alter table 表名 change 修改已经存在的字段的类型宽度、约束和字段名字

- alter table 表名 change name new_name varchar(12) not null

调整字段名位置

- alter table 表名 modify age int not null after id
- alter table 表名 modify age int not null first
- alter table 表名 modify name char(4)  not null first/after name  #创建的时候设置添加的位置

两张表中的数据之间的关系:

多对一:

- 多个学生都是同一个班级
- 学生版表 关联 班级表
- 学生是多 班级是一

一对一:

- 客户关系表:手机号 招生老师 上次联系的时间 备注信息
- 学生表:姓名 入学日期 缴费日期 结业
- 后出现的一张表中的数据作为外键,并且要约束这个外键是唯一的

多对多: 产生第三张表,把两个关联关系的字段作为第三张表的外键

- 书
- 作者

#### 10.3.3 数据的增删改查

增删改查:

- 增加 insert
  - insert into 表名 values(值。。。。);
  - insert into 表名(字段名,字段名) values(值。。。。);
  - insert into 表名(字段名,字段名) values(值。。。。),(值。。。。)  #写入多行数据;
- 删除 delete
  - delete from 表名 where 条件;
- 修改 update
  - update 表名 set 字段=新的值 where 条件;
- 查询 select
  - select * from 表;
  - select 字段,字段.. from 表;
  - select distinct 字段,字段.. from 表;  #按查出来的字段去重
  - select 字段*5 from 表; #做运算
  - select 字段*5 as 新名字 from 表; #对运算后的结果重新命名

#### 10.3.4 单表查询 where语句

比较运算 > < <= >= != <>

```python
select * from 表名 where 字段名>1000 or 字段名=100
```

范围筛选:

- 多选一
  - select * from employee where 字段名 in (100,200,4000);
- 在一个模糊的范围内
  - 在一个数值区间里
    - select * from employee where salary between 1000 and 20000;
  - 字符串的模糊查询
    - select * from employee where name like ‘程%‘  #匹配后面的一个或者多个字符;
    - select * from employee where name like ‘程_‘   #_匹配后面的一个字符,可以多次用;
  - 正则匹配 regexp
    - select * from employee where 字段 regexp ‘‘正则表达式‘‘;
- 逻辑运算 - 条件拼接
  - and
  - or
  - not
    - select * from 表名 where employee(字段名)not in (100,200,4000);
- 身份运算符  关于null       is null/is not null
  - 查看某给字段中的数据是否为null
  - select * from employee where post_comment is not null

#### 10.3.5  单表查询group by

分组

- 会把在group by后面的这个字段,这个字段中的每一个不同的项都保存下来
- 并且把这一项的值归为一组,只显示该分组的第一个

聚合:

- count(字段) 统计这个字段有多少项
- sum(字段)  统计这个字段对应点的数值的和
- avg(字段) 统计这个字段对应的数值的平均值
- min(字段)
- max(字段)

分组聚合:

- 应用场景:统计各个部门的人数
- select post,count(*) from employee group by post  #select后面跟着哪个字段就会显示哪个字段的内容

#### 10.3.6 单表查询having语句 和order by

- 过滤  组 #过滤总是跟group一起用的
  - select post from employee group by post having count(*)>3  #找人数大于3的部门
  - 执行顺序:先分组 在筛选

order by 排序:

- select * from employee order by age;  #升序
- select * from employee order by age desc;  #降序
- select * from employee order by age,salary desc;  #先以age升序,在age相同的情况下依照salary降序
- select * from employee order by age limit 3;  #取年龄最小的三个
- select * from employee order by age limit 10,5; #从第10个开始,取五5个

### 10.4 pymysql

```python
import pymysql
conn = pymysql.connect(host=‘127.0.0.1‘,user=‘root‘,password=‘123‘,database=‘day40‘)
cur = conn.cursor(pymysql.cursors.DictCursor) #数据库操作符(游标)  括号里的可以帮助生成字典
cur.execute(‘insert into employee(emp_name,sex,age,hire_date)‘
            ‘values ("刘佳",“,"male",40,20190808)‘) #这边的双引号一定要注意
ret = cur.fetchone() #取一个
ret = cur.fetchmany(5)  #取五个
ret = cur.fetchalll() #取所有
print(ret)
conn.commit()
conn.close()
```

### 10.5 多表查询 

两张表是怎么连在一起的

- select * from emp,department;

连表查询(效率高):

- 连接的语法:select 字段 from 表1 xxx join 表2 on 表1.字段 = 表2.字段;
- 把两张表连在一起查询
- 内连接 inner join
  - select * from emp inner join department on emp.dep_id = department.id; #两个表条件不匹配的项是不会出现在连表当中的
- 外连接
  - 左外链接 left join  # 永远显示全量的左表中的数据
    - select * from emp left join department on emp.dep_id = department.id;
  - 右外连接 right join 永远显示全量的右表中的数据
    - select * from emp right join department on emp.dep_id = department.id;
  - 全外连接
    - select * from emp left join department on emp.dep_id = department.id union select * from emp right join department on emp.dep_id = department.id; 

子查询(效率低):

找到技术部门所有人的姓名

- 先找到部门表技术部门的部门id
  - select id from department where name = ‘技术‘
- 再找到emp表中部门id = 200
  - select name from emp where dep_id = 200   #第一种 分两步查询先得到id 在查姓名
  - select name from emp where dep_id = (select id from dapartment where name = ‘技术‘); #第二种直接将两步拼接起来

原文地址:https://www.cnblogs.com/doraemon548542/p/11470666.html

时间: 2024-10-29 21:24:49

doraemon的python 数据库2和pymysql的相关文章

Python数据库编程

简介 在任何应用中,都需要持久化存储,一般有3种基础的存储机制:文件.数据库系统以及一些混合类型.这种混合类型包括现有系统上的API.ORM.文件管理器.电子表格.配置文件等.在了解数据库以及如何在Python中使用他们之前,首先需要知道数据库概念以及SQL语句. 底层存储 数据库通常使用文件系统作为基本的持久化存储,它可以是普通的操作系统文件.专用的操作系统文件,甚至是原始的磁盘分区. 用户接口 大多数数据库系统提供了命令行工具,可以使用其执行SQL语句或查询.此外还有一些GUI工具,使用命令

python操作mysql(pymysql + sqlalchemy)

pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行sql #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1') # 创建

Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy

一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应的操作 PS:如果有了以上软件,无须自己再去创建文件和文件夹,而是直接传递 命令 给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Data

python数据库(mysql)操作

一.软件环境 python环境默认安装了sqlite3,如果需要使用sqlite3我们直接可以在python代码模块的顶部使用import sqlite3来导入该模块.本篇文章我是记录了python操作mysql数据库,mysql数据库下载 由于我之前安装的是wampserver,默认安装了php.mysql和apache这3个环境,因此我没有在单独安装mysql数据库,只是下载了一个mysql管理工具Navicat for MySQL.在使用Navicat for MySQL连接本地mysql

python成长之路【第十三篇】:Python操作MySQL之pymysql

对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1',

MySQL数据库报错pymysql.err.InterfaceError: (0, &#39;&#39;)

今天入库的时候出现了报错pymysql.err.InterfaceError: (0, ''),经过排查,发现是由于把连接数据库的代码放到了插入函数的外部,导致多线程运行出错 1 def write_into_db(data): 2 db = pymysql.connect(host=db_host, user=db_user, password=db_password, port=db_port, db=db_name, charset='utf8') 3 cursor = db.cursor

python 数据库查询条件`不等于`

1.python 数据库查询条件不等于 当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 '不等于' 查询操作. 2.例如:通过以下语句进行'不等于查询' data = User-objects.filter(id != '1').values('id','name','age') 此语句会报错 3.解决方案: from django.db.models import Q data = User.objects.filter(~Q(id= '1

python数据库查询转dataframe

1. 场景描述 python环境下需要从greenplum/postgresql中,获取算法执行的数据,但是从数据库中查询出来是数组格式的,算法无法使用,需要转换为dataframe格式. 2. 解决方案 结合第三方pandas使用 2.1 数据库调用类 import dbgp as dbgp data = dbgp.queryGp(sql) 2.2 数据库类 ## 导入psycopg2包 import pandas as pd import psycopg2 def queryGp(sql):

Python数据库编程pymysql

ython数据库编程pymysql 一.数据库编程介绍 数据库编程就是针对数据库的操作,通过编写程序的方式,让程序做为数据库的客户端进行数据库操作. 对于MySQL的操作我们可以通过SQL语句,但是有很多情况下我们需要写入MySQL的数据非常多,并且是在其他平台获取数据的同时写入MySQL,需要边获取边写入,这种情况是不适合使用SQL语句的. 有些情况是我们需要读取MySQL中的数据,来给代码使用,这个时候我们需要将数据直接读到代码中,也不适合使用SQL语句. Python提供了一个数据库编程的