python访问mysql

简介

python中的DB-API为大多数数据库实现了接口,使用它连接数据库,就可以使用相同的方式操作各数据库。
使用DB-API基本流程

  1. 引入API模块。
  2. 获取数据库连接参数,打开数据库连接。
  3. 执行SQL语句和存储过程。
  4. 关闭数据库连接。

使用pymysql(同时支持python2和3)作为连接mysql数据库的接口。直接使用pip install pymysql安装即可。
注意:pip安装之后使用pycharmimport pymysql可能出现无法使用的情况,此时可直接在pycharm中安装pymysql包。通过File–>Settings–>Project:XXX–>Project Interpreter可以看到所有已安装的包,点击右边绿色+即可添加。
python2.X中还可以使用MySQLdb(仅支持python2),点击mysqldb可下载安装。

mysql数据库

mysql中的事务

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

  • 原子性:一组事务,要么成功;要么撤回。
  • 稳定性:有非法数据(外键约束之类),事务撤回。
  • 隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里
    mysql中autocommit参数默认为开启,若需要多条sql语句同时提交,可以通过start transaction开启事务,通过rollback回滚事务,通过commit提交事务。
    查询autocommit参数状态:show variables like autocommit

    mysql常用操作

  • mysql安装
    当前mysql最新版本为8.0,常用版本为5.65.7,可以根据自己需要选择合适版本。
    点击mysql下载跳转下载。
  • 常用操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    授权超级用户 grant all privileges on *.* to 'user'@'%' identified by 'password' with grant option;  
    创建普通用户并授权 grant all on *.* to db1.user1 identified by '123456';
    grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
    grant all on db1.* to 'user3'@'%' identified by '231222';
    更改密码 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;

    查看库 show databases;
    查看都有哪些库 show databases;
    查看某个库的表 use db; show tables \G;
    查看表的字段 desc tb;
    查看建表语句 show create table tb;
    当前是哪个用户 select user();
    当前库 select database();
    创建库 create database db1;
    创建表 create table t1 (id int, name char(40) adress varchar(30));
    查看数据库版本 select version();
    查看mysql状态 show status;
    修改mysql参数 show variables like 'max_connect%'; set global max_connect_errors = 1000;
    查看mysql队列 show processlist;
    select * from information_schema.processlist where info is not null;
    sleep的可以忽略,qurey查询的才有

    查询 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';
    插入 update db1.t1 set name='aaa' where id=1;
    清空表 truncate table db1.t1;
    删除表 drop table db1.t1;
    删除数据库 drop database db1;
    修复表 repair table tb1 [use frm];
    查看权限show grants for root@'localhost';

    执行sql mysql -uroot -p1234556 -e "select user,host,password into outfile '/home/mysql/1.txt' from mysql.user;";
  • 数据库连接

    1
    conn=pymysql.connect(host="192.168.48.128",user="xiang",passwd="123456",db="python")

参数说明
host:数据库主机名.默认是用本地主机。
user:数据库登陆名.默认是当前用户。
passwd:数据库登陆的秘密.默认为空。
db:要使用的数据库名.没有默认值。
port:MySQL服务使用的TCP端口.默认是3306,数字类型。

python访问mysql

一个典型的执行过程

1
2
3
4
5
6
7
8
9
10
import pymysql

conn = pymysql.connect(host="192.168.48.136", port=3306, user="xiang", passwd="xiang", db="test") #创建连接
cus = conn.cursor() #连接对象的cursor方法
sql = "select * from test2;"
cus.execute(sql) #执行sql
result = cus.fetchall() #游标对象的方法,获取所有返回结果
print(result)
cus.close()
conn.close()

在实际编码过程中,推荐通过函数形式调用,方便重复使用和修改。

1
2
3
4
5
6
7
8
9
10
11
12
def connect_mysql():
db_config = {
'host': '192.168.48.128',
'port': 3306,
'user': 'xiang',
'passwd': '123456',
'db': 'python',
'charset': 'utf8'
}

cnx = pymysql.connect(**db_config)
return cnx

Recommended Posts