一.pymysql模块
1.简介
(1)简介:
pymsql是Python中用于操作MySQL的模块
(2)安装:
pip install pymysql
2.使用:
关于commit 与roback:https://www.cnblogs.com/1832921tongjieducn/p/11128951.html
关于游标:https://blog.csdn.net/qq_27825451/article/details/81477618
import pymysql
#连接数据库:
pymysql.connect(host='...',port=...,user='...',passwd='...',db='...')
#返回1个连接对象,用于获得游标
#参数说明:
host:IP地址
port:端口号
user:用户名
passwd:密码;没有密码时为passwd=''
db:要连接的数据库名;必需已经存在,否则报错
#实例:
conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='y')
#添加数据:
obj.cursor(cursor=...)
#obj为.connect()返回的连接对象
#返回1个游标(cursor),用于进行具体操作
#参数说明:
cursor:返回数据结果的数据类型;默认是tuple
cursor=pymysql.cursors.DictCursor:指定返回dict
#实例:
cursor=conn.cursor()
cur_dict=conn.cursor(cursor=pymysql.cursors.DictCursor)
sql="""CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT)"""
#执行命令:
cursor.execute("cmd")
#cursor是.cursor()返回的游标
#返回受命令影响的行数(如插入/修改/删除记录数)
#参数说明:
cmd:要执行的命令;可以是str/variable(变量需为命令的str形式)
#实例:
cursor.execute(sql)
#创建表:
row_affected=cursor.execute("create table t1(id INT ,name VARCHAR(20))")
#插入数据:
row_affected=cursor.execute("INSERT INTO t1(id,name) values (1,'alvin'),(2,'xialv')")
#更新表:
cursor.execute("update t1 set name = 'silv2' where id=2")
#查询数据
row_affected=cursor.execute("select * from t1")
#查询数据:
cursor.fetchone():返回第1条记录
cursor.fetchmany(n):返回前n条记录
cursor.fetchall():返回所有记录
#每条记录为1个tuple,如一多条共同构成1个外层tuple
#没有结果时fetchone()返回None,fetchmany()/fetchall()返回()
#取出后游标移动到下1条记录开头
#实例:
one=cursor.fetchone()
many=cursor.fetchmany(2)
all=cursor.fetchall()
#移动游标:
cursor.scroll(n,mode='...'):将游标移动指定记录数
#参数说明:
n:移动几条记录;>0向下,<0向上,=0不移动(absolute下为移至开头)
mode:移动模式;可为relative(以当前位置为基准),absolute(以开始位置为基准)
#实例:
cursor.scroll(-1,mode='relative')#相对当前位置上移1条记录
cursor.scroll(1,mode='absolute')#相对绝对位置下移1条记录;接下来再取将取到第2条
#提交:
conn.commit()
#如果不提交,相当于没有执行
#关闭游标/连接
cursor.close()
conn.close()
二.MySQLdb与MySQLClient模块
1.简介
(1)简介:
这是Python中用于操作MySQL的另外2个模块.MySQLdb只支持python2;而MySQLClient则是MySQLdb的1个分支,解决了与python3的兼容问题
MySQLClient与pymysql的作者是同1个人.相较而言,前者是1个C扩展模块,编译安装时可能出现各种错误,但速度更快;而后者是纯Python实现的,可
很好地与gevent/eventlet结合,但速度较慢
mysqlclient-python is much faster than PyMySQL.
When to use PyMySQL is:
You can’t use libmysqlclient for some reason
You want to use monkeypatched socket of gevent or eventlet
You wan’t to hack mysql protocol
(2)安装:
pip install MySQLClient
2.使用:
import MySQLdb#注意:不是import MySQLClient
语法与pymysql模块几乎相同