mysql在之前写过一次,那时是我刚刚进入博客,今天介绍一下mysql的python交互,当然前面会把mysql基本概述一下。

  目录:
一、命令脚本(mysql)
1、基本命令
2、数据库操作命令
3、表操作命令
4、数据操作命令
5、查
6、关联
二、python交互
1、数据库连接
2、创建数据库表
3、插入数据
4、更新数据库
5、删除数据
6、数据库查询
三、mysql封装(方便使用)
1、python封装的my_sql类
2、案例(调用my_sql类)

一、命令脚本

1、基本命令

  (1)启动服务

    • 以管理员身份运行cmd
    • net start 服务名称

  (2)停止服务

    • 以管理员身份运行cmd
    • net stop 服务名称

  (3)连接数据库

    • 格式:mysql - u root - p ->输入密码

  (4)退出登录(断开连接)

    • exit或quit

  (5)查看版本(连接后可以执行)

    • select version()

  (6)显示当前时间(连接后可以执行)

    • select now()

  (7)远程连接

    • mysql - h ip地址 - u 用户名 - p --->输入对方mysql密码

2、数据库操作命令

  (1)创建数据库

    • create database 数据库名 charset = utf8

  (2)删除数据库

    • drop database 数据库名

  (3)切换数据库

    • use 数据库名

  (4)查看当前选择的数据库

    • select database()

3、表操作命令

  (1)查看数据库中所有表

    • show tables

  (2)创建表

    • create table 表名(列及类型)

    eg:create table student(id int auto_increment primary key,
               name varchar(20) not null)
    注:auto_increment 自增长      primary key 主键     not null 非空

  (3)删除表

    • drop table 表名

  (4)查看表结构

    • desc 表名

  (5)查看建表语句

    • show create table 表名

  (6)重命名表

    • rename table 原表名 to 新表名

  (7)修改表

    • alter table 表名 add | change | drop 列名

4、数据操作命令

  (1)增

    a、全列插入
      insert into 表名 values(...)
      eg:
      insert into student values(0, "tom", "北京")
      主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功以后以实际数据为准
    b、缺省插入
      insert into 表名(列1,列2..) values(值1,值2..)
    c、同时插入多条数据
      insert into 表名 values(...), (...), ...

  (2)删

    delete from 表名 where 条件
    不写条件则全删

  (3)改

    update 表名 set 列1 = 值1, 列2 = 值2, ... where 条件

  (4)查

    查询表中的全部数据
    select * from 表名

5、查

  (1)基本语法

    select * from 表名

      • from关键字后面是表名,表示数据来源于这张表
      • select后面写表中的列名,如果是 * 表示在结果集中显示表中额所有列
      • 在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中
      • 如果要查询多个列,之间使用逗号分隔

    # eg:select name as a,age from student;

  (2)消除重复行

    在select后面列前面使用distinct可以消除重复的行
    eg:select distinct gender from student

  (3)条件查询

    a、语法
      select * from 表名 where 条件
    b、比较运算符
      等于(=) 大于(>) 小于(<) 大于等于(>=) 小于等于(<=) 不等于(!= 或 <>)
    c、逻辑运算符
      and or not
    d、模糊查询
      like
      % 表示任意多个任意字符
      _ 表示一个任意字符
    e、范围查询
      in 表示在一个非连续的范围内
      between。。。and。。。 表示在一个连续的范围内
      eg:where id in (8, 10, 13)
    f、空判断
      注意:null与""是不同的
      判断空:is null
      判断非空:is not null
    g、优先级
      小括号,not,比较运算符,逻辑运算符
      and比or优先级高,同时出现并希望先选or,需要结合括号来使用

  (4)聚合

    为了快速得到统计数,提供了5个聚合函数
    a、count(*) 表示计算总行数,括号中可以写 * 或列名
    b、max(列) 表示求此列的最大值
    c、min(列) 表示求此列的最小值
    d、sum(列) 表示求此列的和
    e、avg(列) 表示求此列的平均值

  (5)分组

    按照字段分组,表示此字段相同的数据会被放到一个集合中。分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集中

    可以对分组后的数据进行统计,做聚合运算
    select 列1, 列2, 聚合... from 表名 group by 列1, 列2 having 列1, 列2
    eg:  查询男女生总数
      select gender, count(*) from student group by gender
    where与having的区别:where是对from后面指定的表进行筛选,属于对原始数据的筛选;having是对group by的结果进行筛选。

  (6)排序

    select * from 表名 order by 列1 asc | desc, 列2 asc | desc, ...
    a、将数据按照列1进行排序,如果某些列1的值相同则按照列2排序
    b、默认按照从小到大的顺序
    c、asc升序
    d、desc降序

  (7)分页

    select * from 表名 limit start, count
    从start开始,看count条

6、关联

  • 建表语句

  (1)create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null)
  (2)create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not bull, foreign key(classid) references class(id))

  • 插入一些数据:

  (1)insert into class values(0, "python1", 50), (0, "python2", 60), (0, "python3", 70)

  (2)insert into students values(0, "tom", 1, 1)

  • 关联查询:

  (1)select students.name, class.name from class inner join students on class.id = students.classid

  • 分类:

  (1)表A inner join 表B
    表A与表B匹配的行会出现在结果集中
  (2)表A left join 表B
    表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充
  (3)表A right join 表B
    表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充

二、python交互

1、连接数据库

 import pymysql

 # 连接数据库
# 参数一:mysql服务所在主机的IP
# 参数二:用户名
# 参数三:密码
# 参数四:要连接的数据库名
db = pymysql.connect("localhost", "root", "", "student") # 创建一个cursor对象
cursor = db.cursor()
-----------------------------------------------------------------------------------------
# 要执行的sql语句
sql = "select version()" # 执行sql语句
cursor.execute(sql) # 获取返回的信息
data = cursor.fetchone()
print(data)
----------------------------------------------------------------------------------------
# 断开
cursor.close()
db.close()

  这里我选择的是pymysql,其实这个和MySQLdb相差无几,命令也很像。连接时,主机IP如果是在本机,直接使用localhost即可,也可以写IP地址,这样可以实现远程的连接。虚线中间部分是要进行不同操作时需要更改的部分。

2、创建数据库表

  上面给出了连接数据库的代码,其实后面的操作就简单多了,外部框架不变,只需要改内部的sql语句,以及个别的一些操作。

 # 检查表是否存在,如果有则删除
cursor.execute("drop table if exists bancard") # 建表
sql = "create table bandcard(id int auto_increment primary key, money int not null)"
cursor.execute(sql)

3、插入数据

 sql = "insert into bandcard values(0, 300)"
try:
cursor.execute(sql)
db.commit() # 执行这条语句才插入
except:
# 如果提交失败,回滚到上一次数据
db.rollback()

4、更新数据库

 sql = "update bandcard set money=1000 where id=1"
try:
cursor.execute(sql)
db.commit()
except:
# 如果提交失败,回滚到上一次数据
db.rollback()

  可以看到,后面的操作基本上以及回归mysql本身,大家记住这样一个流程就可以了。

5、删除数据

 sql = "delete from bandcard where money=200"
try:
cursor.execute(sql)
db.commit()
except:
# 如果提交失败,回滚到上一次数据
db.rollback()

6、数据库查询操作

  • fetchone()

    功能:获取下一个查询结果集,结果集是一个对象

  • fetchall()

    功能:接收全部的返回的行

  • rowcount

    是一个只读属性,返回execute()方法影响的行数

 sql = "select * from bandcard where money>200"
try:
cursor.execute(sql)
# 返回查询结果
reslist = cursor.fetchall()
for row in reslist:
print("%d--%d" % (row[0], row[1]))
except:
# 如果提交失败,回滚到上一次数据
db.rollback()

三、mysql的封装(方便以后使用时直接调用)

 import pymysql

 class my_sql():

     def __init__(self, host, user, passwd, dbName):
self.host = host
self.user = user
self.passwd = passwd
self.dbName = dbName def connect(self):
self.db = pymysql.connect(
self.host, self.user, self.passwd, self.dbName)
self.cursor = self.db.cursor() def close(self):
self.cursor.close()
self.db.close() def get_one(self, sql):
res = None
try:
self.connect()
self.cursor.execute(sql)
res = self.cursor.fetchone()
self.close()
except:
print("查询失败")
return res def get_all(self, sql):
res = ()
try:
self.connect()
self.cursor.execute(sql)
res = self.cursor.fetchall()
self.close()
except:
print("查询失败")
return res def insert(self, sql):
return self.__edit(sql) def update(self, sql):
return self.__edit(sql) def delete(self, sql):
return self.__edit(sql) def __edit(self, sql):
count = 0
try:
self.connect()
count = self.cursor.execute(sql)
self.db.commit()
self.close()
except:
print("事务提交失败")
self.db.rollback()

  上面的类中封装了用python封装了对mysql的连接,增,删,改,查等功能,在今后使用的时候,完全可以直接调用其中的方法,避免重复造轮子嘛。下面给一个使用的案例:

 from my_sql import my_sql

 # 这个是连接mysql的参数,前面有解释到,使用时候连接上自己的数据库就好
s = my_sql("xxx.xxx.xx.x", "xxxx", "xxxxxx", "student") # 查询
res = s.get_all("select * from bandcard where money>200")
for row in res:
print("%d--%d" % (row[0], row[1]))

  当然在你使用的时候要写完整调用的类的路径,我这里是在同一个目录下写的。新建一个自己的文件,引入my_sql中的my_sql类,然后就可以使用了。

mysql及python交互的更多相关文章

  1. MySQL和Python交互

    与Python交互 python3模块名:pymysql conda install pymysql conda install sqlalchemy python2模块名:MySQLdb impor ...

  2. pymysql实现MySQL与Python交互

    常见MySQL操作 所需模块: pip3 install pymysql 查询(fetchone,fetchmany,fetchall): import pymysql #连接 con = pymys ...

  3. 数据库之MySQL与Python交互

    准备数据 创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 ...

  4. MySql与python交互

    No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...

  5. Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)

    为了梦想与了信仰    开局一张图   主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用   先删库 再跑路.....                         ...

  6. MysQL使用一与Python交互

    与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...

  7. MySQL 存储引擎、锁、调优、失误与事务回滚、与python交互、orm

    1.存储引擎(处理表的处理器) 1.基本操作 1.查看所有存储引擎 mysql> show engines; 2.查看已有表的存储引擎 mysql> show create table 表 ...

  8. 开发使用mysql的一些必备知识点整理(四)与python交互

    与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...

  9. MySQL——python交互

    与python交互之前我们需要安装一个MySQL的驱动模块Connector,这个驱动模块直接在cmd命令行输入 pip install mysql.connector 安装是否成功可以接着输入 py ...

随机推荐

  1. (网页)input框怎么覆盖掉数字英文的

    例子1: <input type="text" value="0" onkeyup="cleartwoNum(this)"> / ...

  2. mysql之用户权限管理

    本文内容: 什么是用户权限 恰当的用户权限 查看权限 修改权限 删除权限 首发日期:2018-04-19 什么是用户权限: 每个用户都有自己的用户权限,这些用户权限比如有查询表权限.修改表权限.插入表 ...

  3. PyCharm 专业版激活方法

    郑重声明: JetBrains公司的PyCharm专业版是收费的,本文所述激活方法仅限于短时内体验和试用PyCharm专业版,使用后请当天立即删除.若需要继续使用PyCharm专业版,请在官网购买.当 ...

  4. Spark GraphX快速入门

    GraphX是Spark用于图形并行计算的新组件.在较高的层次上,GraphX通过引入一个新的Graph抽象来扩展Spark RDD:一个定向的多图,其属性附加到每个定点和边.为了支持图计算,Grap ...

  5. 关于wordpress慢的问题

    随笔记载: 关于wordpress访问慢的原因,主要是wordpress采用了google前端库, 需替换wordpress/wp-includes/script-header.php中所有的goog ...

  6. SQL server 获得 表的主键,自增键

    主键: @tableName --表名 @id ---表对应的id SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSIN ...

  7. Lua table笔记

    记录我在使用lua的过程中的一些笔记 默认key为数字递增 local tb={"A",[3]="C","B"} 这个tb通过下标1,2,3 ...

  8. git笔记(2)-常见命令的使用(详解待续)

    1. 常用命令 (1)git --help 帮助命令,其他的类似 (2)git branch 查看分支及其他(创建分支,查看远程分支名称等) (3)git checkout 切换分支以及其他 (3)g ...

  9. 浅析data:image/png;base64的应用

    ...我也是加一个网安交流群发现了他们的入群密码是这个 数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAoCAIAAAAaOwPZAAAAAXNSR ...

  10. C# -- 抽象类与抽象方法

    C#: 抽象类与抽象方法 1.代码 class Program { static void Main(string[] args) { ; i < ; i++) { == ) { Storage ...