首页 > 数据库 >Python数据库操作:使用Python连接和操作数据库

Python数据库操作:使用Python连接和操作数据库

时间:2024-09-30 16:51:11浏览次数:8  
标签:Python 数据库 cursor book books 操作 conn

在这里插入图片描述

Python数据库操作:使用Python连接和操作数据库

数据库入门小分队:Python带你探索数据海洋

想象一下,你正站在一片广阔无垠的海洋前,这片海洋不是水构成的,而是由无数的数据组成。这些数据可能是你的客户信息、销售记录或是任何对你的业务至关重要的信息。现在,你需要一种方法来驾驭这片海洋,让数据为你所用。这就是Python作为一艘强大而灵活的小船的作用——它可以帮助你轻松地在数据海洋中航行。

在这次旅程中,我们将学习如何使用Python与各种数据库进行交互,从简单的查询到复杂的事务处理,一步步揭开数据库世界的神秘面纱。无论你是编程新手还是有一定经验的开发者,这里都将是你踏上成为数据库专家之路的第一步。

搭建桥梁:使用Python连接数据库的几种常见方式

既然我们已经准备好要开始这次探险了,接下来就需要搭建一座通往数据海洋的桥梁。对于Python来说,有多种方式可以实现这一点,其中最常用的是通过sqlite3库连接SQLite数据库,以及使用psycopg2mysql-connector-python这样的库来连接更大型的关系型数据库如PostgreSQL和MySQL。

示例代码:使用sqlite3创建并连接一个SQLite数据库

首先,让我们看看如何使用Python自带的sqlite3模块来创建一个新的SQLite数据库,并插入一些基本的数据。

import sqlite3

# 连接到SQLite数据库(如果文件不存在,则会自动创建)
conn = sqlite3.connect('example.db')

# 创建一个Cursor对象
cursor = conn.cursor()

# 创建一张新表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER
)
''')

# 插入几条记录
users_data = [
    (1, 'Alice', 30),
    (2, 'Bob', 25),
    (3, 'Charlie', 35)
]
cursor.executemany('INSERT INTO users (id, name, age) VALUES (?, ?, ?)', users_data)

# 提交事务
conn.commit()

# 查询所有用户
cursor.execute('SELECT * FROM users')
print(cursor.fetchall())

# 关闭连接
conn.close()

这段代码展示了如何使用sqlite3模块来完成基本的CRUD(创建、读取、更新、删除)操作。通过这种方式,你可以快速上手并开始管理自己的数据集。

游刃有余:掌握基本SQL语句与Python的完美结合

一旦你能够顺利地连接到数据库,下一步就是学会如何高效地使用SQL语句。SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言。通过将SQL与Python结合起来,我们可以编写出既简洁又强大的程序来执行复杂的数据库操作。

示例代码:执行复杂的SQL查询

假设我们现在想要找出年龄大于30岁的所有用户,并且按照年龄降序排列。

import sqlite3

def query_users():
    # 重新打开之前创建的数据库连接
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()

    # 执行复杂查询
    cursor.execute('''
    SELECT * FROM users
    WHERE age > 30
    ORDER BY age DESC
    ''')

    # 获取查询结果
    results = cursor.fetchall()
    
    # 打印结果
    for row in results:
        print(row)

    # 不要忘记关闭连接
    conn.close()

query_users()

这个例子演示了如何构造一个带有条件过滤和排序的SQL查询,并通过Python脚本输出结果。这种能力对于数据分析和报告生成等场景非常有用。

实战演练:通过Python实现数据增删改查操作

理论知识固然重要,但实战才是检验真理的唯一标准。接下来,我们将通过一系列实际操作来巩固所学内容。我们将模拟一个小型图书管理系统,包括添加新书、查找书籍、更新书籍信息以及删除不再需要的书籍等功能。

示例代码:构建一个简单的图书管理系统

首先定义我们的数据模型,然后实现基本的CRUD功能。

import sqlite3

def init_db():
    conn = sqlite3.connect('books.db')
    cursor = conn.cursor()
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS books (
        id INTEGER PRIMARY KEY,
        title TEXT NOT NULL,
        author TEXT,
        year INTEGER
    )
    ''')
    conn.commit()
    conn.close()

def add_book(title, author, year):
    conn = sqlite3.connect('books.db')
    cursor = conn.cursor()
    cursor.execute('INSERT INTO books (title, author, year) VALUES (?, ?, ?)', (title, author, year))
    conn.commit()
    conn.close()

def get_books():
    conn = sqlite3.connect('books.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM books')
    books = cursor.fetchall()
    conn.close()
    return books

def update_book(book_id, title=None, author=None, year=None):
    updates = []
    params = []
    if title is not None:
        updates.append("title=?")
        params.append(title)
    if author is not None:
        updates.append("author=?")
        params.append(author)
    if year is not None:
        updates.append("year=?")
        params.append(year)
    params.append(book_id)
    update_query = f"UPDATE books SET {', '.join(updates)} WHERE id=?"
    
    conn = sqlite3.connect('books.db')
    cursor = conn.cursor()
    cursor.execute(update_query, params)
    conn.commit()
    conn.close()

def delete_book(book_id):
    conn = sqlite3.connect('books.db')
    cursor = conn.cursor()
    cursor.execute('DELETE FROM books WHERE id=?', (book_id,))
    conn.commit()
    conn.close()

# 初始化数据库
init_db()

# 添加几本书
add_book("Python Programming", "John Doe", 2020)
add_book("Advanced SQL", "Jane Smith", 2019)

# 显示所有书籍
print("All Books:")
for book in get_books():
    print(book)

# 更新一本书的信息
update_book(1, title="Learning Python", year=2021)

# 再次显示所有书籍以确认更新
print("\nUpdated Books List:")
for book in get_books():
    print(book)

# 删除一本书
delete_book(2)

# 显示最终的书籍列表
print("\nFinal Books List After Deletion:")
for book in get_books():
    print(book)

以上代码展示了一个完整的图书管理系统的基本框架,涵盖了数据库初始化、增加、读取、更新和删除操作。这不仅是一个很好的练习项目,也为你将来开发更复杂的应用打下了坚实的基础。

进阶秘籍:利用ORM让Python与数据库交互更加优雅

随着项目的复杂度逐渐增加,直接编写SQL语句可能会变得越来越繁琐。这时,就轮到对象关系映射(Object-Relational Mapping, ORM)登场了。ORM提供了一种更高层次的抽象,使得我们可以像操作普通Python对象一样来操作数据库中的记录,从而极大地提高了开发效率。

使用SQLAlchemy进行ORM操作

SQLAlchemy是最受欢迎的Python ORM之一。下面是一个简化的例子,展示如何使用SQLAlchemy来简化前面提到的图书管理系统。

安装SQLAlchemy
pip install sqlalchemy
示例代码:基于SQLAlchemy的图书管理系统
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建基类
Base = declarative_base()

# 定义Book模型
class Book(Base):
    __tablename__ = 'books'
    
    id = Column(Integer, primary_key=True)
    title = Column(String)
    author = Column(String)
    year = Column(Integer)

# 初始化数据库连接
engine = create_engine('sqlite:///books_orm.db')
Base.metadata.create_all(engine)

# 创建Session
Session = sessionmaker(bind=engine)
session = Session()

# 添加新的书籍
new_book = Book(title="Python Mastery", author="Alex Johnson", year=2022)
session.add(new_book)
session.commit()

# 查询所有书籍
all_books = session.query(Book).all()
for book in all_books:
    print(f"ID: {book.id}, Title: {book.title}, Author: {book.author}, Year: {book.year}")

# 更新书籍信息
book_to_update = session.query(Book).filter_by(id=1).first()
if book_to_update:
    book_to_update.title = "Mastering Python"
    session.commit()

# 删除一本书
book_to_delete = session.query(Book).filter_by(id=1).first()
if book_to_delete:
    session.delete(book_to_delete)
    session.commit()

# 最终检查
final_books = session.query(Book).all()
for book in final_books:
    print(f"ID: {book.id}, Title: {book.title}, Author: {book.author}, Year: {book.year}")

# 关闭Session
session.close()

在这个例子中,我们定义了一个Book类来代表数据库中的表,并使用SQLAlchemy提供的API来进行CRUD操作。这种方式不仅使代码更加清晰易懂,还减少了出错的可能性,非常适合大型项目。


通过这篇文章的学习,希望你能对如何使用Python进行数据库操作有一个全面的理解。无论是简单的小项目还是企业级应用,Python及其丰富的库都为你提供了强有力的支持。现在就动手实践起来吧,让你的数据管理工作变得更加高效和有趣!


嘿!欢迎光临我的小小博客天地——这里就是咱们畅聊的大本营!能在这儿遇见你真是太棒了!我希望你能感受到这里轻松愉快的氛围,就像老朋友围炉夜话一样温馨。


这里不仅有好玩的内容和知识等着你,还特别欢迎你畅所欲言,分享你的想法和见解。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。
让我们一起探索新奇的事物,分享生活的点滴,让这个小角落成为我们共同的精神家园。快来一起加入这场精彩的对话吧!无论你是新手上路还是资深玩家,这里都有你的位置。记得在评论区留下你的足迹,让我们彼此之间的交流更加丰富多元。期待与你共同创造更多美好的回忆!


欢迎来鞭笞我:master_chenchen


【内容介绍】

  • 【算法提升】:算法思维提升,大厂内卷,人生无常,大厂包小厂,呜呜呜。卷到最后大家都是地中海。
  • 【sql数据库】:当你在海量数据中迷失方向时,SQL就像是一位超级英雄,瞬间就能帮你定位到宝藏的位置。快来和这位神通广大的小伙伴交个朋友吧!
    【微信小程序知识点】:小程序已经渗透我们生活的方方面面,学习了解微信小程序开发是非常有必要的,这里将介绍微信小程序的各种知识点与踩坑记录。- 【python知识】:它简单易学,却又功能强大,就像魔术师手中的魔杖,一挥就能变出各种神奇的东西。Python,不仅是代码的艺术,更是程序员的快乐源泉!
    【AI技术探讨】:学习AI、了解AI、然后被AI替代、最后被AI使唤(手动狗头)

好啦,小伙伴们,今天的探索之旅就到这里啦!感谢你们一路相伴,一同走过这段充满挑战和乐趣的技术旅程。如果你有什么想法或建议,记得在评论区留言哦!要知道,每一次交流都是一次心灵的碰撞,也许你的一个小小火花就能点燃我下一个大大的创意呢!
最后,别忘了给这篇文章点个赞,分享给你的朋友们,让更多的人加入到我们的技术大家庭中来。咱们下次再见时,希望能有更多的故事和经验与大家分享。记住,无论何时何地,只要心中有热爱,脚下就有力量!


对了,各位看官,小生才情有限,笔墨之间难免会有不尽如人意之处,还望多多包涵,不吝赐教。咱们在这个小小的网络世界里相遇,真是缘分一场!我真心希望能和大家一起探索、学习和成长。虽然这里的文字可能不够渊博,但也希望能给各位带来些许帮助。如果发现什么问题或者有啥建议,请务必告诉我,让我有机会做得更好!感激不尽,咱们一起加油哦!


那么,今天的分享就到这里了,希望你们喜欢。接下来的日子里,记得给自己一个大大的拥抱,因为你真的很棒!咱们下次见,愿你每天都有好心情,技术之路越走越宽广!
在这里插入图片描述

标签:Python,数据库,cursor,book,books,操作,conn
From: https://blog.csdn.net/master_chenchen/article/details/142655169

相关文章

  • Python与自然语言处理库BERT
    Python与自然语言处理库BERT揭开BERT的神秘面纱:从零开始理解这个改变游戏规则的语言模型实战演练:用Python和BERT搭建你的第一个情感分析小助手不只是翻译:探索BERT在跨语言任务中的神奇表现文本生成新高度:利用BERT创造流畅连贯的文章段落优化与调优:让BERT更好地适应特定......
  • Gitee简单操作
    gitee上传代码第一步:电脑上先安装git:下载链接https://git-scm.com/downloads#如果在桌面鼠标右键,出现下面两个东西,则安装成功openGitGUIhereopenGitBashhere第二步:注册gitee/github第三步:创建项目仓库(点击右上角+号)本地git配置-全局(最开始做一......
  • Python自动驾驶指南
    Python自动驾驶指南启程:自动驾驶的奇幻之旅编程魔法师的工具箱:Python与自动驾驶必备库示例代码:使用OpenCV读取并显示图片传感器的秘密:如何用Python解析汽车的眼睛和耳朵激光雷达点云处理智能决策者:构建基于Python的路径规划与避障算法A*搜索算法简介实现A*算法实战演......
  • [Java手撕]读取文件并进行left join操作
    importjava.io.*;importjava.sql.Time;importjava.util.*;importjava.util.concurrent.*;importjava.util.concurrent.atomic.AtomicInteger;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassMain......
  • 【ClickHouse 特点&数据类型&表引擎&SQL操作&副本&分片集群 01】
    概念:ClickHouse是开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告OLAP这样的适合做一些一次插入多次查询这样的操作(适合查询),对于新增更新删除就不太擅长了,所以ClickHouse是一种分析性数据库HBase也是列式存储......
  • Java开发中操作日志的作用和模块
     Java中的操作日志模块的开发和运行维护都是十分耗时耗力。操作日志的收集涉及到公司的项目或者是上市产品的用户体验和反馈。后端和前端开发工程师的日常工作就是对运行维护工程师收集回来的项目和产品的反馈进行系统级别的分析以及需求下发迭代开发。操作日志的打印方式分为线......
  • 加油站智能视频监控预警系统(AI识别烟火打电话抽烟) Python 和 OpenCV 库
    加油站作为存储和销售易燃易爆油品的场所,是重大危险源之一,随着科技的不断发展,智能视频监控预警系统在加油站的安全保障方面发挥着日益关键的作用,尤其是其中基于AI的烟火识别、抽烟识别和打电话识别功能,以及其独特的系统组网方式。加油站重大危险源监测(一)油品的易燃易爆性加油站储......
  • Python - [05] 爬虫
    题记部分 001||爬虫的工作原理(1)获取数据。爬虫程序会根据提供的网址,向服务器发起请求,然后返回数据。(2)解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。(3)提取数据。爬虫程序再从中提取出我们需要的数据。(4)储存数据。爬虫程序把这些有用的数据保存起来,......
  • 计算机毕业设计Python智慧社区养老院管理系统 3j751
    目录python语言框架介绍技术可行性具体实现截图技术栈系统的稳定性和可维护性核心代码部分展示详细视频演示系统测试源码获取方式python语言Python具有强大的优势,通过简洁的语法和类库进行操作。而且Python提供了许多的控制语句,比如if语句、for语句,while语句。在数......
  • 基于PyQt5和SQLite的数据库操作程序
    基于PyQt5和SQLite的数据库操作程序:功能解析在现代办公和数据处理中,数据库操作是不可或缺的一部分。然而,传统的数据库管理工具往往界面复杂,操作繁琐,对于非专业人士来说存在一定的学习曲线。为了解决这个问题,我们开发了一款基于PyQt5和SQLite的数据库操作程序。该程序提供了一......