当前位置: 首页 > news >正文

Python与MySQL连接和使用

目录

1.创建连接对象

 2.使用方法

3.cursor对象:

sql语句的增删改查:

 添加数据:

增加多条数据:

删除数据:

修改数据:

查询数据:

操作封装:


先赞后看,养成习惯(Q.Q)

首先安装好python和mysql,然后安装pymysql,没有这个包就pip install pymysql安装一下

1.创建连接对象

pymysql中封装了一个Connection对象,专门用来操作mysql的

from pymsql import Connectconn=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)# 提交数据到mysqlconn.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)# 提交数据到mysqlconn.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)# 提交数据到mysqlconn.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)# 提交数据到mysqlconn.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=Nonetry: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=Nonetry: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=0try:self.__connect()count=self.__cursor.execute(sql,params)self.__conn.commit()self.__close()except Exception as e:print(e)return count

这样一个简单的数据库的增删改查的调用类就写好了,演示一下:

# 如果不是在当前文件中使用的话需要按照路径导入
from ./MysqlPackge import MysqlPackgeconn_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)

 其他的大家自己去玩把,都看到这里了,点个赞呗!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PyTorch 维度变换-Tensor基本操作
  • Web前端后端精通:深度解析与技能进阶
  • Vue进阶之Vue无代码可视化项目(四)
  • ArcGIS for js 4.x 加载图层
  • 部署LVS-DR群集
  • Pythone 程序打包成 exe
  • Java从入门到放弃
  • 公用nacos,实现只调用本机相应服务,不出现负载均衡到别人机器上
  • eNSP学习——配置前缀列表
  • python爬虫爬取豆瓣TOP250用csv文件
  • 【MySQL】函数
  • HTML静态网页成品作业(HTML+CSS)—— 美食湘菜介绍网页(5个页面)
  • 图形和插图软件Canvas X Pro 20 Build 914
  • Android面试题之说说系统的启动流程(总结)
  • Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战
  • [译] 怎样写一个基础的编译器
  • 2017 年终总结 —— 在路上
  • Android 控件背景颜色处理
  • gops —— Go 程序诊断分析工具
  • JS 面试题总结
  • pdf文件如何在线转换为jpg图片
  • PHP的Ev教程三(Periodic watcher)
  • scala基础语法(二)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue学习第二天
  • yii2权限控制rbac之rule详细讲解
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于webpack 的 vue 多页架构
  • 前端临床手札——文件上传
  • 如何在GitHub上创建个人博客
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 用Visual Studio开发以太坊智能合约
  • ​Java并发新构件之Exchanger
  • ​插件化DPI在商用WIFI中的价值
  • #Linux(make工具和makefile文件以及makefile语法)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (BFS)hdoj2377-Bus Pass
  • (独孤九剑)--文件系统
  • (二)linux使用docker容器运行mysql
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (四) 虚拟摄像头vivi体验
  • (万字长文)Spring的核心知识尽揽其中
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net core使用ef 6
  • .NET 的程序集加载上下文
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • ?
  • @Data注解的作用