1.安装pymysql
pip install pymysql
2.pymysql操作数据库
- 连接数据库
使用Connect方法连接数据库
pymysql.Connections.Connection(host=None, user=None, password='', database=None, port=0, charset='')
参数说明:
host – 数据库服务器所在的主机。
user – 登录用户名。
password – 登录用户密码。
database – 连接的数据库。
port – 数据库开放的端口。(默认: 3306)
charset – 连接字符集。
返回值:
返回连接对象
例子:
link = pymysql.Connect(host='localhost', port=3306, user='root', password='123456', db='zzl', charset='utf8')
- 连接对象方法
方法 | 说明 |
begin() | 开启事务 |
commit() | 提交事务 |
cursor(cursor=None) | 创建一个游标用来执行sql语句 |
rollback() | 回滚事务 |
close() | 关闭连接 |
select_db(db) | 选择数据库 |
- 创建游标
cursor = link.cursor()
print(cursor.rowcount) #打印受影响行数
方法 | 说明 |
close() | 关闭游标 |
execute(query, args=None) | 执行单条语句,传入需要执行的语句,是string类型;同时可以给查询传入参数,参数可以是tuple、list或dict。执行完成后,会返回执行语句的影响行数。 |
fetchone() | 取一条数据,没有数据为null,返回元组类型 |
fetchmany(n) | 取n条数据 ,不传参返回一行数据 |
fetchall() | 取所有数据 除表头,返回元组类型 |
- 执行sql语句
# 执行sql语句
sql = 'select * from user1'
# 执行完sql语句,返回受影响的行数
num = cursor.execute(sql)
- 获取结果集
result1 = cursor.fetchone()
print(result1)
- 关闭连接
cursor.close()
link.close()
- 注意:
写完代码后,需要将py文件添加可执行权限
sudo chmod +x conndb.py
./conndb.py
3. pymysql中事务处理
pymysql默认是没有开启自动提交事务,所以我们如果进行增、删、改,就必须手动提交或回滚事务。
sql = 'delete from user where id=%s' % user_id
# 如果要执行增删改语句的时候,下面的就是固定格式
try:
cursor.execute(sql)
# 如果全部执行成功,提交事务
link.commit()
print(cursor.lastrowid) #获取最后插入记录的自增id号
except Exception as e:
print(e)
link.rollback()
finally:
cursor.close()
link.close()
练习:
1.创建用户登录系统:
数据库操作包:
import pymysql
class MyDB:
def __init__(self, host, user, password, db, port=3306):
self.conn = None
try:
self.conn = pymysql.Connect(host=host, port=port, user=user, password=password, db=db)
self.cursor = self.conn.cursor()
except:
print('连接数据库失败!')
def update_data(self, sql):
try:
if self.conn:
self.cursor.execute(sql)
self.conn.commit()
print('更新成功!')
else:
print('连接对象没有创建或者创建失败!')
except Exception as err:
print('更新有错了', err)
def insert_data(self, sql):
try:
if self.conn:
self.cursor.execute(sql)
self.conn.commit()
print('添加成功!')
else:
print('连接对象没有创建或者创建失败!')
except Exception as err:
print('添加有错了', err)
def delete_data(self, sql):
try:
if self.conn:
self.cursor.execute(sql)
self.conn.commit()
print('删除成功!')
else:
print('连接对象没有创建或者创建失败!')
except Exception as err:
print('删除有错了', err)
def select_all(self, sql):
try:
if self.conn:
self.cursor.execute(sql)
rows = self.cursor.fetchall()
return rows
else:
print('连接对象没有创建或者创建失败!')
except Exception as err:
print('查询所有 有错了', err)
def select_one(self, sql):
try:
if self.conn:
self.cursor.execute(sql)
row = self.cursor.fetchone()
return row # 元组
else:
print('连接对象没有创建或者创建失败!')
except Exception as err:
print('查询单行数据有误', err)
def close_conn(self):
if self.conn:
self.conn.close()
用户登录:
from dbtools import MyDB
# 注册
def register(db):
username = input('用户名:\n')
password = input('密码:\n')
confirm_password = input('确认密码:\n')
phone = input('手机号码:\n')
if password == confirm_password:
sql = "insert into user(username,password,phone) values('{}','{}','{}')".format(username, password, phone)
db.insert_data(sql)
else:
print('两次密码不一致,重新输入')
def sousuo(db):
username = input('用户名:\n')
sql = "select * from user where username='{}'".format(username)
a = db.select_one(sql)
print(a)
# 登录
def login(db):
username = input('用户名:\n')
password = input('密码:\n')
sql = "select * from user where username='{}' and password='{}'".format(username, password)
user = db.select_one(sql)
if user:
print('登录成功!')
return user
else:
print('用户名或者密码有误!')
def update_user(db):
user = login(db)
if user: # user就是元组
# 修改用户
print('用户名:{},密码:{},手机号码:{}'.format(user[1], user[2], user[3]))
username = input('用户名:\n')
password = input('密码:\n')
phone = input('手机号码:\n')
# 更新
sql = "update user set username='{}',password='{}',phone='{}' where id={}".format(username, password, phone,
user[0])
db.update_data(sql)
def main():
db = MyDB(host='localhost', user='test', password='test', db='mydb')
while True:
print('*' * 40)
print('----------欢迎来到用户管理系统----------')
print('*' * 40)
choice = input('请选择功能:1.注册用户 2.用户登录 3.修改用户 4.删除用户 5.显示所有用户 6.搜索用户 7.退出系统 \n')
if choice == '1':
register(db)
elif choice == '2':
login(db)
elif choice == '3':
# 修改用户
update_user(db)
elif choice == '4':
pass
elif choice == '5':
# 显示多有用户
sql = 'select * from user'
users = db.select_all(sql)
print('用户名\t 手机号\t')
for user in users: # (1,’username‘,'password','xxxx')
print(user[1], '\t', user[3])
elif choice == '6':
# 根据手机号码进行模糊检索
sousuo(db)
elif choice == '7':
print('~~~~~~~欢迎下次再来~~~~~')
break
else:
print('选择有误!')
if __name__ == '__main__':
main()