【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.rhkb.cn/news/83706.html

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

相关文章

paddleseg数据集自定义比例划分为测试集test.txt,训练集train.txt,验证集val.txt

将语义分割的数据集标注好后如下所示: 整理好图片和标签文后需要按照比例划分为训练集,验证集,测试集。 具体划分代码见下: import glob import os.path import argparse import warnings import numpy as npdef parse_args():p…

“清凉计划”KCOFFEE来了,华为天气和肯德基携手提升你的冰凉咖位

八月的热浪席卷着城市,开启了高温酷暑的“闷烤”模式,此时“怕热星人”急需一杯冰爽的冷饮,为了拯救热热热亻七的你们,华为天气联手肯德基带着超强冷势力,发起“清凉计划”,送上一杯KCOFFEE现磨冰咖啡&…

Debian10:安装PHPVirtualBox

PHPVirtualBox 是一个用 PHP 编写,用于管理 VirtualBox 的 Web 前端(由AJAX实现)。 参考文章:VirtualBoxPHPVirtualBox部署_骡子先生的博客-CSDN博客php virualbox,浏览器远程控制VBox 虚拟机phpVirtualBox_weixin_39815879的博客…

编写一个指令(v-focus2end)使输入框文本在聚焦时焦点在文本最后一个位置

项目反馈输入框内容比较多时候,让鼠标光标在最后一个位置,心想什么奇葩需求,后面试了一下,是有点影响体验,于是就有了下面的效果,我目前的项目都是若依的架子,用的是vue2版本。vue3的朋友想要使…

JVM—编译器、类加载的过程、双亲委派机制这些你还记得吗?

背景介绍 这两天在对JVM的知识进行回顾,顺便来分享分享,接下来也会有系列文章,欢迎大家一起讨论。 过程 为什么叫JVM? Java Virtual Machine,java虚拟机。可以理解成一个以字节码为机器指令的CPU 有哪些特点呢&#…

【Flutter】【packages】simple_animations 简单的实现动画

package:simple_animations 导入包到项目中去 可以实现简单的动画, 快速实现,不需要自己过多的设置 有多种样式可以实现[ ] 功能: 简单的用例:具体需要详细可以去 pub 链接地址 1. PlayAnimationBuilder PlayAnima…

递归神经网络简介

一、说明 说起递归神经网络,递归神经网络(RNN)主要包括以下几种类型: 简单的RNN(Simple RNN):最基本的RNN类型,每个时刻的输出都与前面时刻的状态有关。 循环神经网络(R…

Blazor前后端框架Known-V1.2.10

V1.2.10 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…

Kafka:springboot集成kafka收发消息

kafka环境搭建参考Kafka&#xff1a;安装和配置_moreCalm的博客-CSDN博客 1、springboot中引入kafka依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><…

Python-OpenCV中的图像处理-形态学转换

Python-OpenCV中的图像处理-形态学转换 形态学转换腐蚀膨胀开运算闭运算形态学梯度礼帽黑帽形态学操作之间的关系 形态学代码例程 形态学转换 形态学操作:腐蚀&#xff0c;膨胀&#xff0c;开运算&#xff0c;闭运算&#xff0c;形态学梯度&#xff0c;礼帽&#xff0c;黑帽等…

B树的插入与删除过程

B树的插入 原树&#xff1a; 插入key后&#xff0c;若导致原节点关键字数超过上限&#xff0c;则从中间位置&#xff08; ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil ⌈2m​⌉&#xff09;将关键字分成两部分&#xff0c;左部分包含的关键字放在原节点中&#xff0c;右部分包含的关键…

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…

死锁的成因,和解决方案总结

何为死锁 死锁是多线程或并发程序中的一种情况&#xff0c;当多个线程因为竞争资源而相互等待&#xff0c;并且无法继续执行的情况。在死锁中&#xff0c;每个线程都在等待其他线程释放资源&#xff0c;从而导致所有线程都陷入无限等待状态&#xff0c;无法继续向前执行&#…

0805hw

1. #include <myhead.h> void Bub_sort(int *arr,int n)//冒泡排序 {for(int i1;i<n;i){int count0;for(int j0;j<n-i;j){if(arr[j]>arr[j1]){int temparr[j];arr[j]arr[j1];arr[j1]temp;count;}}if(count0){break;}}printf("冒泡排序后输出结果:\n"…

uni-app离线打包高德地图导入android studio不能正常显示

本人使用的uni-app SDK版本&#xff1a;Android-SDK3.8.7.81902_20230704 1.导入以上文件&#xff0c;依赖已经自动添加了 2.确保这个正常引入 3.修改AndroidMainifest.xml,添加自己的密钥

整理mongodb文档:删

个人博客 整理mongodb文档:删 求关注&#xff0c;哪儿不足&#xff0c;求大佬们指出&#xff0c;哪儿写的不够通俗易懂跟清晰&#xff0c;也求指出 文章概叙 本文主要是介绍了删除数据的几个方法&#xff0c;主要还是在介绍deleteMany、deleteOne以及remove&#xff0c;对于…

JAVA基础之放弃使用Random

随机是日常生活中经常遇到的非常有趣的东西&#xff0c;比如说抛硬币&#xff0c;他的不可预知性总是让我们特别着迷&#xff0c;在拿不定主意时&#xff0c;有些人就喜欢用抛硬币的方式来帮助我们做决定。体育领域也喜欢用喜欢用抛硬币的方式来猜先。随机数功能是Java非常非常…

14个前端开发者应该知道的实用网站

在本文中&#xff0c;我将分享一些非常有用的网站合集&#xff0c;这些网站可以在你的日常工作中极大地帮助你。这些网站已经成为我各种任务的首选资源&#xff0c;节省了我的时间&#xff0c;提高了工作效率 文档自动化 Documatic 是一款专为开发人员设计的非常高效的搜索引擎…

Pytorch深度学习-----现有网络模型的使用及修改(VGG16模型)

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

STM32 CubeMX USB_MSC(存储设备U盘)

STM32 CubeMX STM32 CubeMX USB_MSC(存储设备U盘&#xff09; STM32 CubeMX前言 《使用内部Flash》——U盘一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择FATFS功能 二、代码部分修改代码"usbd_storage_if.c"修改代码"user_diskio.c"main函数初始化插…