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

python从0快速上手(十四)数据库操作

Python学习:数据库操作篇

在这个信息爆炸的时代,数据库就像是一个个巨大的宝藏库,里面藏着无数珍贵的数据宝石。而Python,就是那把能够打开这些宝藏库的神奇钥匙。在这一章中,我们将一起学习如何使用Python来操作数据库,包括SQLite、ORM(对象关系映射)以及NoSQL数据库。

1. SQLite

SQLite是一个轻量级的数据库,它不需要独立的服务器进程,数据库文件就是它存储数据的地方。在Python中,我们可以使用sqlite3模块来操作SQLite数据库。

创建SQLite数据库:
在Python中,你可以通过sqlite3模块连接到一个SQLite数据库,如果数据库不存在,它将自动创建。

import sqlite3def create_connection(db_file):""" 创建到SQLite数据库的连接 """conn = Nonetry:conn = sqlite3.connect(db_file)return connexcept Exception as e:print(e)def create_table(conn):""" 创建表 """try:c = conn.cursor()c.execute("""CREATE TABLE IF NOT EXISTS users (id integer PRIMARY KEY,name text NOT NULL,age integer);""")except Exception as e:print(e)# 创建数据库连接
conn = create_connection("mydatabase.db")
if conn is not None:create_table(conn)
else:print("无法创建数据库连接。")

在这个例子中,我们创建了一个名为mydatabase.db的SQLite数据库,并在其中创建了一个名为users的表。

插入数据:
你可以使用execute方法来插入数据。

def insert_user(conn, user):""" 新增用户 """sql = ''' INSERT INTO users(name, age)VALUES(?,?) '''cur = conn.cursor()cur.execute(sql, user)conn.commit()return cur.lastrowid# 插入数据
user = ('Kimi', 30)
id = insert_user(conn, user)
print(f"用户ID:{id}")

在这个例子中,我们向users表中插入了一个新的用户。

查询数据:
你可以使用execute方法来查询数据。

def select_all_users(conn):""" 查询所有用户 """cur = conn.cursor()cur.execute("SELECT * FROM users")rows = cur.fetchall()for row in rows:print(row)# 查询数据
select_all_users(conn)

在这个例子中,我们查询了users表中的所有用户。

更新和删除数据:
你可以使用execute方法来更新和删除数据。

def update_user(conn, user):""" 更新用户 """sql = ''' UPDATE usersSET name = ?WHERE id = ?'''cur = conn.cursor()cur.execute(sql, user)conn.commit()def delete_user(conn, id):""" 删除用户 """sql = 'DELETE FROM users WHERE id=?'cur = conn.cursor()cur.execute(sql, (id,))conn.commit()# 更新数据
update_user(conn, ('Moonshot', 30))# 删除数据
delete_user(conn, 1)

在这个例子中,我们更新了一个用户的名字,并删除了一个用户。

实例:创建一个图书馆管理系统

def create_library_db():conn = create_connection("library.db")if conn is not None:create_table(conn)return connelse:print("无法创建数据库连接。")return Nonedef add_book(conn, book):""" 添加书籍 """sql = ''' INSERT INTO books(title, author, year)VALUES(?,?,?) '''cur = conn.cursor()cur.execute(sql, book)conn.commit()return cur.lastrowiddef list_books(conn):""" 列出所有书籍 """cur = conn.cursor()cur.execute("SELECT * FROM books")rows = cur.fetchall()for row in rows:print(row)# 创建数据库连接
conn = create_library_db()
if conn is not None:# 添加书籍book = ('Python编程', 'Kimi', 2024)id = add_book(conn, book)print(f"书籍ID:{id}")# 列出书籍list_books(conn)
else:print("无法创建数据库连接。")

在这个例子中,我们创建了一个图书馆管理系统,它允许我们添加书籍和列出所有书籍。

2. ORM(对象关系映射)

ORM是一种编程技术,它允许你使用面向对象的方法来操作数据库。在Python中,我们可以使用SQLAlchemy这样的ORM库来操作数据库。

安装SQLAlchemy:
首先,你需要安装SQLAlchemy。

pip install SQLAlchemy

定义模型:
你可以定义模型类来映射数据库表。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)# 创建数据库引擎
engine = create_engine('sqlite:///mydatabase.db')# 创建表
Base.metadata.create_all(engine)

在这个例子中,我们定义了一个User模型,并创建了一个SQLite数据库。

添加数据:
你可以使用ORM会话来添加数据。

Session = sessionmaker(bind=engine)
session = Session()new_user = User(name='Kimi', age=30)
session.add(new_user)
session.commit()

在这个例子中,我们添加了一个新的用户。

查询数据:
你可以使用ORM会话来查询数据。

# 查询所有用户
users = session.query(User).all()
for user in users:print(user.name, user.age)

在这个例子中,我们查询了所有用户。

更新和删除数据:
你可以使用ORM会话来更新和删除数据。

# 更新用户
user_to_update = session.query(User).filter_by(name='Kimi').first()
user_to_update.age = 31
session.commit()# 删除用户
user_to_delete = session.query(User).filter_by(name='Kimi').first()
session.delete(user_to_delete)
session.commit()

在这个例子中,我们更新了一个用户的年龄,并删除了一个用户。

实例:创建一个博客系统

class Post(Base):__tablename__ = 'posts'id = Column(Integer, primary_key=True)title = Column(String)content = Column(String)# 创建表
Base.metadata.create_all(engine)# 添加文章
new_post = Post(title='Python学习大纲', content='这是一篇关于Python学习大纲的文章。')
session.add(new_post)
session.commit()# 查询文章
posts = session.query(Post).all()
for post in posts:print(post.title, post.content)# 更新文章
post_to_update = session.query(Post).filter_by(title='Python学习大纲').first()
post_to_update.content = '这是一篇更新后的关于Python学习大纲的文章。'
session.commit()# 删除文章
post_to_delete = session.query(Post).filter_by(title='Python学习大纲').first()
session.delete(post_to_delete)
session.commit()

在这个例子中,我们创建了一个博客系统,它允许我们添加文章、查询文章、更新文章和删除文章。

3. NoSQL数据库

NoSQL数据库是一种非关系型数据库,它不需要固定的表结构。在Python中,我们可以使用PyMongo这样的库来操作MongoDB这样的NoSQL数据库。

安装PyMongo:
首先,你需要安装PyMongo。

pip install pymongo

连接到MongoDB:
你可以使用PyMongo连接到MongoDB。

from pymongo import MongoClientclient = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]

在这个例子中,我们连接到了一个名为mydatabase的MongoDB数据库。

插入数据:
你可以使用PyMongo插入数据。

users_collection = db["users"]new_user = {"name": "Kimi", "age": 30}
users_collection.insert_one(new_user)

在这个例子中,我们向users集合中插入了一个新的用户。

查询数据:
你可以使用PyMongo查询数据。

users = users_collection.find()
for user in users:print(user["name"], user["age"])

在这个例子中,我们查询了users集合中的所有用户。

更新和删除数据:
你可以使用PyMongo更新和删除数据。

# 更新用户
users_collection.update_one({"name": "Kimi"}, {"$set": {"age": 31}})# 删除用户
users_collection.delete_one({"name": "Kimi"})

在这个例子中,我们更新了一个用户的年龄,并删除了一个用户。

实例:创建一个购物车系统

products_collection = db["products"]
carts_collection = db["carts"]# 添加商品
new_product = {"name": "Python编程书籍", "price"
: 100}
products_collection.insert_one(new_product)# 添加购物车
new_cart = {"user": "Kimi", "items": [{"product": "Python编程书籍", "quantity": 2}]}
carts_collection.insert_one(new_cart)# 查询购物车
carts = carts_collection.find()
for cart in carts:print(cart["user"], cart["items"])# 更新购物车
carts_collection.update_one({"user": "Kimi"}, {"$set": {"items": [{"product": "Python编程书籍", "quantity": 3}]}})

在这个例子中,我们创建了一个购物车系统,它允许我们添加商品、添加购物车、查询购物车和更新购物车。

小结

数据库操作是Python中的一项强大技能,它让我们的程序能够存储和查询大量的数据。通过SQLite,我们可以操作关系型数据库。通过ORM,我们可以以面向对象的方式操作数据库。通过NoSQL数据库,我们可以操作非关系型数据库。

现在,你已经掌握了Python中数据库操作的基础。但是,这只是冰山一角。在编程的世界里,还有更多高级的概念等着你去探索。编程就像是一场冒险,而你已经迈出了第一步。祝你在编程的世界里旅途愉快!🐍💻

相关文章:

python从0快速上手(十四)数据库操作

Python学习:数据库操作篇 在这个信息爆炸的时代,数据库就像是一个个巨大的宝藏库,里面藏着无数珍贵的数据宝石。而Python,就是那把能够打开这些宝藏库的神奇钥匙。在这一章中,我们将一起学习如何使用Python来操作数据…...

【热门主题】000004 案例 Vue.js组件开发

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...

Ingress-nginx中HTTPS的强制转发

文章目录 在使用aws 的NLB转发流量到ingress时,发现NLP上生成的转发配置不符合正常预期,如下图: ingress-nginx service 配置如下: apiVersion: v1 kind: Service metadata:annotations:service.beta.kubernetes.io/aws-load-b…...

C++深入探寻二叉搜索树:数据管理的智慧之选

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C:由浅入深篇 小新的主页:编程版小新-CSDN博客 前言: 我们在前面已经学习过有关…...

Python 文件 I/O 入门指南

Python 文件 I/O 入门指南 文章目录 Python 文件 I/O 入门指南一、文件的打开与关闭二、文件的读取三、文件的写入四、文件的定位五、文件的属性六、处理不同类型的文件七、错误处理八、总结 在 Python 编程中,文件输入输出(I/O)是一项非常重…...

Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【检测】(五)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…...

1.2.3 TCP IP模型

TCP/IP模型(接网叔用) 网络接口层 网络层 传输层 应用层 理念:如果某些应用需要“数据格式转换”“会话管理功能”,就交给应用层的特定协议去实现 tip:数据 局部正确不等于全局正确 但是,数据的 全局正…...

选择、冒泡和插入排序及其优化版本课件

视频链接:是趣味编程的个人空间-是趣味编程个人主页-哔哩哔哩视频...

Matlab自学笔记三十九:日期时间型数据的算术运算:加减运算

1.说明 时间点和(日历)持续时间是可加的,结果是时间点;两个时间点是可减的,结果是持续时间,用时分秒表示;时间型和浮点数运算,结果是时间型,浮点数默认单位是天&#xf…...

Java-多线程2

什么是线程? 线程是 cpu调度和执行的单位。 多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈。 如何实现线程 继承Thread类 实现步骤: 创建自定义类,继承Thread类 重写run方法 创建自定…...

POWER_CONMETRICS的packet wakeup events触发条件的代码走读

摘要: adb shell dumpsys connmetrics 的packet wakeup events触发条件:首先App是无法控制packet wakeup events的事件日志打印,主要App联网过程中网络状态或配置发生变化时由系统netd自动触发的统计。 通俗理解:目前主要表示触…...

Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException

【BUG】通过Autowired注入了一个Bean SeqNo,测试的时候需要修改其中的字段。通过传统的反射,无论如何都拿不到信息,关键是一方面可以通过IDEA跳转,一方面debug也确实能看到这个字段。但是每次调用set方法报错:NoSuchFi…...

Vue项目兼容IE11

配置Vue项目兼容IE11详解 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但对于 IE9,Vue 底层是支持。 由于开发过程中,我们经常会使用一些第三方插件或组件,对于这些组件,有时我们…...

可以帮助你快速禁用windows自带的防火墙程序defender control,有效解决占用内存大的问题,供大家学习研究参考

可以关闭windows自带的windows defender防火墙的工具,defender control官方版界面小巧,功能强大,当大家需要手动关闭或禁用windows defender时,就可以使用这款软件,以此来一键关闭或开启这个烦人的系统防火墙。操作起来也非常的简单便捷。 defender control怎么使用 下载…...

2024年9月电子学会Scratch图形化编程等级考试二级真题试卷

2024.09 Scratch图形化编程等级考试二级真题试卷 题目总数:37 总分数:100 一、选择题 第 1 题 Scratch小猫初始坐标是(50,50),小猫向下移动100步后的坐标是?( ) A.(150,50) B.(-50,50) C.(50,-50) D.(50,1…...

STL-vector+题目

vector-顺序表&#xff0c;可以存放任意类型的数据。 vector在[ ]和迭代器、范围for方面的使用差不多一样。 vector的迭代器有普通的还有const类型的迭代器。 vector使用下标[ ]好用。迭代器是容器通用的访问方式&#xff0c;使用方法基本相似。 #include <iostream> #i…...

微服务--Gateway网关--全局Token过滤器【重要】

全局过滤器 GlobalFilter&#xff0c; 注入到 IOC里面即可 概念&#xff1a; 全局过滤器&#xff1a; 所有的请求 都会在执行链里面执行这个过滤器 如添加日志、鉴权等 创建一个全局过滤器的基本步骤&#xff1a; 步骤1: 创建过滤器类 首先&#xff0c;创建一个实现了Globa…...

负载均衡在线判题系统【项目】

项目介绍 本项目是一个负载均衡的在线判题系统 (Online Judge, OJ) 的简易实现。该系统的核心功能是处理大量编程问题的提交&#xff0c;并通过负载均衡的机制&#xff0c;分配判题任务到多台服务器上&#xff0c;确保高效和可靠的评测。系统通过自动选择负载较低的服务器进行…...

重构复杂简单变量之用子类替换类型码

子类替换类型码 是一种用于将类型码替换为子类。当代码使用类型码&#xff08;通常是 int、string 或 enum&#xff09;来表示对象的不同类别&#xff0c;并且这些类别的行为有所不同时&#xff0c;使用子类可以更加清晰地表达这些差异并减少复杂的条件判断。 一、什么时候使用…...

【Nginx系列】Nginx配置超时时间

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

小智AI+MCP

什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析&#xff1a;AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github&#xff1a;https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...