Python中使用SQLite和SQLAlchemy

SQLite是一种嵌入式关系数据库管理系统,广泛应用于轻量级数据库应用。SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,提供了高层次和低层次的数据库访问。结合使用SQLite和SQLAlchemy,可以有效地管理和操作数据库。

本文将详细介绍如何在Python中使用SQLite和SQLAlchemy,包括以下内容:

  1. SQLite简介与安装
  2. SQLAlchemy简介与安装
  3. 使用SQLAlchemy连接SQLite数据库
  4. 定义数据库模型
  5. 数据库操作(增、删、改、查)
  6. 复杂查询
  7. 数据库迁移
  8. 实践示例:图书管理系统

一、SQLite简介与安装

SQLite是一种轻量级的关系数据库,它嵌入在应用程序中。SQLite不需要独立的服务器进程,可以直接读取和写入磁盘上的普通文件,适用于嵌入式应用、测试、开发和小型数据库应用。

在大多数情况下,SQLite已经内置在Python标准库中,因此不需要额外安装。

你可以通过以下方式检查SQLite版本:

复制代码

import sqlite3 print(sqlite3.sqlite_version)

二、SQLAlchemy简介与安装

SQLAlchemy是一个Python SQL工具包和ORM库,为开发者提供了一种简单而强大的方式来操作数据库。它支持多种数据库,包括SQLite、MySQL、PostgreSQL等。

安装SQLAlchemy可以使用pip命令:

复制代码

pip install SQLAlchemy

三、使用SQLAlchemy连接SQLite数据库

首先,创建一个Python脚本,并导入所需的模块:

复制代码

python

複製程式碼

from sqlalchemy import create_engine, Column, Integer, String, Sequence from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker

然后,使用SQLAlchemy连接SQLite数据库:

复制代码

python

複製程式碼

# 创建数据库引擎 engine = create_engine('sqlite:///example.db', echo=True) # 创建基类 Base = declarative_base() # 创建数据库会话 Session = sessionmaker(bind=engine) session = Session()

四、定义数据库模型

在SQLAlchemy中,数据库模型是由类定义的,每个类代表数据库中的一张表。以下是一个定义用户表的示例:

复制代码

class User(Base): __tablename__ = 'users' id = Column(Integer, Sequence('user_id_seq'), primary_key=True) name = Column(String(50)) age = Column(Integer) def __repr__(self): return f"<User(name='{self.name}', age='{self.age}')>" # 创建所有表 Base.metadata.create_all(engine)

五、数据库操作(增、删、改、查)

插入数据

使用SQLAlchemy插入数据非常简单:

# 创建新用户 new_user = User(name='Alice', age=25) # 添加到会话 session.add(new_user) # 提交会话 session.commit()

查询数据

使用SQLAlchemy查询数据:

# 查询所有用户 users = session.query(User).all() for user in users: print(user) # 查询特定用户 user = session.query(User).filter_by(name='Alice').first() print(user)

更新数据

更新数据同样简单:

# 更新用户年龄 user = session.query(User).filter_by(name='Alice').first() user.age = 26 session.commit()

删除数据

删除数据如下:

复制代码

# 删除用户 user = session.query(User).filter_by(name='Alice').first() session.delete(user) session.commit()

六、复杂查询

SQLAlchemy支持复杂的查询,如联接、子查询等。以下是一些示例:

联接查询

假设我们有另一个表Address,其结构如下:

复制代码

class Address(Base): __tablename__ = 'addresses' id = Column(Integer, Sequence('address_id_seq'), primary_key=True) email = Column(String(100)) user_id = Column(Integer) def __repr__(self): return f"<Address(email='{self.email}')>" # 创建所有表 Base.metadata.create_all(engine)

联接查询如下:

复制代码

from sqlalchemy.orm import relationship class User(Base): __tablename__ = 'users' id = Column(Integer, Sequence('user_id_seq'), primary_key=True) name = Column(String(50)) age = Column(Integer) addresses = relationship('Address', backref='user') class Address(Base): __tablename__ = 'addresses' id = Column(Integer, Sequence('address_id_seq'), primary_key=True) email = Column(String(100)) user_id = Column(Integer, ForeignKey('users.id')) # 查询用户及其地址 results = session.query(User).join(Address).filter(User.name == 'Alice').all() for user in results: print(user) for address in user.addresses: print(address)

七、数据库迁移

数据库模式的变化需要进行数据库迁移。SQLAlchemy没有内置的迁移工具,但可以使用Alembic来管理迁移。首先安装Alembic:

pip install alembic

初始化Alembic:

alembic init alembic

配置Alembic连接到你的数据库:

编辑alembic.ini文件,设置sqlalchemy.url为你的数据库URL。

生成迁移脚本:

alembic revision --autogenerate -m "create users and addresses tables"

应用迁移:

alembic upgrade head

八、实践示例:图书管理系统

最后,我们通过一个完整的实践示例来展示如何使用SQLite和SQLAlchemy构建一个简单的图书管理系统。

定义模型

首先,定义两个模型:AuthorBook

class Author(Base): __tablename__ = 'authors' id = Column(Integer, primary_key=True) name = Column(String) class Book(Base): __tablename__ = 'books' id = Column(Integer, primary_key=True) title = Column(String) author_id = Column(Integer, ForeignKey('authors.id')) author = relationship('Author', backref='books') Base.metadata.create_all(engine)

插入数据

插入一些作者和书籍数据:

# 插入作者 author1 = Author(name='J.K. Rowling') author2 = Author(name='J.R.R. Tolkien') # 插入书籍 book1 = Book(title='Harry Potter and the Philosopher\'s Stone', author=author1) book2 = Book(title='The Hobbit', author=author2) # 添加到会话并提交 session.add_all([author1, author2, book1, book2]) session.commit()

查询数据

查询所有书籍及其作者:

books = session.query(Book).all() for book in books: print(f"{book.title} by {book.author.name}")

更新数据

更新书籍标题:

book = session.query(Book).filter_by(title='The Hobbit').first() book.title = 'The Hobbit: There and Back Again' session.commit()

删除数据

删除一个作者:

author = session.query(Author).filter_by(name='J.K. Rowling').first() session.delete(author) session.commit()

总结

通过本文,我们学习了如何在Python中使用SQLite和SQLAlchemy来管理和操作数据库。从创建数据库连接、定义模型、执行基本数据库操作,到复杂查询和数据库迁移,我们涵盖了SQLAlchemy的核心功能。最后,通过一个完整的图书管理系统示例,展示了如何在实际应用中使用这些知识。

无论是简单的项目还是复杂的应用,SQLAlchemy都提供了强大的功能和灵活性,使得操作数据库变得更加简单和高效。希望本文对你理解和使用SQLite与SQLAlchemy有所帮助。

相关推荐
q5673152318 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀19 分钟前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆20 分钟前
数据采集之selenium模拟登录
python·selenium·测试工具
狂奔solar1 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE1 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i1 小时前
Python爬虫学习
爬虫·python·学习
CopyDragon1 小时前
设置域名跨越访问
数据库·sqlite
努力的家伙是不讨厌的2 小时前
解析json导出csv或者直接入库
开发语言·python·json
云空2 小时前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
成富3 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle