【100天精通python】Day30:使用python操作数据库_数据库基础入门

 专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html


1 数据库基础知识介绍

1.1 什么是数据库?

        数据库是一个结构化存储和组织数据的集合,它可以被有效地访问、管理和更新。数据库的目的是为了提供一种可靠的方式来存储和管理大量的数据,以便用户和应用程序可以方便地进行数据操作、查询和分析。

1.2 数据库管理系统(DBMS)

        数据库管理系统(Database Management System,简称DBMS)是一个软件系统,它允许用户创建、访问和管理数据库。DBMS负责处理数据库的各种操作,如数据的存储、检索、更新和删除,同时也提供了一种安全的方式来管理数据的访问权限和完整性。DBMS还可以提供查询语言,允许用户使用特定的语法查询数据库中的数据。

一些常见的DBMS包括:

  • MySQL
  • PostgreSQL
  • Oracle Database
  • Microsoft SQL Server
  • SQLite

1.3 关系型数据库和非关系型数据库

1.3.1 关系型数据库

        关系型数据库(Relational Database)是一种以表格形式组织数据的数据库。它使用结构化查询语言(Structured Query Language,SQL)来管理和查询数据。关系型数据库中的数据以行和列的形式存储,每个表格(也称为关系)都具有固定的列和数据类型。

优点:

  • 数据之间的关系明确,容易理解。
  • 支持复杂的查询,例如多表连接。
  • 具备数据一致性和完整性。

缺点:

  • 不够适用于存储大量非结构化数据,如文本、图像等。
  • 在大规模的数据集上可能性能较低。

常见的关系型数据库包括MySQL、PostgreSQL、Oracle等。

1.3.2 非关系型数据库

        非关系型数据库(NoSQL Database)是一类不使用传统关系型表格结构来存储数据的数据库。它们适用于需要处理大规模非结构化数据或需要更高的可扩展性和灵活性的场景。

非关系型数据库分为多个子类,包括:

  • 文档数据库(Document Database):以文档形式存储数据,如MongoDB。
  • 列族数据库(Column-family Database):将数据存储为列族,如Apache Cassandra。
  • 键值对数据库(Key-Value Store):将数据存储为键值对,如Redis。
  • 图数据库(Graph Database):专门用于处理图结构数据,如Neo4j。

优点:

  • 适用于非结构化、分布式、高并发等场景。
  • 具备较高的可扩展性和性能。

缺点:

  • 数据模型和查询语言通常比较特定,学习和使用成本较高。
  • 不同类型的非关系型数据库之间差异较大,选择合适的数据库需要根据具体情况。

总结: 数据库是用于存储和管理数据的结构化集合,数据库管理系统(DBMS)是用于操作和管理数据库的软件系统。关系型数据库和非关系型数据库是两种不同类型的数据库模型,各自适用于不同的数据存储和处理需求。

2 python 中的数据库操作库介绍

        Python中有多个数据库操作库可供选择,用于连接、操作和管理各种类型的数据库。以下是一些常见的Python数据库操作库的概述:

2.1 SQLite3

SQLite3是一个嵌入式关系型数据库引擎,无需独立的服务器即可使用。它是Python标准库的一部分,适用于小型项目和原型开发。

主要特点:

  • 轻量级,无需额外配置。
  • 存储在单个文件中,适用于单用户和小规模应用。
  • 支持事务和多用户访问。

2.2 MySQL Connector/Python

MySQL Connector/Python是官方提供的用于连接MySQL数据库的库。它提供了高性能的连接和数据操作功能。

主要特点:

  • 官方支持,提供广泛的功能和兼容性。
  • 支持连接池、事务管理和批量操作。
  • 适用于中小型应用和大规模项目。

2.3 psycopg2(用于连接PostgreSQL数据库)

        Psycopg2是用于连接和操作PostgreSQL数据库的库。它提供了高度的性能和灵活性。

主要特点:

  • 支持高级的PostgreSQL功能,如数据类型、查询优化等。
  • 提供连接池、事务管理和异步查询支持。
  • 适用于复杂的数据处理和大规模应用。

2.4 SQLAlchemy

SQLAlchemy是一个全功能的SQL工具包和对象关系映射(ORM)库,它允许你通过Python对象来操作数据库,抽象了底层的数据库细节。

主要特点:

  • 支持多种数据库后端,包括SQLite、MySQL、PostgreSQL等。
  • 提供ORM支持,允许使用Python对象来表示数据库表和关系。
  • 支持灵活的查询、连接池和事务管理。

2.5 peewee

Peewee是一个简单、小巧的Python ORM库,适用于小型和中小型项目。

主要特点:

  • 简洁易用,学习曲线较低。
  • 支持SQLite、MySQL、PostgreSQL等多种数据库。
  • 提供数据模型定义、查询、事务管理等功能。

2.6 SQLAlchemy core

除了ORM功能,SQLAlchemy还提供了"SQLAlchemy Core",这是一组用于执行SQL语句和管理数据库连接的工具。

主要特点:

  • 提供底层的SQL表达和查询语言。
  • 支持连接池、事务管理等。
  • 适用于需要更精细控制数据库操作的场景。

这只是一些常见的Python数据库操作库的概述。选择适合你项目需求的库取决于项目的规模、性能要求和开发人员的熟悉程度。无论选择哪个库,了解其文档和示例是掌握数据库操作的关键。

3. Python中的数据库操作库流程

3.1 python操作数据库的通用流程

Python操作数据库的通用流程通常包括以下步骤:

  1. 导入数据库库:首先,你需要导入适用于所选数据库的库。不同的数据库类型需要不同的库,如SQLite、MySQL、PostgreSQL等。

  2. 建立数据库连接:使用库提供的方法建立与数据库的连接。这通常需要提供数据库的地址、用户名、密码和数据库名等信息。

  3. 创建游标对象:通过数据库连接,创建一个游标对象,它将用于执行SQL语句和处理查询结果。

  4. 执行SQL语句:使用游标对象执行各种SQL操作,如SELECT、INSERT、UPDATE、DELETE等。你可以在这里使用SQL查询语句,也可以使用库提供的方法进行数据操作。

  5. 处理查询结果:如果执行了SELECT查询,你可以使用游标对象来获取查询结果。结果通常以元组、列表、字典或自定义对象的形式返回。

  6. 提交事务(可选):如果进行了修改操作(INSERT、UPDATE、DELETE等),需要提交事务以保存更改。对于大多数库,修改操作默认是在事务中进行的,但你可以手动提交或回滚事务。

  7. 关闭游标和连接:在完成数据库操作后,务必关闭游标和连接,以释放资源并确保安全关闭连接。

3.2 示例

下面是一个通用的Python数据库操作流程,以SQLite3库示例: 

import sqlite3# 1. 导入数据库库# 2. 建立数据库连接
conn = sqlite3.connect('mydatabase.db')# 3. 创建游标对象
cursor = conn.cursor()# 4. 执行SQL语句
cursor.execute("SELECT * FROM users")# 5. 处理查询结果
rows = cursor.fetchall()
for row in rows:print(row)# 6. 提交事务(如果有修改操作)
conn.commit()# 7. 关闭游标和连接
cursor.close()
conn.close()

 这个通用流程在不同的数据库库中基本保持一致,只是具体的方法和用法可能会有些不同。在实际应用中,你可以根据选择的数据库库和项目需求,对流程进行适当的调整

 4 python 常用数据库使用示例

4.1 SQLite3

        SQLite3是一个嵌入式的轻量级关系型数据库引擎,适用于小型项目或原型开发。它是Python标准库的一部分,无需额外安装。

示例

import sqlite3# 连接到SQLite数据库
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()# 创建表
cursor.execute('''CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)''')# 插入数据
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:print(row)# 关闭连接
conn.close()

4.2 MySQL Connector/Python

        MySQL Connector/Python是官方提供的用于连接MySQL数据库的库。

import mysql.connector# 连接到MySQL数据库
conn = mysql.connector.connect(host="localhost",user="username",password="password",database="mydatabase"
)
cursor = conn.cursor()# 执行SQL语句
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:print(row)# 关闭连接
conn.close()

4.3 psycopg2(用于连接PostgreSQL数据库)

Psycopg2是用于连接和操作PostgreSQL数据库的库。

示例

import psycopg2# 连接到PostgreSQL数据库
conn = psycopg2.connect(host="localhost",user="username",password="password",database="mydatabase"
)
cursor = conn.cursor()# 执行SQL语句
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
for row in rows:print(row)# 关闭连接
conn.close()

4.4 SQLAlchemy

SQLAlchemy是一个SQL工具包和对象关系映射(ORM)库,提供了更高层次的抽象来处理数据库操作。它支持多种数据库后端。

示例

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base# 创建数据库连接引擎
engine = create_engine('sqlite:///mydatabase.db', echo=True)
Base = declarative_base()# 定义数据模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)# 创建数据表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()# 插入数据
user = User(name='Alice')
session.add(user)
session.commit()# 查询数据
users = session.query(User).all()
for user in users:print(user.id, user.name)# 关闭会话
session.close()

下节介绍数据库连接配置。

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

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

相关文章

让三驾马车奔腾:华为如何推动空间智能化发展?

上个月,国务院常务会议审议通过了《关于促进家居消费的若干措施》,其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说,以整屋为单位的空间智能品类&#x…

基于Java+SpringBoot+Vue的时间管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

数据链路层概述

数据传输过程如下: 数据包按上述过程传输,详见(计算机网络概述三)。在分析数据链路层时可以假象成其沿着水平传播。 这三段链路层的传播方式可能会有所不同。 基本概念: 链路:指一个节点到相邻节点的一段物…

influxDB

文章目录 版本2.0 数据结构Organization 组织Bucket 存储桶Measurementtagfieldtimestamp retention policy (RP) 保留策略Point 一条数据Series 一组数据 写入gzip压缩 查询FluxInfluxQL 官网 https://docs.influxdata.com/v1.8 中文翻译文档 https://influxdb-v1-docs-cn.cno…

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…

Flink多流处理之connect拼接流

Flink中的拼接流connect的使用其实非常简单,就是leftStream.connect(rightStream)的方式,但是有一点我们需要清楚,使用connect后并不是将两个流给串联起来了,而是将左流和右流建立一个联系,作为一个大的流,并且这个大的流可以使用相同的逻辑处理leftStream和rightStream,也可以…

【golang】工作区与GOPATH

在学习go语言时,我们会从官网下载go语言的二进制包,然后解压并安装到某个目录,最后会配置环境变量,通过输入命令go version来验证是否安装成功。 配置了path环境后,我们还需要再配置3个环境变量,GOROOT、G…

完美的分布式监控系统——Prometheus(普罗米修斯)与优雅的开源可视化平台——Grafana(格鲁夫娜)

一、基本概念 1、之间的关系 prometheus与grafana之间是相辅相成的关系。作为完美的分布式监控系统的Prometheus,就想布加迪威龙一样示例和动力强劲。在猛的车也少不了仪表盘来观察。于是优雅的可视化平台Grafana出现了。 简而言之Grafana作为可视化的平台&#xff…

在excel调用SAP函数执行SAP数据查找或提交

1、下载插件 2、安装插件 3、执行函数 3.1 第一步 通过SAPRegister连接SAP服务器 var reg SAPRegister("10.10.14.15", "00", "mes", "AQ123456", "800") 需要改为实际的连接信息 "10.10.14.15" 为SAP服务器I…

嘉楠勘智k230开发板上手记录(三)--K230_RVV实战

按照K230_RVV实战.md操作 在k230_sdk目录下运行,Makefile里默认的toolchain路径是在/opt下的,需要拷贝过去 cp -r toolchain /opt/ make rt-smart-apps 进入目录 src/big/rt-smart 运行脚本 source smart-env.sh riscv64 配置环境变量 source smart-e…

随着野火的增加,甲烷排放也会增加

2020 年对加利福尼亚州造成严重破坏的野火使大气中充满了强效温室气体。 2020 年,溪火烧毁了北加州的内华达山脉。图片来源:Zachary Cava/Flickr,CC BY-NC-SA 2.0 2020 年,在高温和干旱的推动下,加州野火烧毁了超过160…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法,整数部分用位置index代替,小数部分用查找表实现 参考: Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

Netty:ChannelHandler的两个生命周期监听事件方法:handlerAdded 和 handlerRemoved

说明 io.netty.channel.ChannelHandler有两个生命周期监听事件方法: handlerAdded(ChannelHandlerContext ctx):当ChannelHandler被添加到实际的上下文、并且已经准备就绪等待处理事件的时候被调用。 handlerRemoved(ChannelHandlerContext ctx)&#…

SQL-每日一题【1179. 重新格式化部门表】

题目 部门表 Department: 编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。 查询结果格式如下面的示例所示: 解题思路 1.题目要求我们重新格式化表,…

C++入门篇6 C++的内存管理

在学习C的内存管理之前,我们先来回顾一下C语言中动态内存 int main() {int* p1 (int*)malloc(sizeof(int));free(p1);// 1.malloc/calloc/realloc的区别是什么?int* p2 (int*)calloc(4, sizeof(int));//calloc 可以初始化空间为0int* p3 (int*)reall…

SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…

安全杂记 - Linux文本三剑客之awk

目录 1.什么是AWK2.正则表达式3.语法4.内置变量示例printf命令5.复现awk经典实例(1).插入几个新字段(2).格式化空白(3).筛选IPv4地址(4).筛选给定时间范围内的日志 1.什么是AWK awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本&a…

基于DETR (DEtection TRansformer)开发构建MSTAR雷达影像目标检测系统

关于DETR相关的实践在之前的文章中很详细地介绍过,感兴趣的话可以自行移步阅读即可: 《DETR (DEtection TRansformer)基于自建数据集开发构建目标检测模型超详细教程》 《书接上文——DETR评估可视化》 基于MSTAR雷达影像数据开发构建目标检测系统&am…

CentOS虚拟机更改屏幕锁屏时间

(1)点击“应用程序”,再点击“系统工具”,再点击“设置” (2) (3)在“设置”中点击“Privacy”,点击“锁屏”

免费实用的日记应用:Day One for Mac中文版

Day One for Mac是一款运行在Mac平台上的日记软件,你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容,day one mac版还支持Dropbox同步功能,想要day one mac中文免费版的朋友赶紧来试试吧! …