SQLAlchemy使用指南

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: **SQLAlchemy 指南**:Python SQL 工具包,提供数据库高级抽象。安装:`pip install sqlalchemy`,加上数据库驱动(如 MySQL: `pip install mysql-connector-python`)。基础使用包括:创建数据库连接、定义模型、创建表、添加/查询/更新/删除数据。高级功能涉及关系映射、原生 SQL 语句及 SQLAlchemy Core。推荐阅读官方文档以深入了解。

SQLAlchemy使用指南

SQLAlchemy 是一个 Python SQL 工具包和 ORM 库,提供了对数据库的高级抽象和操作。

安装 SQLAlchemy

首先,确保你已经安装了 SQLAlchemy 和数据库驱动程序,例如 SQLite、PostgreSQL 或 MySQL。
这里我使用 MySQL

pip install sqlalchemy

对于具体的数据库驱动程序:

  • SQLite 已内置在 Python 中,无需额外安装。
  • PostgreSQL: pip install psycopg2-binary
  • MySQL: pip install mysql-connector-python

注意 安装 mysqlclient 对于新版本已经失效

基础使用

1. 创建数据库连接和会话

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 创建数据库引擎
engine = create_engine('mysql+mysqlconnector://username:password@hostname/test')

# 创建会话类
Session = sessionmaker(bind=engine)
session = Session()

2. 定义模型

使用 SQLAlchemy 的 ORM 功能定义数据模型。

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

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    email = Column(String(50))
    remark = Column(String(50))

    def __repr__(self):
        return f"<User(name='{self.name}', email='{self.email}', remark='{self.remark}')>"

3. 创建数据库表

Base.metadata.create_all(engine)

4. 添加数据

# 创建一个新的用户实例
new_user = User(name='Jack', email='Jack@gmail.com', remark='Jack')

# 添加并提交
session.add(new_user)
session.commit()

5. 查询数据

# 查询所有用户
users = session.query(User).all()
for user in users:
    print(user)

# 查询特定用户
user = session.query(User).filter_by(name='Jack').first()
print(user)

6. 更新数据

user = session.query(User).filter_by(name='Jack').first()
user.remark = 'update'
session.commit()

7. 删除数据

user = session.query(User).filter_by(name='Jack').first()
session.delete(user)
session.commit()

高级功能

1. 关系(Relationships)

使用 relationship 定义表之间的关系。

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    address = Column(String, nullable=False)
    user_id = Column(Integer, ForeignKey('users.id'))

    user = relationship("User", back_populates="addresses")

User.addresses = relationship("Address", order_by=Address.id, back_populates="user")

2. 执行原生 SQL 语句

你可以直接执行原生 SQL 语句。

result = engine.execute("SELECT * FROM users")
for row in result:
    print(row)

3. 使用 SQLAlchemy Core (核心)

SQLAlchemy Core 提供了更接近 SQL 的抽象层,可以使用 TableColumn 对象进行操作。

from sqlalchemy import Table, MetaData

metadata = MetaData()
users_table = Table('users', metadata, autoload_with=engine)

# 插入数据
engine.execute(users_table.insert(), {
   "name": "Jack", "email": "Jack@gmail.com", "remark": "insert"})

# 查询数据
result = engine.execute(users_table.select())
for row in result:
    print(row)

小结

SQLAlchemy 提供了灵活而强大的工具来处理数据库操作,从简单的 ORM 映射到复杂的 SQL 查询都能轻松应对。使用 SQLAlchemy 可以大大简化数据库操作的代码,提高代码的可维护性和可读性。

强烈推荐阅读:SQLAlchemy 文档

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 前端开发 数据库
SqlAlchemy 2.0 中文文档(六)(1)
SqlAlchemy 2.0 中文文档(六)
45 0
|
4月前
|
SQL JSON 关系型数据库
SqlAlchemy 2.0 中文文档(五)(5)
SqlAlchemy 2.0 中文文档(五)
48 4
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(三)(1)
SqlAlchemy 2.0 中文文档(三)
38 1
|
5月前
|
SQL 存储 Go
【译】SQLAlchemy文档:SQLAlchemy 统一教程
【译】SQLAlchemy文档:SQLAlchemy 统一教程
|
4月前
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(十)(2)
SqlAlchemy 2.0 中文文档(十)
24 0
|
4月前
|
Python
SqlAlchemy 2.0 中文文档(九)(3)
SqlAlchemy 2.0 中文文档(九)
43 0
|
4月前
|
测试技术 API 数据库
SqlAlchemy 2.0 中文文档(九)(4)
SqlAlchemy 2.0 中文文档(九)
34 0
|
4月前
|
SQL 存储 数据库
SqlAlchemy 2.0 中文文档(九)(1)
SqlAlchemy 2.0 中文文档(九)
31 0
|
4月前
|
SQL 测试技术 数据库
SqlAlchemy 2.0 中文文档(八)(3)
SqlAlchemy 2.0 中文文档(八)
33 0
|
4月前
|
SQL API Python
SqlAlchemy 2.0 中文文档(八)(5)
SqlAlchemy 2.0 中文文档(八)
38 0