什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 安装 :
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:命令 : pip install pymysql,注: 在cmd里面可以直接执行 , 记住联网
连接数据库准备:
主机地址 端口 用户 密码 数据库 编码-->存在中文的时候,连接需要添加charset='utf8',否则中文显示乱码
查询实例
import pymysql
#主机地址 端口 用户 密码 数据库
dbConf = {
"host":"aespowsp-m.dbsit.sfdc.com.cn",
"user":"aespowsp",
"password":"deevmFnsWb",
"database":"aespowsp",#连接已存在的数据库名称,若数据库不存在则该数据不填写
"port":3306,
"charset":"utf8"#编码-->存在中文的时候,连接需要添加charset='utf8',否则中文显示乱码
}
#1、打开数据库,连接数据库
#方法一
#conn = pymysql.connect(host="aespowsp-m.dbsit.sfdc.com.cn", user="aespowsp", password="deevmFnsWb",database="aespowsp", port=3306, charset="utf8")
#方法二
conn = pymysql.connect(**dbConf)
#2、获取游标
cur = conn.cursor()
# 3、查询执行SQL,返回受影响的行数
#不带条件的查询
# sql = "select * from student"
# reCount = cur.execute(sql) # 返回受影响的行数
# print(reCount)
# data_0 = cur.fetchone() #读取一行数据,返回类型时tuple,从数据库里读出来的数据类型与数据库新建时的数据类型一致
# print(data_0)
# data_1 = cur.fetchall() #读取所有数据,返回的是tuple类型
# print(data_1)
#带条件的查询
sql = "select * from student where age=%s" #sql语句中的值无论是int类型还是什么类型都用%s占位
reCount = cur.execute(sql,(12,)) # 返回受影响的行数,参数用tuple传参
print(reCount)
data_0 = cur.fetchone() #读取一行数据,返回类型时tuple
print(data_0)
print(type(data_0[1])) #从数据库里读出来的数据类型与数据库新建时的数据类型一致
#4、关闭游标
cur.close()
#5、关闭数据库连接
conn.close()
插入实例
import pymysql
#主机地址 端口 用户 密码 数据库
dbConf = {
"host":"aespowsp-m.dbsit.sfdc.com.cn",
"user":"aespowsp",
"password":"deevmFnsWb",
"database":"aespowsp",#连接已存在的数据库名称,若数据库不存在则该数据不填写
"port":3306,
"charset":"utf8"#编码-->存在中文的时候,连接需要添加charset='utf8',否则中文显示乱码
}
#1、打开数据库,连接数据库
#方法一
#conn = pymysql.connect(host="aespowsp-m.dbsit.sfdc.com.cn", user="aespowsp", password="deevmFnsWb",database="aespowsp", port=3306, charset="utf8")
#方法二
conn = pymysql.connect(**dbConf)
#2、获取游标
cur = conn.cursor()
# 3、插入执行SQL,返回受影响的行数
#直接插入
sql = "insert into student values('yayaya',13,'female')"
reCount = cur.execute(sql) # 返回受影响的行数
#直接插入法-只输入不能为空的值
sql = "insert into student(name,age)values('aa',14)" #注意数据库里的title不需要再加引号
reCount = cur.execute(sql) # 返回受影响的行数
#元祖插入法--通过元祖来传递数据
sql = "insert into student(name,age)values(%s,%s)" #注意数据库里的title不需要再加引号
reCount = cur.execute(sql,('python',12)) # 返回受影响的行数
#字典插入法--通过字典来传递数据
sql = "insert into student(name,age)values(%(name)s,%(age)s)" #注意数据库里的title不需要再加引号
sqlDict={"name":"ee","age":15 }
reCount = cur.execute(sql,sqlDict) # 返回受影响的行数
#列表插入法--通过字典来传递数据
sql = "insert into student(name,age)values(%s,%s)" #注意数据库里的title不需要再加引号
sqlList=[("uu",15 ),("yy",15 )]
reCount = cur.executemany(sql,sqlList) # 返回受影响的行数
#4、提交
cur.execute('commit') #有数据更新需要提交
#5、关闭游标
cur.close()
#6、关闭数据库连接
conn.close()