1、Python 对数据库的支持python
一、Python的 DB-API 为大多数数据库提供了接口。mysql
二、使用流程为:①引入API模块②获取与数据库的链接③执行SQL语句和存储过程④关闭数据库链接。sql
三、Python2 与 Python3 在于数据库链接时使用的包不同。其中 Python2 使用的是MySQLdb;而Python3 使用的是pymysql。数据库
四、Python 2 安装MySQL是经过MySQLdb接口。编程
下载地址https://pypi.python.org/pypi/MySQL-python/1.2.5 分别对应Windows 和源码安装。网络
五、Python 3 安装MySQL数据库pymsql包:(Python 3 客户端)ide
5.1 输入import pymysql 而后鼠标单击pymysql 而后同时按Alt+enter 会自动进行安装。函数
5.2 在 pycharm 软件上点击 Terminal 输入命令 pip install pymysql 便可安装此包。性能
二、fetch
2、mysql 的事物:
事务是必须知足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)。
①原子性:一组事务,要么成功;要么撤回。例如一次处理200个事物,有一个失败,就会撤回该任务。
②稳定性 : 有非法数据(外键约束之类),事务撤回。
③隔离性:事务独立运行。一个事务处理后的结果,影响了其余事务,那么其余事务会撤回。
事务的100%隔离,须要牺牲速度
④可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项决定何时把事务保存到日志里。
3、常见的MySQL操做命令
一、Linux命令下进入MySQL:
[root@JSH-01 ~]# mysql -uroot -p123456 输入帐户密码链接本机
[root@JSH-01 ~]# mysql -uroot -p123456 -h127.0.0.1 -p3306 输入帐户密码IP及端口链接远程机器
二、受权用户 & 受权超级用户
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;
三、进入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 中的 关键字*
四、mysql> show variables like '%auto%'; 自动提交(将事物结果自动提交)
五、更改密码 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
4、 经过Python 链接 MySQL
一、Python 3 安装MySQL数据库pymsql包。详见如上介绍。
二、在MySQL上进行受权
grant all privileges on *.* to 'username'@'%' identified by ''password' with grant option;
三、在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.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
此时链接正常:
5、游标
游标是处理数据的一种方法,为了查看或者处理结果集中的数据。
能够把游标看成一个指针,它能够指定结果中的任何位置,而后容许用户对指定位置的数据进行处理
一、建立游标 cursor()
conn = pymysql.connect(host="192.168.6.137", port=3306, user='root', passwd='123456', db="test") cus = conn.cursor() #定义游标
二、游标的经常使用操做
# 取全部的结果,取结果以前,必定要先执行sql 即 cus.execute(sql) # cus.fetchall() # 取一个结果 # cus.fetchone() # 取10行数据 # cus.fetchmany(size=10) # 关闭游标 # cus.close()
6、MySQL 链接池:PooledDB
在python编程中可使用pymysql进行数据库的链接/查询/插入/更新等操做,可是每次链接mysql数据库请求时,都是独立的去请求访问,至关浪费资源,并且访问数量达到必定数量时,对mysql的性能会产生较大的影响。所以,实际使用中,一般会使用数据库的链接池技术,来访问数据库达到资源复用的目的。
数据库链接池负责分配、管理和释放数据库链接。它容许应用程序重复使用一个现有的数据库链接,而不是再从新创建一个。
示例:
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()
7、建立表格
一、设计表结构
二、经过以下代码在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()
结果以下:
8、增长数据
9、查询和删除数据
10、改数据和索引