一、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 即可安装此包。
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%’; 自动提交(将事物结果自动提交)
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
此时连接正常:
五、游标
游标是处理数据的一种方法,为了查看或者处理结果集中的数据。
可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理
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的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。
数据库连接池负责分配、管理和释放数据库连接。它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
示例:
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、设计表结构
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()
结果如下:
八、增加数据
九、查询和删除数据
十、改数据和索引