MySQL与Python连接的基础操作

—关系型数据库

—在终端中操作数据库

—查看数据库服务器里面的所有的数据库

​show databases​

—选择一个数据库

​use + 数据库名称​

​select * from admin​

—如何退出数据库

​exit;​

—如何创建数据库

​create database 数据库名字​

—如何查看数据库里面的表

​show tables;​

—如何创建数据表

​CREATE TABLE 表名(name VARCHAR(20),owner VARCHAR(20),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE);​

—查看数据表具体详情

​describe 表名;​

—查看数据记录

​select * from 表名​

—往数据表中添加数据记录

​INSERT INTO 表名​

​VALUES('puffball','diane','hamster','f','1999-03-03',NULL);​

—常用数据类型

数值:​​INT:整数;BIGINT:大的整数;FLOAT:浮点数;DOUBLE:浮点数值;​

日期:​​DATE:日期值;TIME:时间值或持续时间;YEAR:年份值;DATETIME:混合日期和时间值;​

字符串:​​CHAR:定长字符串;VARCHAR:变长字符串;TINYTEXT:短文本字符串;TEXT:长文本字符串​

—增删改查数据操作

增:​​INSERT INTO 表名 VALUES(...)给一行增加数据​

​ ​​insert into (name) values ('ppap')给某一格增加元素​

删:​​delete from 表名 where name='mysql'默认直接删除整行数据​​;

改:​​update 表名 set name='旺财' where owner='周星驰';​

查:​​select * from 表名​


—建表约束:

----主键约束:能够唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得某个字段不重复且不为空

​create tables user(id int,name varchar(20),password varchar(20) primary key(id,name))​

​后续再添加主键约束,修改表结构alter table user add primary key(id);​

​删除主键约束alter table user drop primary key(id);​

​修改主键约束 alter table user modify id int primary key;​

— 自增约束:a自动增长数值

​create tables user(id int primary key autu _increment,name varchar(20))​

----唯一约束:约束修饰的字段的值不可以重复,可以为空

​create tables user(id int,name varchar(20),password varchar(20) unique(id,name))​

​create tables user(id int,name varchar(20),password varchar(20));​

​添加唯一约束alter table user add unique(name);​

​添加唯一约束alter table user modify name varchar(20) unique;​

​删除唯一约束alter table user drop index id;​

----非空约束

约束修饰的字段的值不可以空,可以为重复

​create tables user(id int,name varchar(20),password varchar(20) not null(id,name))​

----默认约束:当插入字段值的时候,如果没有传值,就会使用默认值

​create tables user(id int,name varchar(20),password varchar(20) default(id,name))​

----外键约束:涉及到父(主)表和子(副)表,转移表栏

  • 主表中没有的数据值,在副表中,是不可以使用的
  • 主表中的记录被副表引用,是不可以被删除的

​学生表create table student(id int,name varchar(20),password varchar(20))​

​老师表create table teacher(id int,name varchar(20),password varchar(20),class_id int foreign key(class_id) references student(id)​


第一范式—1NF:数据量不宜过长,可以进行分割

第二范式—2NF:除主键外的每一列都必须完全依赖与主键,否则是联合主键

第三范式—3NF:除开主键列的其他列之间不能有传递依赖关系


Python和mysql交互

import pymysql  #导入 pymysql

#打开数据库连接

db= pymysql.connect(host="localhost",user="root",

password="123456",db="test",port=3307)

# 使用cursor()方法获取操作游标

cur = db.cursor()
  • 查询
#1.查询操作

# 编写sql 查询语句 user 对应我的表名

sql = "select * from user"

try:

cur.execute(sql) #执行sql语句

results = cur.fetchall() #获取查询的所有记录

print("id","name","password")

#遍历结果

for row in results :

id = row[0]

name = row[1]

password = row[2]

print(id,name,password)

except Exception as e:

raise e

finally:

db.close() #关闭连接
  • 插入
#2.插入操作

db= pymysql.connect(host="localhost",user="root",

password="123456",db="test",port=3307)

# 使用cursor()方法获取操作游标

cur = db.cursor()

sql_insert ="""insert into user(id,username,password) values(4,'liu','1234')"""

try:

cur.execute(sql_insert)

#提交

db.commit()

except Exception as e:

#错误回滚

db.rollback()

finally:

db.close()
  • 改正
#3.更新操作

db= pymysql.connect(host="localhost",user="root",

password="123456",db="test",port=3307)

# 使用cursor()方法获取操作游标

cur = db.cursor()

sql_update ="update user set username = '%s' where id = %d"

try:

cur.execute(sql_update % ("xiongda",3)) #像sql语句传递参数

#提交

db.commit()

except Exception as e:

#错误回滚

db.rollback()

finally:

db.close()
  • 删除
#4.删除操作

db= pymysql.connect(host="localhost",user="root",

password="123456",db="test",port=3307)

# 使用cursor()方法获取操作游标

cur = db.cursor()

sql_delete ="delete from user where id = %d"

try:

cur.execute(sql_delete % (3)) #像sql语句传递参数

#提交

db.commit()

except Exception as e:

#错误回滚

db.rollback()

finally:

db.close()