1、python3 MySQL数据库链接模块

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

PyMySQL模块下载地址:https://github.com/PyMySQL/PyMySQL

安装PyMySQL模块的方法:

#(1)pip方式安装
$pip install PyMySQL #(2)克隆安装
$git clone https://github.com/PyMySQL/PyMySQL
  $cd PyMySQL
  $python3 setup.py install #(3)源码安装
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
  $ cd PyMySQL*
  $python3 setup.py install

2、PyMySQL的API参考

(1)链接对象API:

classpymysql.connections.Connection(host=None, user=None, password='', database=None, port=0, unix_socket=None, charset='', sql_mode=None, read_default_file=None, conv=None, use_unicode=None, client_flag=0, cursorclass=<class 'pymysql.cursors.Cursor'>, init_command=None, connect_timeout=10, ssl=None, read_default_group=None, compress=None, named_pipe=None, no_delay=None, autocommit=False, db=None, passwd=None, local_infile=False, max_allowed_packet=16777216, defer_connect=False, auth_plugin_map={}, read_timeout=None, write_timeout=None, bind_address=None, binary_prefix=False)

使用MySQL服务器表示一个套接字,创建类实例的方法是调用connect(),将创建一个MySQL链接对象,建立连接可使用的参数如下:

host:数据库服务器主机名可以是IP或域名

user:用户登陆名

password:用户名密码
database:要使用的数据库名

port:端口号默认3306

bind_address:多网口是绑定网络接口,可以是主机名或IP

unix_socket:指定套接字链接

read_timeout:读取连接的超时时间

write_timeout:写入连接的超时时间

carset:指定字符集
sql_mode:指定SQL_MODE

read_defautl_file:指定my.cnf配置文件读取参数

init_command:建立连接时运行的初始SQL语句

链接对象使用的方法:

conn.close()   关闭链接

conn.commit()  提交更改到数据库服务器

conn.cursor(cursor=None)  创建一个新的游标来执行查询,cursor指定游标类型:Cursor、SSCursor、DictCursor或SSDictCursor,没有指定即使用光标

conn.open   如果链接处于打开状态则返回true

conn.ping(reconnect=True)  检查服务器是否存在,reconnect为True时重新链接

conn.rellback()   回滚当前事务

(2)游标对象API

class pymysql.cursors.Cursor(connection)  :创建与数据库交换的对象,对象表示数据库游标,用于管理提取操作的上下文

游标的方法:

cursor.callproc(procname)  查看数据库存储过程

cursor.close() 关闭游标

cursor.execute(query,args=None) 执行查询,query查询参数为字符串,args可以是元组,列表或字典,用于查询的参数,返回类型为INT

cursor.executemany(query,seq_of_parameters) 多次查询返回结果

cursor.fetchall()  获取所有行

cursor.fetchmany(size=None) 获取指定的行数

cursor.fetchone() 获取下一行

cursor.max_stmt_length=1024000  executemany()生成的最大语句大小

cursor.mogrify(query,args=None)  通过调用execute()方法返回发送到数据库的字符串

(3)其它对象API

class pymysql.cursors.SSCursor(connection)  :用于返回大量数据的查询

class pymysql.cursors.DictCursor(connection)  :用于将结果作为字典返回的游标

class pymysql.cursors.SSDictCursor(connection)  :用于无缓冲的游标,它将结果作为字典返回

3、pymysql使用

(1)MySQL查询操作:

import pymysql

#创建数据库链接,分别指定主机、用户、密码和数据库名,必须保证用户有权限链接
db=pymysql.connect('10.0.1.198','test1','123.com','test') #创建游标对象
cursor = db.cursor() #使用execute()方法执行SQL语句
cursor.execute('select * from test1')
#获取单条数据
print(cursor.fetchone())
#获取N条数据
print(cursor.fetchmany(3))
#获取所有数据,序列形式 
data = cursor.fetchall()
print(data) #关闭游标
cursor.close()
#关闭链接
db.close()

(2)获取字典类型数据:

import pymysql
#创建数据库链接,分别指定主机、用户、密码和数据库名,必须保证用户有权限链接
db=pymysql.connect('10.0.1.198','test1','123.com','test')
#创建游标对象,指定数据类型为字典,将打印key,value
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
#使用execute()方法执行SQL语句
cursor.execute('select * from test1') #获取所有数据,字典形式
data = cursor.fetchall()
print(data) #关闭数据库链接
db.close()

(3)MySQL更新操作:

import pymysql

conn = pymysql.connect(host='10.0.1.198',port=3306,user='test1',passwd='123.com',db='test')
cursor = conn.cursor()
sql = "update test1 set age=28 where id=4"
cursor.execute(sql)
#提交语句到数据库
conn.commit()
cursor.close()
conn.close()

(4)插入多条语句:

import pymysql

conn = pymysql.connect(host='10.0.1.198',port=3306,user='test1',passwd='123.com',db='test')
cursor = conn.cursor()
l1 = [
('k1','aa',22,''),
('k2','bb',23,''),
('k3','cc',24,''),
('k4','dd',25,'')
]
#定义数据库语句
sql = "insert into test1(name,sex,age,tel) values(%s,%s,%s,%s)"
#executemany()插入多条数据
cursor.executemany(sql,l1)
#获取新增数据自增ID
print(cursor.lastrowid)
#提交语句到数据库
conn.commit()
cursor.close()
conn.close()

(5)创建数据库表:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/1/30 17:19
# @Author : Py.qi
# @File : create_database.py
# @Software: PyCharm import pymysql conn = pymysql.connect('10.0.1.198','test1','123.com')
#创建游标对象,字典输出
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('drop database if exists student')
cursor.execute("create database student character set 'utf8' collate utf8_general_ci") #如果表存在则删除
cursor.execute('drop table if exists student.test2')
#sql建表语句
sql = '''create table student.test2(
id int not null auto_increment primary key,
name char(8) not null,
age int not null)'''
#执行建表语句
cursor.execute(sql) cursor.close()
conn.close()

(6)数据回滚操作:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/1/30 14:53
# @Author : Py.qi
# @File : mysqldb_clien.py
# @Software: PyCharm import pymysql
#创建数据库链接,分别指定主机、用户、密码和数据库名,必须保证用户有权限链接
db=pymysql.connect('10.0.1.198','test1','123.com','test')
#创建游标对象
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
#使用execute()方法执行SQL语句 sql2 = "insert into test1(name,sex,age,tel) values('zz','ee',21,'8999')"
try:
cursor.execute(sql2)
#提交到数据库执行
db.commit()
except:
#发生错误时回滚操作
db.rollback() #获取所有数据,序列形式
data = cursor.fetchall()
print(data) #关闭数据库链接
cursor.close()
db.close()

(7)错误处理:

DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:

异常 描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。

-----------------------------------------------------------------------------------------------------------------------------------------

python3之pymysql模块的更多相关文章

  1. python3使用pymysql模块,连接mysql数据库,实现新增、查询和更新操作

    1.环境数据准备: python3环境.pymysql模块 mysql数据库:本次代码中用到的数据库为本地的testdb数据库,user表(表字段比较简单,只有主键id,手机号mobile,密码pas ...

  2. python3中pymysql模块安装及连接数据库(同‘python安装HTMLTestRunner’)

    https://pypi.org/project/PyMySQL/#files 安装完成之后就是连接数据库了 机器上安装了mysql的数据库,并且已经创建了两张表用于测试 python3连接数据库及删 ...

  3. 【Python3之pymysql模块】

    一.什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Python 数据库 ...

  4. 3-Ubuntu下python3安装pymysql模块(1)

    命令:sudo pip3 install pymysql

  5. python3中pymysql模块的事务操作

    try:    cursor.execute(sql_1)     cursor.execute(sql_2)     cursor.execute(sql_3) except Exception a ...

  6. Python全栈 MySQL 数据库 (引擎、事物、pymysql模块、orm)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     存储引擎(处理表的处理器)     基本操作:         ...

  7. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  8. python实战第一天-pymysql模块并练习

    操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 安装pymysql模 ...

  9. python如何使用pymysql模块

    Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而M ...

随机推荐

  1. Spring Cloud与微服务构建:微服务简介

    Spring Cloud与微服务构建:微服务简介 单体架构及其不足 1.单体架构简介 在软件设计中,经常提及和使用经典的3曾模型,即表示层.业务逻辑层和数据访问层. 表示层:用于直接和用户交互,也成为 ...

  2. Docker Machine 和 Docker Engine 的区别

    Docker Engine 当人们提到 Docker,一般而言,大家说的是 Docker Engine,如下图:  它是一个 client-server application. Docker Eng ...

  3. 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告

    P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...

  4. 【uoj121】 NOI2013—向量内积

    http://uoj.ac/problem/121 (题目链接) 题意 给出${n}$个${d}$维向量,问是否有两个不同的向量的内积是${k}$的倍数. Solution 又卡了一上午常数,我弃了T ...

  5. Mysql分页显示

    第一部分:看一下分页的基本原理:   mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20************* ...

  6. codeforces contest 1111

    A. Superhero Transformation 题意: 元音和元音,辅音和辅音字母之间可以互相转换,问两个字符串是否想同: 题解:直接判断即可: #include<bits/stdc++ ...

  7. 【bzoj4826】影魔

    Portal --> bzoj4826 Solution 为什么莫名读了很长时间的题...== 逐渐不会语文qwq 貌似这题的做法很多,丢上来的话是因为..这个化简条件的过程莫名爽哈哈哈哈哈 注 ...

  8. MatConvNet+Matlab2017a+CUDA8.0安装

    安装过程参照MatConvNet官网给出的步骤: http://www.vlfeat.org/matconvnet/install/ 1.安装CUDA8.0+cudnn6.0 参见之前的博客 2.安装 ...

  9. 在Ubuntu16.04上安装virtualbox后无法装载vboxdrv模块

    首先按照:http://blog.csdn.net/ipsecvpn/article/details/52175279 这个网址上的教程安装, 安装完成后报错:大体意思就是vboxdrv没有被内核装载 ...

  10. socket利用多线程实现一对多通信

    1.服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接.将accept()写入死循环,每次连接一个客户端,开一个线程. 2.一般情况下建立s ...