13. python从入门到精通——Python操作数据库

news2024/11/18 22:38:32

数据库编程接口:python database API

python database API概述

python database API 规范对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API,通过这个接口使python跨不同数据库的操作代码可以更加具有可移植性、让 Python 可以连接(并操作)更多的数据库。

python database API 中有两个主要对象:

  • 用于管理数据库连接的Connection(连接)对象
  • 用于执行查询的Cursor(游标)对象

连接对象  

connect() 函数

    该函数创建并返回一个 Connection 对象,connect()函数通过 Connection 对象访问数据库

    该函数有多个参数,具体使用哪个参数取决于使用的数据库类型。如要访问Oracle和MySQL数据库则必须同时下载这俩python模块。这些模块在获取连接对象时都需要connect()函数。

Connect()函数属性:

    user                     用户名
    password               密码
    host                     主机名
    database               数据库名  MySQLdb数据库使用的是db
    dsn                      数据源名,指定要连接的数据库类型如:mysql、oracle
 

Connection连接对象

    主要用于提供数据库游标对象和提交回滚事务的方法以及关闭数据库连接     

    Connection连接对象常用方法:

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

游标对象

    cursor():通过Connection对象的cursor()方法生成游标对象

    cursor对象的常用方法如下图:

     执行顺序:

        创建数据库连接对象→创建游标对象→执行SQL语句处理数据结果→关闭游标→关闭连接对象

使用sqlite3模块操作SQLite数据库

SQLite:嵌入式数据库,他的数据库就是一个文件,所以使用方便操作简单

sqlite3:python中内置的SQLite模块为

创建数据库文件

示例:会在当前目录创建一个数据库文件

import sqlite3
# 连接到SQLite数据库
# 数据库文件是mrsoft.db
# 如果文件不存在,会自动在当前目录创建:
conn = sqlite3.connect('mrsoft.db') #mrsoft.db表示定义的数据库名称
# 创建一个Cursor:
cursor = conn.cursor()
# 执行一条SQL语句,创建user表:                    
cursor.execute('create table user (id int(10)  primary key, name varchar(20))')
# 关闭游标
cursor.close()
# 提交事务:
conn.commit()
# 关闭Connection:
conn.close()

操作SQLite数据库

注意:因为引号是成对出现的,所以在写sql语句是要不外面是单引号里面是双引号要不反过来

安装图形化工具Navicat for salite 安装后进行查看测试

新增

  • 新增数据

示例:

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
cursor.execute('insert into user (id,name) values(1,"小明")')
cursor.execute('insert into user (id, name) values ("2", "Andy")')
cursor.close()
conn.commit()
conn.close()
  • 为避免sql注入从而泄露信息可以用占位符编写sql语句

示例:

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
sql = 'insert into user (id,name) values(?,?)' #?占位符进行预处理
cursor.execute(sql,(2,'lisi')) #用真实的值替换占位符,一一对应的关系
cursor.close()
conn.commit()
conn.close()
  • 通过 cursor.executemany 方法批量插入数据

示例:

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
sql = 'insert into user (id,name) values(?,?)' #?占位符进行预处理
data = [(3,'wang3'),(4,'wang4'),(5,'wang5')] #定义列表
cursor.executemany(sql,data) #批量插入
cursor.close()
conn.commit()
conn.close()

查询

    注意:查询是不需要提交事务

  • fetchone():获取集群结果集中的下一条记录,返回一个元组
import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
cursor.execute('select * from user') 
print(cursor.fetchone()) #获取第一条记录
print(cursor.fetchone()) #获取第二条记录
print(cursor.fetchone()) #获取第三条记录
cursor.close()
conn.close()
  • fetchmany(size):获取指定数量的记录,返回一个列表

        #size:指定获取结果集中几条记录,默认为一条

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
cursor.execute('select * from user') #
print(cursor.fetchmany(2)) #指定获取结果集中的两条记录
cursor.close()
conn.close()
  • fetchall:获取结构集中的所有记录,返回一个列表
import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
cursor.execute('select * from user where id > 3') 
print(cursor.fetchall()) 
cursor.close()
conn.close()

修改

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
sql = 'update user set name = ? where id = ?'
cursor.execute(sql,('wang1',1)) 
cursor.close()
conn.commit()
conn.close()

删除

import sqlite3
conn = sqlite3.connect('mrsift.db')
cursor = conn.cursor()
sql = 'delete from user where id = ?'
cursor.execute(sql,[1]) 
cursor.close()
conn.commit()
conn.close()

使用MySQL数据库

下载安装MySQL

安装PyMySQL

第三方模块PyMySQL:因为在python中并没有内置操作mysql的模块,所以我们需要安装第三方mysql操作模块,支持的模块有很多PyMySQL是其中之一

命令行执行安装:pip3 install PyMySQL

连接数据库

示例

import pymysql
# 打开数据库连接,参数1:主机名或IP;参数2:用户名;参数3:密码;参数4:数据库名称
db = pymysql.connect(host="localhost", user="root", password="123456", database="mrsoft")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)
cursor.close()
# 关闭数据库连接
db.close()

创建数据表

示例

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mrsoft")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS books")
# 使用预处理语句创建表
sql = """
CREATE TABLE books (
  id int(8) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  category varchar(50) NOT NULL,
  price decimal(10,2) DEFAULT NULL,
  publish_time date DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
"""
# 执行SQL语句
cursor.execute(sql)
cursor.close()
# 关闭数据库连接
db.close()

操作数据表

删改查可以参考sqlite3,操作语句基本相同

示例:增加数据,一次插入多条

注意:sqlite的占位符为'?',而mysql中的占位符为‘%s’

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="Picc@1234", database="mrsoft") #如果有汉字需要指定字符编码否则报错
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 数据列表
data = [("零基础学Python",'Python','79.80','2018-5-20'),
        ("Python从入门到精通",'Python','79.80','2018-10-1'),
        ("Python数据分析从入门到实践",'Python','98.00','2020-6-1'),
        ("Java从入门到精通(第5版)",'Java','69.80','2019-2-1'),
        ("零基础学Java",'Java','69.80','2017-5-18'),
        ]
try:
    # 执行sql语句,插入多条数据
    cursor.executemany("insert into books(name, category, price, publish_time) values (%s,%s,%s,%s)", data)
    # 提交数据
    db.commit()
except:
    # 发生错误时回滚
    db.rollback()
cursor.close()
# 关闭数据库连接
db.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态内存管理(malloc,calloc,realloc)

文章目录 1.为什么存在动态内存分配 2.动态内存函数的介绍 3.常见的动态内存错误 4.几个经典的笔试题 5. C/C程序的内存开辟 文章内容 1.为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节 char arr[10] {0};/…

【javascript】闭包

通过定时器从第一个元素开始往后&#xff0c;每隔一秒输出arr数组中的一个元素。 <script>var arr [one, two, three];for(var i 0; i < arr.length; i) {setTimeout(function () {console.log(arr[i]);}, i * 1000);} </script> 但是运行过后&#xff0c;我…

使用生成 AI 实现准确的新闻摘要

shadow 这篇文章介绍了作者 Alessandro Alviani 的实践经验&#xff0c;非常有参考价值。 指令冗余&#xff0c;多步引导&#xff0c;是目前提高LLM输出质量的方法之一。 Towards Accurate Quote-Aware Summarization of News using Generative AI Alessandro Alviani generati…

电容式电动汽车路径规划问题的双级蚁群优化算法

摘要&#xff1a; 电动汽车&#xff08;EV&#xff09;技术的发展导致了一个新的车辆路由问题&#xff08;VRP&#xff09;&#xff0c;称为有容量的电动汽车路由问题&#xff08;CEVRP&#xff09;。由于充电站的数量有限&#xff0c;电动汽车的巡航范围有限&#xff0c;不仅要…

【从零开始学习JAVA | 第十九篇】初识内部类

前言&#xff1a; 内部类是类的五大成员。一个类的其他的成员分别是属性&#xff0c;方法&#xff0c;构造方法&#xff0c;代码块。本文将详细介绍什么是内部类&#xff0c;以及内部类的意义。 内部类&#xff1a; 内部类&#xff08;Inner Class&#xff09;是 Java 中的一个…

MedViT:一种用于广义医学图像分类的鲁棒Vision Transformer

文章目录 MedViT: A Robust Vision Transformer for Generalized Medical Image Classification摘要本文方法Locally Feed-Forward Network 实验实验结果 MedViT: A Robust Vision Transformer for Generalized Medical Image Classification 摘要 卷积神经网络(cnn)在现有医…

实现一个 AI 驱动的马里奥(使用双重深度 Q 网络),它可以自己玩游戏

训练玩马里奥的 RL 智能体 本教程将向您介绍深度强化学习的基础知识。 最后&#xff0c;您将实现一个 AI 驱动的马里奥&#xff08;使用双重深度 Q 网络&#xff09;&#xff0c;它可以自己玩游戏。 # !pip install gym-super-mario-bros7.3.0import torch from torch import …

STM32实现延时

在STM32单片机中&#xff0c;实现延时一般都是使用定时器&#xff0c;既可以使用Systick定时器&#xff0c;也可以使用常规的定时器。 定时器在设置了定时并开启之后&#xff0c;就会进入自主运行模式&#xff0c;其中&#xff0c;初始化设置这一阶段是由CPU执行相应指令完成的…

Spring Cloud_Spring Cloud Alibaba_00000

contents 微服务介绍版本选择创建项目创建Maven工程 说明 微服务介绍 微服务架构是一种架构模式。它提倡将单一应用程序划分成一组小的服务。服务之间相互协调、相互配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服务间采用轻量级的通…

html通过web3JS 获取当前连接的区块链信息和账号信息

前面 我们讲了 MetaMask和ganache的配置安装 并用 MetaMask管理ganache的启动的虚拟区块链 那么 我们现在也完全可以写一个网页来做这个东西的管理 您可以先查看文章web3.js获取导入做一个导入了 web3的html文件 首先我们可以来试着 获取 自己当前是在哪个区块的 getBlockNum…

【深度学习】【分布式训练】DeepSpeed:AllReduce与ZeRO-DP

AllReduce与ZeRO-DP ​ ZeRO-DP是分布式训练工具DeepSpeed的核心功能之一&#xff0c;许多其他的分布式训练工具也会集成该方法。本文从AllReduce开始&#xff0c;随后介绍大模型训练时的主要瓶颈----显存的占用情况。在介绍完成标准数据并行(DP)后&#xff0c;结合前三部分的内…

玩游戏提示d3dx9丢失-找不到d3dx9怎么修复

相信有些朋友遇到了d3dx9丢失的情况不知道怎么解决&#xff0c;而今日小编带来的这篇文章就是讲解关于d3dx9丢失进行修复的操作内容&#xff0c;d3dx9丢失怎么解决&#xff1f;&#xff08;修复方法&#xff09;d3dx9文件是DirectX中必备文件,许多游戏需要此文件运行。 d3dx9丢…

文件系统概述

目录 概述用户空间层面1.应用程序可以直接使用内核提供的系统调用访问文件&#xff1a;2.应用程序也可以使用 glibc 库封装的标准 I/O 流函数访问文件&#xff1a; 硬件层面1.块设备2.闪存3.NVDIMM 内核空间层面 概述 在 Linux 系统中&#xff0c;一切皆文件&#xff0c;除了通…

【MySQL 】:测试数据准备、SQL语句规范与基本操作

前言 欢迎来到小K的MySQL专栏&#xff0c;本节将为大家准备MySQL测试数据、以及带来SQL语句规范、数据库的基本操作的详细讲解~✨文末送书&#xff0c;小K赠书活动第二期 目录 前言一、准备测试数据二、SQL语句规范三、数据库的基本操作四、总结&#xff1a;文末赠书 一、准备测…

直线导轨在焊接领域有什么作用?

焊接技术在现代制造业中的应用越来越广泛&#xff0c;直线导轨作为重要的传动元件&#xff0c;已经成为焊接设备中不可或缺的部分。 相对于直线轴承来说&#xff0c;直线导轨具有较高的负载能力和刚度&#xff0c;能够保证高精度的直线运动&#xff0c;滑动摩擦小&#xff0c;惯…

【Python】异常处理 ③ ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )

文章目录 一、Python 默认捕获所有类型异常1、默认捕获所有类型异常 - 无法获取异常类型2、代码实例 - 默认捕获所有类型异常 二、Python 捕获所有类型异常 - 捕获 Exception 异常1、捕获 Exception 类型异常 - 可获取异常类型2、代码实例 - 捕获 Exception 异常 一、Python 默…

管理类联考——逻辑——知识篇——形式逻辑——三、直言——haimian

直言 考点分析 直言 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量786223232 性质定义 直言命题也叫做性质命题&#xff0c;是判断事物是否具有某种性质的命题。直言命题由四部分组成&#xff1a;主项、谓项、联项、量项。 不同种类 对当关系 对…

PID控制算法:2、Derivative Kick(微分冲击)

什么是微分冲击Derivative Kick 引入微分&#xff0c;就是为了减少超调量的&#xff0c;但是根据PID的经典公式 就看微分部分 在PID刚开始时&#xff0c;误差值肯定是存在的&#xff0c;但是PID启动的瞬间&#xff0c;这个dt是很小的&#xff0c;这就导致是一个很大的值&#…

软件开发实习个人总结

软件开发实习个人总结篇1 一、实习目的 随着时代发展和社会进步&#xff0c;用人单位对游戏软件专业大学生的要求越来越高&#xff0c;对于即将毕业的游戏软件专业在校生而言&#xff0c;为了能更好的适应游戏软件专业严峻的就业形势&#xff0c;毕业后能够尽快的融入到社会&am…

Golang学习日志 ━━ 通过将gin-vue-admin项目上传到自己的仓库并且与原版保持更新来学习github操作

gin-vue-admin是一套国人用golang开发的后台管理系统&#xff0c;本文是从作者早期原文中截取的一部分&#xff0c;后期会以本文为框架进行扩展说明。 官网&#xff1a;https://www.gin-vue-admin.com/ 学习视频&#xff1a;https://www.bilibili.com/video/BV1kv4y1g7nT/?p6 …