Python基础——数据库MySQL(0508)

一、Python 对数据库的支持

1、Python的  DB-API 为大多数数据库提供了接口。

2、使用流程为:①引入API模块②获取与数据库的连接③执行SQL语句和存储过程④关闭数据库连接。

3、Python2 与 Python3 在于数据库连接时使用的包不一样。其中 Python2 使用的是MySQLdb;而Python3 使用的是pymysql。

4、Python 2 安装MySQL是通过MySQLdb接口。

    下载地址https://pypi.python.org/pypi/MySQL-python/1.2.5   分别对应Windows 和源码安装。

5、Python 3 安装MySQL数据库pymsql包:(Python 3 客户端)

     5.1 输入import pymysql   然后鼠标单击pymysql  然后同时按Alt+enter   会自动进行安装。

     5.2 在 pycharm 软件上点击 Terminal 输入命令  pip install pymysql  即可安装此包。

     《Python基础——数据库MySQL(0508)》2、

二、mysql 的事物:

     事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)。

    ①原子性:一组事务,要么成功;要么撤回。例如一次处理200个事物,有一个失败,就会撤回该任务。

    ②稳定性 : 有非法数据(外键约束之类),事务撤回。

    ③隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。

                   事务的100%隔离,需要牺牲速度

    ④可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。

       可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项决定什么时候把事务保存到日志里。

三、常见的MySQL操作命令

1、Linux命令下进入MySQL:    

     [root@JSH-01 ~]# mysql -uroot -p123456      输入账户密码连接本机

     [root@JSH-01 ~]# mysql -uroot -p123456 -h127.0.0.1 -p3306  输入账户密码IP及端口连接远程机器

2、授权用户  &  授权超级用户

     grant all privileges on *.* to ‘username’@’%’ identified by ”password’ ;

     其中privileges – 用户的操作权限      grant all privileges   授予所有权限    

           *.*  所有的库所有的表               %代表通配所有IP地址                    password 代表密码

          用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,增加 with grant option

     即 grant all privileges on *.* to ‘username’@’%’ identified by ”password’ with grant option;

3、进入MySQL后,常用的命令(注意使用 ; 因为分号是命令的结尾)

mysql> show  databases;     查看库

mysql> use ID;    切换库(ID指的是库名,例如  name   student  等)

mysql> create database db1;   创建库db1

mysql> show tables;    查看库里的表

mysql> show status;    查看MySQL状态(一般主从同步的时候用的多)

mysql> create  table student(列名1 数据类型,列名2 数据类型……);    创建student表,类型为列名1…

mysql> select version();    查看当前数据库版本

mysql> select user();    查看当前用户

mysql> truncate table    清空表

mysql> drop table  删除表

mysql> drop database  删除数据库

mysql> select * from ID;    查找库名为ID 中的 关键字*

4、mysql> show variables like ‘%auto%’;      自动提交(将事物结果自动提交)

《Python基础——数据库MySQL(0508)》

5、更改密码 UPDATE mysql.user SET password=PASSWORD(“newpwd”) WHERE user=’username’ ;    

四、 通过Python 连接 MySQL

1、Python 3 安装MySQL数据库pymsql包。详见如上介绍。

2、在MySQL上进行授权

      grant all privileges on *.* to ‘username’@’%’ identified by ”password’ with grant option;

3、在pycharm 中通过命令导入pymysql模块连接 MySQL  

import pymysql
conn = pymysql.connect(host="192.168.6.137",port =3306,user="root",passwd="123456",db="test")  #创建连接
print(conn)

也可以直观的定义(使用函数)

def connect_mysql():
    db_config={
        "host":"192.168.6.137",     #定义host
        "port":3306,
        "user":"root",
        "passwd":"123456",
        "db":"python"
        "charset":"utf8"
    }
    con = pymysql.connect(db_config)
    retun con
if __name__ == '__main__':
    con=connect_mysql()

常用的参数包括:host  数据库主机 IP       user 数据库登录名     passwd  数据库登录密码

                         db 要使用的数据库名      port 数据库的TCP端口,默认是3306

                         charset  数据库编码,一般是utf8   (该编码 一般不写)

4、常见的错误信息

4.1 在连接mysql数据库的时候,会报错造成无法连接成功数据库。

     例如:Can’t connect to MySQL server on ‘192.168.6.137’ (timed out)”

     解决:(以 MySQL 安装在 Cent OS 7 为例)

              首先确定连接mysql时候的 账户和密码  是否正确。

              其次检查输入的 IP 是否正确。使用 ifconfig 查看。

              再次确认MySQL宿主机的网络与pycharm所在电脑的网络是否连通。

              然后查看MySQL的3306端口是否打开。必要时重启MySQL服务:/etc/init.d/mysqld restart

              再次关闭防火墙 firewall 即:

                    systemctl stop firewalld.service         #停止运行firewalld服务
                    systemctl disable firewalld.service     #关闭 firewalld服务
                    systemctl mask firewalld.service        #屏蔽该服务,使其不能启动

              停止运行 iptables 防火墙,或   清空其规则   iptables -F

      此时连接正常:《Python基础——数据库MySQL(0508)》

五、游标

      游标是处理数据的一种方法,为了查看或者处理结果集中的数据。

      可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理

1、创建游标    cursor()

conn = pymysql.connect(host="192.168.6.137", port=3306, user='root', passwd='123456', db="test")
cus = conn.cursor()    #定义游标

2、游标的常用操作

# 取所有的结果,取结果之前,一定要先执行sql     即 cus.execute(sql)
# cus.fetchall()
# 取一个结果
# cus.fetchone()
# 取10行数据
# cus.fetchmany(size=10)
# 关闭游标
# cus.close()

六、MySQL 连接池:PooledDB

      在python编程中可以使用pymysql进行数据库的连接/查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。

       数据库连接池负责分配、管理和释放数据库连接。它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

       《Python基础——数据库MySQL(0508)》

示例:

import pymysql
from DBUtils.PooledDB import PooledDB
db_config = {
    "host":"192.168.6.137",
    "port":3306,
    "user":"root",
    "passwd":"123456",
    "db":"mysql",
    "charset":"utf8"
}
sql ="select * from mysql.proc limit 10; "
pool = PooledDB(pymysql,5,**db_config)  #5为最小连接数
conn = pool.connection()
cus = conn.cursor()    #创建游标

try:
    cus.execuute(sql)
    result = cus.fetchall()
    print(result)
    cus.close()
    conn.commit()
except:
    conn.rollback()
finally:
    conn.close()

七、创建表格

1、设计表结构

《Python基础——数据库MySQL(0508)》

2、通过如下代码在MySQL 的 stg库中创建 Course、Score、Student、Teacher、tmp1表。

import pymysql
def connectMysql():
  db_config = {
      "host":"192.168.6.137",
      "port":3306,
      "user":"root",
      "passwd":"123456",
      "db":"stg"
}
  conn = pymysql.connect(**db_config)
  return conn

student =  '''
    create table Student(
      stdid INT PRIMARY KEY,
      stdname varchar(100),
      gender enum('F','M'),
      age INT      
    )
'''
course = '''
    create table Course(
      couid int not null,
      cname varchar(50) not null,
      tid int not null
    )
'''
score = '''
    create table Score(
      sid int not null,
      stdid int not null,
      couid int not null,
      grade int not null
    )
'''
teacher = '''
    create table Teacher(
      tid int not null,
      tname varchar(50) not null     
    )
'''
tmp1 = '''set @i := 0;'''
tmp = '''create table tmp1 as select (@i :=@i +1) as id from information_schema.tables limit 10;'''
if __name__ == '__main__':
    conn = connectMysql()
    cur = conn.cursor()
    try:
        cur.execute(student)
        cur.execute(course)
        cur.execute(score)
        cur.execute(teacher)
        cur.execute(tmp1)
        cur.execute(tmp)
        cur.close()
        conn.commit()
    except:
        conn.rollback()
        print("error")
        raise
    finally:
        conn.close()

结果如下:

《Python基础——数据库MySQL(0508)》

八、增加数据

九、查询和删除数据

十、改数据和索引

 

    原文作者:数据库基础
    原文地址: https://my.oschina.net/u/3821557/blog/1809210
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞