一、安装引入pymysql模块
1、安装
pip install PyMySQL
2、Pycharm 中引入 pymysql
3、在文件中引入模块
import pymysql
如果系统不支持 pip 命令,可以使用 git 命令下载安装包安装(也可以手动下载):
$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install
二、pymysql模块对象简介
1、Connection 对象
作用:用于建立与数据库的连接。通过调用 connect() 方法来创建对象:
conn = connect(host, port, db, user, password, charset)
- host:连接的 mysql 主机,本机则为 'localhost'。
- port:连接的 mysql 主机的端口,默认是 3306。
- db:数据库的名称。
- user:连接的用户名。
- password:连接的密码。
- charset:通信采用的编码方式,默认是 'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码。
对象的方法:
- close():关闭连接。
- commit():提交事务,即需要提交才会生效。
- rollback():回滚事务,即放弃之前的操作。
- cursor():返回 Cursor 对象,用于执行 sql 语句并获得结果。
2、Cursor 对象
作用:执行 sql 语句。通过调用 Connection 对象的 cursor() 方法来创建对象:
cursor1 = conn.cursor()
对象的方法
- close():关闭。
- execute(operation [, parameters]):执行语句,返回受影响的行数。
- fetchone():执行查询语句时,获取查询结果集的第一行数据,返回一个元组。
- fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回。
- scroll(value[, mode]):将行指针移动到某个位置。
- mode:表示移动的方式。
- mode默认值为 relative,表示基于当前行移动到 value,value 为正则向下移动,value 为负则向上移动。
- mode的值为 absolute,表示基于第一条数据的位置,第一条数据的位置为 0。
对象的属性
- rowcount:只读属性,表示最近一次 execute() 执行后受影响的行数。
- connection:获得当前连接对象。
3、代码范例
import pymysql
conn = pymysql.connect(host="localhost", port=3307, db="电商销售", user="root", passwd="admin123", charset='utf8')
cursor = conn.cursor()
cursor.execute("select %s from %s;" % ("*", "产品信息"))
first_row = cursor.fetchone() # 取第一行数据
print(first_row)
second_row = cursor.fetchone() # 取下一行数据(第二行)
print(second_row)
all_row = cursor.fetchall() # 取剩下的所有行数据(第三行及之后)
print(all_row)
执行结果:
三、代码封装使用
观察发现,除了 SQL 语句及参数不同,其它语句都是一样的,故创建 MysqlTool 封装类。
1、详细版
import pymysql
class MysqlTool:
def __init__(self, host, port, db, user, passwd, charset="utf8"):
self.host = host
self.port = port
self.db = db
self.user = user
self.passwd = passwd
self.charset = charset
def connect(self):
'''创建数据库连接与执行对象'''
try:
self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, passwd=self.passwd, charset=self.charset)
self.cursor = self.conn.cursor()
except Exception as e:
print(e)
def close(self):
'''关闭数据库连接与执行对象'''
try:
self.cursor.close()
self.conn.close()
except Exception as e:
print(e)
def query_one(self, sql, params=()):
'''获取一行数据'''
try:
self.cursor.execute(sql, params)
result = self.cursor.fetchone()
except Exception as e:
print(e)
else:
return result
def query_all(self, sql, params=()):
'''获取所有行数据'''
try:
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
except Exception as e:
print(e)
else:
return result
def __edit(self, sql, params=()):
'''增删改查的私有方法'''
try:
execute_count = self.cursor.execute(sql, params)
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback()
else:
return execute_count
def insert(self, sql, params=()):
'''插入数据'''
return self.__edit(sql, params)
def update(self, sql, params=()):
'''更新数据'''
return self.__edit(sql, params)
def delete(self, sql, params=()):
'''删除数据'''
return self.__edit(sql, params)
测试:
创建表。
create table userinfos(
id int primary key auto_increment,
uname varchar(20),
upwd char(40),
isdelete bit default 0
);
测试封装代码。
from hashlib import sha1
# 创建数据库连接与执行的对象
tool = MysqlTool("localhost", 3307, "电商销售", "root", "admin123")
tool.connet()
# 插入新用户数据
# 使用sha1加密,返回40位字符的密码串
s = sha1()
s.update("123".encode("utf8"))
new_pwd = s.hexdigest()
insert_sql = "insert into userinfos values(0, 'root', %s, 0)"
insert_params = (new_pwd)
row_count = tool.insert(insert_sql, insert_params)
print(row_count) # 1
# 登录查询
uname = input("请输入用户名:")
pwd = input("请输入密码:")
s.update(pwd.encode("utf8"))
new_pwd = s.hexdigest()
query_sql = "select * from userinfos where uname = %s"
query_params = uname
userinfo = tool.get_one(query_sql, query_params)
if not userinfo:
print("用户名错误")
else:
if userinfo[2] == new_pwd:
print("登录成功")
else:
print("密码错误")
# 关闭连接
tool.close()
2、简要版
import pymysql
import app # 全局变量
class DButils:
# 初始化连接
def __init__(self):
self.conn = pymysql.connect(app.DB_HOST, app.DB_USERNAME, app.DB_PWD, app.DATABASE, autocommit=True)
self.cursor = self.conn.cursor()
# 关闭连接
def close_conn(self, cursor=None, conn=None):
if cursor:
self.cursor.close()
if conn:
self.conn.close()
# 执行SQL并关闭连接
def execute_sql(self, sql):
try:
self.cursor.execute(sql)
except Exception as e:
self.conn.rollback()
finally:
self.close_conn()
标签:self,MySQL,cursor,params,conn,sql,print,连接,Python3
From: https://blog.51cto.com/u_11837698/6165258