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.说明 时间点和(日历)持续时间是可加的,结果是时间点;两个时间点是可减的,结果是持续时间,用时分秒表示;时间型和浮点数运算,结果是时间型,浮点数默认单位是天…...

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

微服务--Gateway网关--全局Token过滤器【重要】
全局过滤器 GlobalFilter, 注入到 IOC里面即可 概念: 全局过滤器: 所有的请求 都会在执行链里面执行这个过滤器 如添加日志、鉴权等 创建一个全局过滤器的基本步骤: 步骤1: 创建过滤器类 首先,创建一个实现了Globa…...

负载均衡在线判题系统【项目】
项目介绍 本项目是一个负载均衡的在线判题系统 (Online Judge, OJ) 的简易实现。该系统的核心功能是处理大量编程问题的提交,并通过负载均衡的机制,分配判题任务到多台服务器上,确保高效和可靠的评测。系统通过自动选择负载较低的服务器进行…...
重构复杂简单变量之用子类替换类型码
子类替换类型码 是一种用于将类型码替换为子类。当代码使用类型码(通常是 int、string 或 enum)来表示对象的不同类别,并且这些类别的行为有所不同时,使用子类可以更加清晰地表达这些差异并减少复杂的条件判断。 一、什么时候使用…...

【Nginx系列】Nginx配置超时时间
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

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

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

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

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

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