Mysql

  • 引擎
  • 外键
  • 表之间的关联
  • Python 连接数据库
  • Python 中类的实现

引擎

查看引擎 show engines

可以了解到默认引擎为 MyISAM,此引擎不支持外键


修改默认引擎

此处以 phpstudy 修改配置文件 my 为例

文件位置:phpStudy\PHPTutorial\MySQL

第一步:将配置文件里的默认引擎修改

第二步:关闭 phpstudy 服务

第三步:删除日志文件

文件位置:phpStudy\PHPTutorial\MySQL\data


第四步:重启 phpstudy 服务


第五步:cmder 连接 mysql,查看默认引擎

外键

创建班级表

CREATE TABLE classes(id INT(4) NOT NULL PRIMARY KEY,NAME VARCHAR(36)
);

创建表的同时便给字段添加外键约束 创建学生表(指定 cid 为外键)

CREATE TABLE student(sid INT(4) NOT NULL PRIMARY KEY,sname VARCHAR(30),cid INT(4),CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES classes(id)
);

指定外键具体语法

[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]

特别注意

删除主表会报错 drop table classes;


删除附表不会报错 drop table student;

创建表之后给字段添加外键约束

创建学生表

CREATE TABLE student(sid INT(4) NOT NULL PRIMARY KEY,sname VARCHAR(30),cid INT(4) NOT NULL
);

添加外键约束

ALTER TABLE student ADD CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES classes(id);

删除外键约束

ALTER TABLE student DROP FOREIGN KEY fk_cid;

表之间的关联

创建数据库

CREATE DATABASE `taobao` CHARSET=utf8;

指定使用的数据库

use taobao;

创建表

CREATE TABLE goods(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VARCHAR(150) NOT NULL,cate_name VARCHAR(40) NOT NULL,brand_name VARCHAR(40) NOT NULL,price DECIMAL(10,3) NOT NULL DEFAULT 0,is_show TINYINT NOT NULL DEFAULT 1,is_saleoff TINYINT NOT NULL DEFAULT 0
);

填充表数据

INSERT INTO goods VALUES(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'x240 超极本','超级本','联想','4880',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'u330p 13.3英寸超极本','超级本','联想','4299',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'svp13226scb 触控超极本','超级本','索尼','7999',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',DEFAULT,DEFAULT);
INSERT INTO goods VALUES(0,'商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);

创建分类表

CREATE TABLE goods_cates(id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,NAME VARCHAR(40) NOT NULL
);

根据商品种类进行分类

SELECT cate_name FROM goods GROUP BY cate_name;

将分类后的结果查询并插入分类表中

INSERT INTO goods_cates (NAME) SELECT cate_name FROM goods GROUP BY cate_name;

将商品表中的商品分类与分类表中的(id)对应

UPDATE goods g INNER JOIN goods_cates c ON g.`cate_name`=c.`name` SET g.`cate_name`=c.`id`;

Python 连接数据库

数据库内容

下载 pymysql 库

pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

在 Python 中实现相关代码

import pymysql# 1. 连接 mysql 数据库
# 端口号默认为 3306 主机号默认为 127.0.0.1 或 localhost 用户名为 root 密码为 root 数据库选择 taobao 编码格式选择 utf-8
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root", db="taobao", charset="utf8")# 2. 获取 cursor 游标对象 并把游标对象赋值给变量 cs
cs = conn.cursor()# 3. 通过游标对象 执行 sql 语句 execute 有返回值 且为受影响记录的行数
r = cs.execute("select * from goods;")
print(r)
# output:21# 4. 获取数据
# 4.1 获取单条
print(cs.fetchone())    # 第 1 条数据
print(cs.fetchone())    # 第 2 条数据
# output:(22, 'r510vc 15.6英寸笔记本', '5', '华硕', Decimal('3399.000'), 1, 0)
# output:(23, 'y400n 14.0英寸笔记本电脑', '5', '联想', Decimal('4999.000'), 1, 0)# 4.2 获取多条  size = None 默认获取一条
print(cs.fetchmany()) # 第 3 条数据
print(cs.fetchmany(2))  # 获取 size 条 第 4 , 5 条数据
# output:((24, 'g150th 15.6英寸游戏本', '4', '雷神', Decimal('8499.000'), 1, 0),)
# output:((25, 'x550cc 15.6英寸笔记本', '5', '华硕', Decimal('2799.000'), 1, 0), (26, 'x240 超极本', '7', '联想', Decimal('4880.000'), 1, 0))# 4.3 获取全部
print(cs.fetchall())     # 6-21# 4.4 全部获取完之后 获取为空值
print(cs.fetchone())     # 返回 None
# output:None# 5. 关闭
# 5.1 关闭游标对象
cs.close()# 5.2 关闭连接对象
conn.close()

Python 连接中的异常处理机制

import pymysqltry:conn = pymysql.connect(host="127.0.0.1", port=3307, user="root", passwd="root", db="mb", charset="utf8")
except Exception as e:  # e = Exception()print(e)print(e.args[0])# output:(2003, "Can't connect to MySQL server on '127.0.0.1' ([WinError 10061] 由于目标计算机积极拒绝,无法连接。)")# output:2003

Python 中类的实现

商品类

import pymysql
"""
1. 连接数据库 在实例化的时候自动连接数据库
2. 定义获取单条数据的方法
3. 实现在程序执行的完毕的时候 自动关闭连接
"""class MyTb(object):# 初始化时 自动连接数据库def __init__(self):try:self.conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root", db="taobao", charset="utf8")except Exception as e:print(e)# 获取单条数据def get_one(self):# 获取游标cs = self.conn.cursor()# 执行 sql 语句sql = "select * from goods;"cs.execute(sql)# 获取执行的结果onedata = cs.fetchone()# 关闭cs.close()return onedata# 获取多条def get_many(self, s):# 获取游标cs = self.conn.cursor()# 执行 sql 语句sql = "select * from goods;"cs.execute(sql)# 获取执行结果manydatas = cs.fetchmany(s)return manydatas# 获取全部def get_all(self):# 获取游标cs = self.conn.cursor()# 执行 sql 语句sql = "select * from goods;"cs.execute(sql)# 获取执行的结果alldatas = cs.fetchall()# 关闭cs.close()return alldatasdef __del__(self):# 此处不关闭游标没关系 因为每获取一次数据时 都重新创建了游标self.conn.close()def main():tb = MyTb()one = tb.get_one()print(one)many = tb.get_many(2)print(many)all = tb.get_all()print(all)if __name__ == '__main__':main()# output:(22, 'r510vc 15.6英寸笔记本', '5', '华硕', Decimal('3399.000'), 1, 0)
# output:((22, 'r510vc 15.6英寸笔记本', '5', '华硕', Decimal('3399.000'), 1, 0), (23, 'y400n 14.0英寸笔记本电脑', '5', '联想', Decimal('4999.000'), 1, 0))
# output:22 到 42

商品查询类

import pymysql
"""
使用面向对象完成商品查询
• 输入1:查询所有商品
• 输入2:所有商品种类
• 输入3:查询所有品牌
• 输入4:退出
• 输入5:插入数据
"""class TB(object):def __init__(self):self.conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root", db="taobao", charset="utf8")self.cs = self.conn.cursor()def run(self):while True:num = self.print_menu()if num == '1':self.show_all_goods()elif num == '2':self.show_all_cates()elif num == '3':self.show_all_brands()elif num == '4':breakelif num == '5':self.add_cate()else:print("输入有误,请重新输入")@staticmethoddef print_menu():print("-----mb shop-----")print("输入1:查询所有商品")print("输入2:所有商品种类")print("输入3:查询所有品牌")print("输入4:退出")print("输入5:添加商品数据")num = input("请输入:")return num# 查询所有商品def show_all_goods(self):sql = "select * from goods;"self.cs.execute(sql)res = self.cs.fetchall()for data in res:print(data)self.execuate_sql(sql)# 所有商品种类def show_all_cates(self):sql = "select * from goods_cates;"self.cs.execute(sql)res = self.cs.fetchall()for data in res:print(data)self.execuate_sql(sql)def execuate_sql(self, sql):self.cs.execute(sql)res = self.cs.fetchall()for data in res:print(data)# 查询所有品牌def show_all_brands(self):sql = "select distinct brand_name from goods;"self.execuate_sql(sql)def add_cate(self):name = input("请输入新商品的分类名字")sql = f"insert into goods_cates (name) values ('{name}')"self.cs.execute(sql)self.conn.commit()def __del__(self):self.cs.close()self.conn.close()def main():tb = TB()tb.run()if __name__ == '__main__':main()

对数据进行增删改查

import pymysql
"""
数据 增改删 --> 数据修改
MyISAM  --> 不需要提交事务就可以修改数据
Innodb  -->  修改它的表数据 进行提交事务
conn.commit() 提交事务如果说多条 sql 语句执行 只要有一条报错 插入不成功
"""def change_tb():try:conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="root", db="mysql_2", charset="utf8")cs = conn.cursor()"""必要性:以下二处 sql 代码均正确才能插入数据"""sql = "insert into student (sid,sname) values (1,'XXXXXX');"cs.execute(sql)sql1 = "insert into student (sid,sname) values (2,'zs666');"cs.execute(sql1)# 提交事务conn.commit()# 关闭游标对象cs.close()# 关闭连接对象conn.close()except Exception as e:  # 细分异常print(e)if __name__ == '__main__':change_tb()

MySQL 数据库(Python 连接数据库)相关推荐

  1. mysql数据库python基础知识_python学习之Mysql数据库编程基础知识介绍

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Pytho ...

  2. pymysql连接mysql数据库try_pymysql 连接数据库和基本使用

    pymysql 连接mysql数据库import pymysql.cursors # 连接数据库配置信息 connection = pymysql.connect(host='localhost', ...

  3. MySQL数据库(python)

    理解表:数据库之 表与表之间的关系 神器推荐:navicat 安装教程原网址http://www.cnblogs.com/iscodercn/p/5488633.html section A 数据库系 ...

  4. python接口自动化测试书籍_skPython接口自动化测试 自动化测试教程书籍 用Python实现UI自动化测试 轻松入门Python语法 MySQL数据库 Python基础教程书籍...

    1 本书整体设计思想 . 1 1.1 为什么要做懂技术的测试人员 . 2 1.2 为什么选择这本书. 4 1.3 为什么选择Python 5 1.4 本书能给你带来什么 . 6 1.5 自动化代码的设 ...

  5. mysql数据库已连接数据库_001. 【已解决】Java连接MYSQL 数据库的连接步骤

    这篇文章主要以MySQL为例讲下Java如何连接到数据库的. 当然,首先要安装有JDK(一般是JDK1.5.X).然后安装MySQL,这些都比较简单,具体过程就不说了.配置好这两个环境后,下载JDBC ...

  6. matlab连接mysql数据库_matlab连接数据库的问题

    首先要安装mysql驱动程序包 Step 1: 将mysql-connector-java-5.1.7-bin.jar文件拷贝到......\MATLAB\R2009a\java\jar\toolbo ...

  7. odbc数据 mysql数据库_odbc连接数据库

    php操作数据库有很多种方式,如mysql,mysqli,odbc,pdo等.MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension.MySQLi 的 i 代表 Improvem ...

  8. jndi mysql数据库_JNDI连接数据库

    一.数据源简介: *********************************************************************************** 在Java语言 ...

  9. mye连接mysql数据库_myeclipse连接数据库

    myeclipse连接数据库插件是eclipse连接sql server的插件,包含msbase.jar.mssqlserver.jar.msutil.jar三个jar包,下载安装一下就可实现连接了, ...

  10. mysql数据库 sid_jdbc连接数据库使用sid和service_name的区别

    问题描述: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connect ...

最新文章

  1. 如何求一个数的因数 c语言代码,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  2. Leetcode1703. 得到连续 K 个 1 的最少相邻交换次数[C++题解]:难(货仓选址加强版+滑动窗口+前缀和)
  3. 大端 小端 原码 反码 补码 及内存中的表现
  4. Kali Linux 下渗透测试 | 3389 批量爆破神器 | hydra | 内网渗透测试
  5. hdu 3951 硬币围成一圈(博弈)
  6. 在浏览器控制台输出内容 console.log(string);
  7. java 线程状态_面试官问:为什么Java线程没有Running状态?我懵了
  8. IOS9 微信sdk升级指南
  9. 小米10至尊纪念版今日开卖:120hz高刷+120W秒充
  10. 【组件】大数据框架安装功能来划分
  11. su灯光插件_lightup插件下载|lightup for sketchup下载v4.0中文免费版 附使用教程 - 欧普软件下载...
  12. 计算机管理中看不到iis,Win10系统找不到internet信息服务(IIS)管理器怎么办
  13. 迷宫算法总结(总路径数、方法数)
  14. 英文书信格式——书写款式(转载)
  15. 错误 D8016 “/ZI”和“/GL”命令行选项不兼容
  16. Usability Testing Demystified
  17. 旧版macOS官方下载地址
  18. 【19调剂】华南师范大学脑科学与康复医学研究院2019年拟接收学术型研究生调剂信息...
  19. 车辆前组合灯出口德国做的E-mark认证可以在其他国家使用吗?
  20. AR可视化远程协助,医护诊疗,对讲指挥调度系统方案

热门文章

  1. 商业智能BI财务分析,狭义的财务分析和广义的财务分析有何不同?
  2. 在Python中,输出格式:%d , %6d , %-6d, %06d , %.6f的一些区分
  3. plupload怎么设置属性_Plupload设置自定义参数
  4. 基于UDP实现NAT穿透
  5. 从蛛丝马迹中探索氢弹的奥秘
  6. 程序员面试第一步:如何让你的简历更受青睐,阿里面试官总结了四点
  7. CF607B - Zuma题解
  8. 谈思生物公益直播-吉美瑞生CEO《后新冠时代肺前体细胞新药研发》
  9. 【nvl函数用法详解】
  10. java中过滤器的接口_java中的过滤器