MySQL与Python交互
准备数据
- 创建数据库
create database if not exists Content;
- 创建数据表
-- 创建一个商品 goods 数据表
CREATE TABLE `goods` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`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.000',
`is_show` tinyint(4) NOT NULL DEFAULT '1',
`is_saleoff` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 插入数据
-- 插入数据
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(30) not null);
- 将商品表中的商品种类查询并插入到商品分类表里
-- 注意:并不需要使用到values字段来进行数据插入
insert into goods_cates(name) select cate_name from goods group by cate_name;
- 将商品表中的商品种类更改为商品表分类表对应的ID
update good inner into goods_cates on good.cate_name=goods_cates.name set good.cate_name=good_cates.id;
安装pymysql
pip install pymysql
Python操作MySQL步骤
Connection 对象
- 用于建立与数据库连接
- 创建对象 :调用
connect()
方法 cursor()
: 返回Cursor对象,用于执行sql语句并获得结果
Cursor对象
- 用于执行sql语句,使用频度最高的语句为select、insert、update、delete
- 获取cursor对象:调用Connection对象的cursor()方法----参考源码
对象方法
注意:在进行插入操作的时候,如果是InnDB引擎的话,记得使用commint来进行提交事务,其他引擎不需要使用
close()
: 关闭,先关闭游标,在关闭连接execute(operation [,paramenters])
: 执行语句,返回受影响的行数,主要用于执行insert 、update、delete语句,也可以执行create、alter、drop等语句commint
: 提交事务
python操作mysql
使用面向对象完成商品查询
• 输入1:查询所有商品
• 输入2:所有商品种类
• 输入3:查询所有品牌
• 输入4:退出
• 输入5:插入数据
# -*- coding: utf-8 -*-
# Author : Small-J
# 2021/1/27 6:18 下午
"""
练习2:
使用面向对象完成商品查询
• 输入1:查询所有商品
• 输入2:所有商品种类
• 输入3:查询所有品牌
• 输入4:退出
• 输入5:插入数据
"""
import pymysql
class MySQL(object):
def __init__(self):
"""
this is Initialization mysql connection
创建数据库连接对象
"""
self.conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', database='Job')
self.cursor = self.conn.cursor()
def select_api(self, sql) -> None:
"""
query call interface
:param sql: this is sql sentence
:return: print all data
"""
self.cursor.execute(sql)
return print(self.cursor.fetchall())
def select_data(self):
"""输入1,查询所有商品"""
sql = "select * from goods;"
return self.select_api(sql)
def select_goods__two(self):
"""输入2,查询所有商品的种类"""
sql = "select cate_name from goods group by cate_name"
return self.select_api(sql)
def select_goods_cates_three(self):
"""输入3,查询所有品牌"""
sql = "select * from goods_cates"
return self.select_api(sql)
def insert_goods_cates_data(self):
"""输入5, 插入数据"""
sql = "insert into goods_cates(name) values (%s)"
args = ('小霸王学习机', )
self.cursor.execute(sql, args)
self.conn.commit()
def input_number(self):
while True:
print('输入1:查询所有商品')
print('输入2:所有商品种类')
print('输入3:查询所有品牌')
print('输入4:退出')
print('输入5:插入数据')
print('-'*100)
num = int(input("请输入你要输入的数字 :"))
if num == 1:
self.select_data()
elif num == 2:
self.select_goods__two()
elif num == 3:
self.select_goods_cates_three()
elif num == 4:
print('see you')
break
elif num == 5:
self.insert_goods_cates_data()
else:
raise ValueError('Please enter a vaid number')
def __del__(self):
self.conn.close()
self.cursor.close()
def run(self):
"""主程序入口"""
self.input_number()
# self.select_data()
if __name__ == '__main__':
mysql = MySQL()
mysql.run()