当前位置: 首页 > 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 的首页,持续学…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...