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有所帮助。

相关推荐

  1. Python使用SQLiteSQLAlchemy

    2024-06-11 09:40:02       10 阅读
  2. python创建sqlite,并使用flask-sqlalchemy连接

    2024-06-11 09:40:02       13 阅读
  3. Python Flask 使用SQLAlchemy实现ORM管理

    2024-06-11 09:40:02       10 阅读
  4. SQLAlchemyquery函数的使用

    2024-06-11 09:40:02       17 阅读
  5. flask flask-sqlalchemy sqlit3

    2024-06-11 09:40:02       32 阅读
  6. 谈谈Python的ORM框架,如SQLAlchemy

    2024-06-11 09:40:02       14 阅读
  7. 使用PythonSQLiteTkinter库来创建一个简单的查询

    2024-06-11 09:40:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 09:40:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-11 09:40:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-11 09:40:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-11 09:40:02       20 阅读

热门阅读

  1. 如何用visual studio 2022创建MAUI的Hello world程序

    2024-06-11 09:40:02       6 阅读
  2. 使用docker部署在MacOS上部署minecraft服务器

    2024-06-11 09:40:02       8 阅读
  3. VB.net调用VC DLL

    2024-06-11 09:40:02       11 阅读
  4. 程序员如何高效挖掘市场需求

    2024-06-11 09:40:02       9 阅读
  5. MyEclipse 新手使用教程

    2024-06-11 09:40:02       11 阅读
  6. adb 脚本化Android系统截图和录屏

    2024-06-11 09:40:02       8 阅读
  7. 记一次大量CSV数据文件同步到数据库

    2024-06-11 09:40:02       7 阅读
  8. go_compiler

    2024-06-11 09:40:02       4 阅读
  9. 平均召回(Average Recall,AR)概述

    2024-06-11 09:40:02       11 阅读
  10. 细说wayland和X11

    2024-06-11 09:40:02       7 阅读