【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()

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-OpenCV中的图像处理-边缘检测

Python-OpenCV中的图像处理-边缘检测 边缘检测Canny算子 边缘检测Canny算子 Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在 1986 年提出的。它是一个有很多步构成的算法:噪声去除、计算图像梯度、非极大值抑制、滞后阀值等。 Canny(i…

Android:换肤框架Android-Skin-Support

gihub地址:https://github.com/ximsfei/Android-skin-support 样例: 默认: 更换后: 一、引入依赖: // -- 换肤依赖implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Linux系统的Centos7扩容主分区

前言:在学习C#的过程中电脑里面的项目,镜像越来越多之前装系统的时候分配的空间太小导致Linux系统空间不足,应该怎么办呢,lets go 跟着我来将centOS 7扩容吧. 1.关闭虚拟机,在VMWare的”此虚拟机设置“中找到硬盘&…

半年报增幅超预期,但汤臣倍健还是喂不饱年轻人?

文|琥珀消研社 作者|朱古力 谁也想不到,进入三伏天以后首个运动潮流会是“晒背”。 小红书上近5万条“晒背”相关的笔记里,多数都是对“什么时候晒背”、“晒多久合适”等入门级问题的答疑解惑,微博热搜词条更是针对性地给出了“晒背最佳时…

19 | 首尔自行车共享需求预测

文章目录 首尔自行车共享需求预测1. 问题陈述2. 数据描述3. 项目的业务用途是什么?4. 模型构建步骤5. 数据可视化1)热力图2)按季节分的租赁自行车数量3)假日和非假日租赁自行车数量4)太阳辐射与租赁自行车数量5)租赁自行车数量和一天的小时数6)特征重要性首尔自行车共享…

如何选择适合自己的文件传输工具

随着互联网的发展,人们处理文件的需求也随之增加。不管是工作还是生活中,文件传输都是一个非常常见的问题。因此,如何选择适合自己的文件传输工具也越来越重要。在本文中,我将从以下几个方面进行分析和总结,希望能为大…

应用案例|基于三维机器视觉的机器人纸箱拆码垛应用解决方案

Part.1 项目背景 在现代物流和制造行业中,纸箱的拆码垛操作是一项重要且频繁的任务。传统的纸箱拆码垛工作通常由人工完成,这种方式存在劳动强度大、生产效率低以及人为操作容易导致错误等问题,严重影响物料的安全运输和质量。为了满足物流行…

数据结构刷题训练——链表篇(二)

目录 前言 1.题目一:链表分割 1.1 思路 1.2 分析 1.3 题解 2. 题目二:相交链表 2.1 思路 2.2 分析 2.3 题解 3. 题目三:环形链表 3.1 思路 3.2 分析 3.3 题解 总结 前言 本期继续分享链表相关的OJ题目,在这个专栏博客…

《Linux从练气到飞升》No.11 初识操作系统

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Python实现调用百度翻译的API

import requests import hashlib import random import jsondef translate(text, from_lang, to_lang):app_id XXXXX # 替换为你的App IDsecret_key XXXXX # 替换为你的Secret Key# 生成随机数salt random.randint(32768, 65536)# 计算签名sign app_id text str(salt) …

vue的proxy代理详解

一、proxy常用参数说明 module.exports {publicPath: "/",devServer: {proxy: {"/api": {// 代理名称 凡是使用/api开头的地址都是用此代理target: "http://1.2.3.4:5000/", // 需要代理访问的api地址changeOrigin: true, // 允许跨域请求pa…

【云原生】K8S集群

目录 一、调度约束1.1 POT的创建过程1.1调度过程 二、指定节点调度2.1 通过标签选择节点 三、亲和性3.1requiredDuringSchedulingIgnoredDuringExecution:硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution:软策略3.3Pod亲和性与反亲和性3.4使…

---------------- 部署 Zookeeper 集群 ----------------

部署 Zookeeper 集群 1.安装前准备2.安装 Zookeeper修改配置文件在每个节点上创建数据目录和日志目录在每个节点的dataDir指定的目录下创建一个 myid 的文件配置 Zookeeper 启动脚本 //准备 3 台服务器做 Zookeeper 集群 192.168.109.1 192.168.109.2 192.168.109.3 1.安装前准…

Zorin OS 16.3 发布:无缝升级和卓越改进!

导读Zorin OS 团队自豪地宣布了备受期待的 Zorin OS 16.3 版本的发布,这是这个受欢迎的 Linux 发行版的一个里程碑版本。自首次发布以来不到两年时间,Zorin OS 已经获得了庞大的用户群体,截至目前已经有 530 万次下载,而 16.3 版本…

QGIS二次开发六:VS不借助QT插件创建UI界面

上一篇博客我们说了在VS中如何使用QT插件来创建UI界面,但是我们二次开发QGIS的第一篇博客就说了,最好使用OSGeo4W中自动下载的QT进行QGIS二次开发,这样兼容性是最好的,那么该如何在VS中不使用外部安装的QT以及QT的VS插件情况下进行…

B树的插入与删除过程

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

应用程序运行报错:First section must be [net] or [network]:No such file or directory

应用程序报错环境: 在linux下,调用darknet训练的模型,报错:First section must be [net] or [network]:No such file or directory,并提示:"./src/utils.c:256: error: Assertion 0 failed." 如…

YOLOv5-7.0实例分割+TensorRT部署

一:介绍 将YOLOv5结合分割任务并进行TensorRT部署,是一项既具有挑战性又令人兴奋的任务。分割(Segmentation)任务要求模型不仅能够检测出目标的存在,还要精确地理解目标的边界和轮廓,为每个像素分配相应的…

Echarts 让饼图中间文字居中并自适应图表

背景: 产品提出需求在饼图中间放两行文字且居中 “简单,劈劈啪啪写完了” 产品再提出你这个没有自适应啊,屏幕放大、缩小你这个就没有居中了,甚至会和饼图重叠 “emmmmm…" UI图如下: 方案一:使用ti…

Arduino 项目笔记 | Arduino LED Memory Game 颜色记忆游戏机

成果展示 颜色记忆游戏机 | Arduino DIY 1. 线路链连接 1.1 原理图 1.2 PCB 免费PCB打样 Arduino LED Memory Game 颜色记忆机资料下载 1.3 烧录 Bootloader 第二部分:Burn bootloader 2. 程序实现 #define NOTE_B0 31 #define NOTE_C1 33 #define NOT…