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

Python学习七:数据库编程接口

文章目录

  • 一、数据库编程接口
    • 1.1 连接对象
      • 1.1.1 获取连接对象
      • 1.1.2 连接对象的方法
    • 2.1 游标对象

一、数据库编程接口

1.1 连接对象

1.1.1 获取连接对象

数据库连接对象主要提供获取数据库游标对象和提交、回滚事物的方法,以及关闭数据库连接

使用connet()函数连接对象
参数

  1. dsn:数据源名称,给出该参数标识数据库依赖
  2. user: 用户名
  3. password:用户密码
  4. host:主机名
  5. database:数据库名称
  6. charset:编码
  7. cursorclass:驱动
  8. port:端口号

import pymysql
if __name__ == '__main__':
    conn=pymysql.connect(host='127.0.0.1',
                         port=3306,
                         user='root',
                         password='root',
                         db='kc',
                         charset='utf8',
                         cursorclass=pymysql.cursors.DictCursor
                         )




1.1.2 连接对象的方法

  1. close():关闭数据库连接
  2. commit():提交事务
  3. rollback():回滚事务
  4. cursor():获取游标对象,操作数据库,执行DML操作、调用存储过程等

2.1 游标对象

游标对象代表数据库中的游标,用于指示抓取数据库操作上下文。主要提供执行sql语句,调用存储过程、获取查询结果等方法。

使用coursor()函数连接对象

游标对象属性

  1. description :数据库列类型和值得描述对象
  2. rowcount:放回结果的行数信息统计

游标对象的方法

  1. callproc(procname,[,parameters]) 调用存储过程,需要数据库支持
  2. close()关闭当前游标
  3. 0excute(operation [,parameters]) 执行数据库操作,SQL语句或者数据库命令
  4. excutemany(operation,seq_of_params) 用于批量操作,如批量更新
  5. fetchone() 获取查询结果集的下一条信息
  6. fetchmany(size) 获取指定数量的记录
  7. nextset() 跳至下一个可用的结果集
  8. arraysize 使用指定fetchmany()获取行数,默认为1
  9. setinputsizes(sizes) 设置在调佣execute*()方法时分配的内存区域大小
  10. setoutputsizes(sizes)

参考地址
在这里插入图片描述


'''
封装一个mysql工具类(需要自己写SQL语句)
功能:mysql数据库操作
步骤:
    1.连接数据库
    2.通过连接对象,获取游标对象
    3.增删改查操作
方法:
    1.查
    2.增删改 commit,rollback
'''

# 先要导入pymysql
import pymysql

# 把连接参数定义成字典
config = {
    "host": "127.0.0.1",
    "port": 3307,
    "database": "lebo",
    "charset": "utf8",
    "user": "root",
    "passwd": "root"
}


class Mysqldb():
    # 初始化方法
    def __init__(self):
        # 初始化方法中调用连接数据库的方法
        self.conn = self.get_conn()
        # 调用获取游标的方法
        self.cursor = self.get_cursor()

    # 连接数据库的方法
    def get_conn(self):
        # **config代表不定长参数
        conn = pymysql.connect(**config)
        return conn

    # 获取游标
    def get_cursor(self):
        cursor = self.conn.cursor()
        return cursor

    # 查询sql语句返回的所有数据
    def select_all(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchall()

    # 查询sql语句返回的一条数据
    def select_one(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchone()

    # 查询sql语句返回的几条数据
    def select_many(self, sql, num):
        self.cursor.execute(sql)
        return self.cursor.fetchmany(num)

    # 增删改除了SQL语句不一样其他都是一样的,都需要提交
    def commit_data(self, sql):
        try:
            # 执行语句
            self.cursor.execute(sql)
            # 提交
            self.conn.commit()
            print("提交成功")
        except Exception as e:
            print("提交出错\n:", e)
            # 如果出错要回滚
            self.conn.rollback()

    # 当对象被销毁时,游标要关闭,连接也要关闭
    # 创建时是先创建连接后创建游标,关闭时是先关闭游标后关闭连接
    def __del__(self):
        self.cursor.close()
        self.conn.close()




# 已经封装好mysql类了,就不用导入pymsql了,直接导入封装好的类

from mysql_util import Mysqldb

# 实例化
my_db = Mysqldb()

# 写查询SQL语句
sql = "select * from user where id>5"
# 查询所有
select_all = my_db.select_all(sql)
print("查询所有数据:\n", select_all)
# 查询一条
select_one = my_db.select_one(sql)
print("查询一条数据:\n", select_one)
# 查询多条
select_many = my_db.select_many(sql, 3)
print("查询3条数据:\n", select_many)

# 新增一条数据
value = (16, 'BBQ')
sql = f"insert into user values {value}"
insert_one = my_db.commit_data(sql)
# 新增多条数据
values = "(17, 'aaa'), (18, 'bbb'), (19, 'ccc')"
sql = f"insert into user values {values}"
insert_many = my_db.commit_data(sql)

# 修改数据
sql = "update user set name = '出不去了' where id = 17"
my_db.commit_data(sql)

# 删除数据
sql = "delete from user where id = 17"
my_db.commit_data(sql)

相关文章:

  • 智能优化算法:侏儒猫鼬优化算法-附代码
  • 【Linux练习生】线程安全
  • 进程间通信之信号量--使用信号实现生产者消费者问题
  • I/O复用--浅谈epoll
  • 图像类找工作面试题(二)——常见问题大总结
  • 【文章阅读】Frustratingly Simple Few-Shot Object Detection
  • 网络安全实战:记一次比较完整的靶机渗透
  • 双非本23秋招之路-从考研跑路到某安全大厂(无实习、项目)
  • 影响深度卷积神经网络算法的关键参数是网络结构
  • 微信小程序|使用小程序制作一个核酸检测点查询工具
  • Python3,5行代码,制作Gif动图,太简单了。
  • 【Python】字符串(简介)
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • 沉睡者IT - 十月之后「牛市」还是「熊市」
  • RK3566快速上手 | ROC-RK3566-PC开发板快速上手
  • 收藏网友的 源程序下载网
  • Angular数据绑定机制
  • bootstrap创建登录注册页面
  • create-react-app项目添加less配置
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Linux下的乱码问题
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Puppeteer:浏览器控制器
  • sessionStorage和localStorage
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • STAR法则
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 力扣(LeetCode)21
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何学习JavaEE,项目又该如何做?
  • 一些css基础学习笔记
  • 在Unity中实现一个简单的消息管理器
  • Hibernate主键生成策略及选择
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​VRRP 虚拟路由冗余协议(华为)
  • #AngularJS#$sce.trustAsResourceUrl
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $ git push -u origin master 推送到远程库出错
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (过滤器)Filter和(监听器)listener
  • (十)c52学习之旅-定时器实验
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)菜鸟学数据库(三)——存储过程
  • *2 echo、printf、mkdir命令的应用
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core WebAPI中封装Swagger配置
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】