Python连接MySQL数据库并实现操作
目录
1.创建连接对象
2.使用方法
3.cursor对象:
sql语句的增删改查:
添加数据:
增加多条数据:
删除数据:
修改数据:
查询数据:
操作封装:
先赞后看,养成习惯(Q.Q)
首先安装好python和mysql,然后安装pymysql,没有这个包就pip install pymysql安装一下
1.创建连接对象
pymysql中封装了一个Connection对象,专门用来操作mysql的
from pymsql import Connect
conn=Connect(host='127.0.0.1',port=3306,user='root',password='root',charset='utf-8')
参数host:连接的mysql主机,如果本机是'localhost' 参数port:连接的mysql主机的端口,默认是3306 参数database(db):数据库的名称 参数user:连接的用户名 参数password(passwd):连接的密码 参数charset:通信采用的编码方式,推荐使用utf8
2.使用方法
创建好连接对象后就可以使用这个对象里面封装的方法了
close():发送一个退出消息,并断开连接
commit():提交修改到数据库
cursor():创建一个游标实例
ping():检查服务器是否正常
rollback():回滚当前事务
select_db(db):设置当前db
show_warnings():显示警告信息
3.cursor对象:
代表一个与MySQL数据库交互对象,使用Connection.Cursor()在当前socket连接上的交互对象。
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理 通俗来说就是,操作数据和获取数据库结果都要通过游标来操作
cursor中的方法:
close:关闭当前cursor
execute:执行一个sql语句
executemany:执行一堆sql语句
fetchall:取所有数据
fetchmany:取多条数据
fetchone:取一条数据
#1 导入pymysql库
from pymysql import *
#2 创建数据库连接
conn = Connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 创建游标
cur = conn.cursor()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
sql语句的增删改查:
再写sql语句的时候为了防止数据泄露或者数据篡改现象,在写查询语句的时候要使用到参数化查询,也就是将查询的值以参数的方式传到sql语句
添加数据:
#1 导入pymsql包
from pymysql import *
#2 创建数据库连接
conn=connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 打开游标
cur = conn.cursor()
#4 执行 sql语句
#编写sql语句
try:
sql = "insert into student values (%s,%s)"
params=('张三','18')
# execute:游标对象中封装的方法,执行一条sql语句,执行的结果目前是放在缓存里面的,还没有提交
cur.execute(sql,params)
# 提交数据到mysql
conn.commit()
except:
# 回滚到初始状态
conn.rollback()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
增加多条数据:
#1 导入pymsql包
from pymysql import *
#2 创建数据库连接
conn=connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 打开游标
cur = conn.cursor()
#4 执行 sql语句
#编写sql语句
try:
sql = "insert into student values (%s,%s)"
params=[('张三','18'),('李四','19'),('王五','20'),('老六','21')]
# executemany:游标对象中封装的方法,执行多条sql语句,执行的结果目前是放在缓存里面的,还没有提交
cur.executemany(sql,params)
# 提交数据到mysql
conn.commit()
except:
# 回滚到初始状态
conn.rollback()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
删除数据:
#1 导入pymsql包
from pymysql import *
#2 创建数据库连接
conn=connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 打开游标
cur = conn.cursor()
#4 执行 sql语句
#编写sql语句
try:
sql="delete from student where age=%s"
params=(18)
# executemany:游标对象中封装的方法,执行多条sql语句,执行的结果目前是放在缓存里面的,还没有提交
cur.executemany(sql,params)
# 提交数据到mysql
conn.commit()
except:
# 回滚到初始状态
conn.rollback()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
修改数据:
#1 导入pymsql包
from pymysql import *
#2 创建数据库连接
conn=connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 打开游标
cur = conn.cursor()
#4 执行 sql语句
#编写sql语句
try:
sql="updata student set name=%s where age=18"
params=('大山','19')
cur.execute(sql,params)
# 提交数据到mysql
conn.commit()
except:
# 回滚到初始状态
conn.rollback()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
查询数据:
这个不需要try语句,因为有就是有没有就是没有,它没有提交什么到数据库
#1 导入pymsql包
from pymysql import *
#2 创建数据库连接
conn=connect(host='localhost',port=3306,user='root',password='root',charset='utf8')
#3 打开游标
cur = conn.cursor()
#4 执行 sql语句
#编写sql语句
sql="select * from student where age>%s"
params=(18)
cur.execute(sql,params)
# fetchone:取出一条数据
result=cur.fetchone()
# fetchmany:取出多条数据
result2=cur.fetchmany(5)
# fetchall:取出所有数据
result3=cur.fetchall()
#5 关闭游标
cur.close()
#6 关闭连接
conn.close()
操作封装:
上面的增删改查中改变的都是sql语句,其他的基本没什么变化,为了避免重复代码,我们将操作封装成一个类
from pymysql import *
class MysqlPackge:
# 初始化连接数据库的参数
conn_params = {'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'passwd': 'root', 'db': 'mytestdb',
'charset': 'utf8'}
def __init__(self,conn_params):
self.__host = conn_params['host']
self.__port = conn_params['port']
self.__db = conn_params['db']
self.__user = conn_params['user']
self.__passwd = conn_params['passwd']
self.__charset = conn_params['charset']
# 创建连接数据库对象和游标对象
def __connect(self):
self.__conn = connect(host=self.__host, port=self.__port, db=self.__db, user=self.__user, passwd=self.__passwd,
charset=self.__charset)
self.__cursor = self.__conn.cursor()
# 关闭数据库操作对象,游标对象
def __close(self):
self.__cursor.close()
self.__conn.close()
# 获得一条数据
def get_one(self,sql,params):
result=None
try:
self.__connect()
self.__cursor.execute(sql,params)
result=self.__cursor.fetchone()
self.__close()
except Exception as e:
print(e)
return result
# 获得全部数据
def get_all(self,sql,params):
result=None
try:
self.__connect()
self.__cursor.execute(sql,params)
result=self.__cursor.fetchall()
except Exception as e:
print(e)
return result
# 插入数据
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)
# 写数据操作具体实现,增删改操作都是调用这个方法来实现,这是个私有方法,不允许类外部调用
def __edit(self,sql,params):
count=0
try:
self.__connect()
count=self.__cursor.execute(sql,params)
self.__conn.commit()
self.__close()
except Exception as e:
print(e)
return count
这样一个简单的数据库的增删改查的调用类就写好了,演示一下:
# 如果不是在当前文件中使用的话需要按照路径导入
from ./MysqlPackge import MysqlPackge
conn_params = {'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'passwd': 'root', 'db': 'mytestdb','charset': 'utf8'}
# 创建操作对象
mysql_packge=MysqlPackge(conn_params)
sql=f"select age,name from student where age>%s"
params=(18)
# 获取查询的所有数据
result=mysql_packge.get_all(sql,params)
# 打印一下
print(i for i in result)
其他的大家自己去玩把,都看到这里了,点个赞呗!!!
作者:Mr终游