Python 操作数据库
1.PyMySQL介绍
PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库
2.pymysql大概使用流程
- 导入pymysql
- 连接数据库
- 创建游标对象
- 通过游标对象执行SQL语句
- 获取查询结果
- 关闭连接
- 连接数据库注意事项:
- 有一个MySQL数据库,并且已经启动
- 有可以连接数据库的用户名和密码
- 有一个存在且有操作权限的数据库(database)
3.安装pymysql模块
- 在终端窗口(cmd)输入:
pip install pymysql
4.引入模块
- 在python中引入pymysql模块
from pymysql import *
5. Connection对象
- 作用 : 与数据库建立连接
- 创建对象:调用connect()方法
- 创建对象,一般用db接收数据,当然 用别的参数接收也可以,毕竟只是个变量,只不过大多用db接收
- connect()方法,需要传入6个参数
db=connect(host='',port='',user='',password='',database='',charset='')
- host:指IP地址 ,如果是本机的话可以是localhost 或 127.0.0.1
- port:代表端口号,如没有更改,默认是3306
- user:数据库的用户名
- password:数据库密码
- database:要操作的数据库名称
- charset:编码方式,一般为utf8
- 对象方法
- cursor():返回Cursor对象,用于执行sql语句并获得结果
- close():用于关闭连接
- commit:用于提交
6.Cursor对象
- 作用:用于执行sql语句,使用频度最高的语句为select、insert、update、delete
- 获取Cursor对象:调用Connection对象的cursor()方法
- cursor 也称游标对象,通常用cs接收
cs=db.cursor()
- 对象的方法
-
execute(operation [, parameters ]):执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
-
fetchone():获取查询结果集的第一个行数据,返回一个元组,通俗的说就是获取一条查询结果
-
fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回,通俗的说就是获取全部查询结果
-
close():关闭连接
-
- 对象属性
- rowcount只读属性,表示最近一次execute()执行后受影响的行数
- connection获得当前连接对象
7.关闭连接
- 7.1 先关游标对象
- cs.close()
- 7.2 后关连接对象
- db.close()
可以参考下面的Demo
Demo1单例模式
import pymysql,os
# os:为系统模块,目的为正常退出
# __init__ : 初始化属性
# __del__ : 销毁对象时,自动执行该方法
# __new__ : 实例化对象(创建一个对象)
class connmysql(object):
obj = None #对象第一次为None
def __new__(cls, *args, **kwargs): #单例模式
if cls.obj is None: #如果对象为None
cls.obj = super().__new__(cls) # 就创建一个对象
return cls.obj #否则直接返回
def __init__(self,user,password,database,host="localhost",port=3306):
# 1. 链接数据库, 得到一个对象
try:
self.db=pymysql.connect(
host=host, port=port, user=user, # 第一种
password=password, database=database, charset="utf8"
)
except Ellipsis as e:
print(e)
os._exit(0) # 如果第一步的链接失败,下面的所有代码都不用走,直接退出
self.cs=self.db.cursor() #2.得到一个游标对象
def cha(self,sql):
"""负责查询功能"""
#3 执行SQL语句
try:
self.cs.execute(sql)
except Exception as e:
print(e)
return
#4.获取查询结果
r=self.cs.fetchall()
return r #将结果返回
def update(self,sql):
"""负责更行功能"""
# 3 利用游标对象执行SQL语句
try:
self.cs.execute(sql)
except Exception as e:
print(e)
return
#4.提交 如果不进行提交,所有的改变(insert, delete, update)不会生效
self.db.commit()
print("更新成功!")
def __del__(self):
self.cs.close() # 5. 关闭链接
self.db.close()
a=connmysql(user="root",password="mysql",database="jingdong")
c=a.cha(sql=input("输入sql语句:"))
print(c)
a.update(sql=input('更新内容:'))
Demo2函数封装,查询
from pymysql import *
def select():
db = connect(host="127.0.0.1", port=3306, user="root",
password="mysql", database="school", charset="utf8")
# 2.创建游标对象
cs = db.cursor()
# 3.利用游标对象执行sql语句
cs.execute("select * from students")
# 4. 获取查询结果
r=cs.fetchall()
return r
# 5.关闭
cs.close()
db.close()
r=select()
Demo 2.1函数封装,改变数据库(增,删,改)
from pymysql import *
def select():
db = connect(host="127.0.0.1", port=3306, user="root",
password="mysql", database="cs", charset="utf8")
# 2.创建游标对象
cs = db.cursor()
# 3.利用游标对象执行sql语句
cs.execute("insert into books values(0,'《神厨小福贵》',30,500)")
# 4. 使用链接对象db提交改变, 如果不进行提交,所有的改变(insert, delete, update)不会生效
db.commit()
# 5.关闭
cs.close()
db.close()