SQLAlchemy

1, 基本流程代码

# 创建session对象
session = DBSession()  # 生成链接数据库的实例
# 创建新User对象
new_user = User(id='1', name='Bob')
# 添加到session
session.add(new_user)
# 提交即保存到数据库
session.commit()
# 关闭session
session.close()

2, 案例1, 插入一行数据

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


# 链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:python@localhost:3306/py3_sqlalchemy_2019?charset=utf8', echo=True)
Base = declarative_base()  # 生成SQLORM基类


class User(Base):
    # 对应MySQL中数据表的名字
    __tablename__ = 'users'

    # 创建字段
    id = Column(Integer, primary_key=True)  # users表中的id字段(主键)
    username = Column(String(64), nullable=False, index=True)  # users表中的username字段
    password = Column(String(64), nullable=False)  # users表中的password字段
    email = Column(String(64), nullable=False, index=True)  # users表中的email字段(有索引)

    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)


# 创建userinfo表(所有表结构)
# Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)  # 创建与数据库的会话,返回的是一个类

# 创建session对象
session = DBSession()  # 生成链接数据库的实例
# 创建新User对象
new_user = User(id='1', username='python-teacher', password="123456", email="dong4716138@163.com")
# new_user = User(username='python-teacher', password="123456", email="dong4716138@163.com")
# 添加到session
session.add(new_user)
session.commit()
session.close()

3, 案例2, 插入多行数据

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


# 链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:python@localhost:3306/py3_sqlalchemy_2019?charset=utf8', echo=True)
Base = declarative_base()  # 生成SQLORM基类


class User(Base):

    # 对应MySQL中数据表的名字
    __tablename__ = 'users'

    # 创建字段
    id = Column(Integer, primary_key=True)  # users表中的id字段(主键)
    username = Column(String(64), nullable=False, index=True)  # uers表中的username字段
    password = Column(String(64), nullable=False)  # users表中的password字段
    email = Column(String(64), nullable=False, index=True)  # users表中的email字段(有索引)

    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)


# 创建userinfo表(所有表结构)
# Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)  # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession()  # 生成链接数据库的实例
new_user1 = User(username='python-teacher2', password="112233", email="laoyan@163.com")
new_user2 = User(username='python-teacher3', password="654321", email="laoma@163.com")
new_user3 = User(username='python-teacher4', password="789012", email="laoye@163.com")
session.add_all([new_user1, new_user2, new_user3])
session.commit()
session.close()

4,SQLAlchemy查询数据

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


# 链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:python@localhost:3306/py3_sqlalchemy_2019?charset=utf8')
Base = declarative_base()  # 生成SQLORM基类


class User(Base):

    # 对应MySQL中数据表的名字
    __tablename__ = 'users'

    # 创建字段
    id = Column(Integer, primary_key=True)  # users表中的id字段(主键)
    username = Column(String(64), nullable=False, index=True)  # users表中的username字段
    password = Column(String(64), nullable=False)  # users表中的password字段
    email = Column(String(64), nullable=False, index=True)  # users表中的email字段(有索引)

    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)


# 创建userinfo表(所有表结构)
# Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)  # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession()  # 生成链接数据库的实例

# 获取所有数据
obj = session.query(User).all()

# print(type(obj))  # 查询出来的类型是 <class 'list'>

# 说明:
# obj查询出来的是一个列表,其中数据为 User类的实例对象
for temp in obj:
    print("-" * 20)
    # print(temp)  # 此时temp为User类的实例对象
    # print(type(temp))  # 类型是 <class '__main__.User'>
    print(temp.id)
    print(temp.username)
    print(temp.password)
    print(temp.email)

session.close()

按条件查询

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

# 链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:python@localhost:3306/py3_sqlalchemy_2019?charset=utf8')
Base = declarative_base()  # 生成SQLORM基类


class User(Base):
    # 对应MySQL中数据表的名字
    __tablename__ = 'users'
    
    # 创建字段
    id = Column(Integer, primary_key=True)  # users表中的id字段(主键)
    username = Column(String(64), nullable=False, index=True)  # users表中的username字段
    password = Column(String(64), nullable=False)  # users表中的password字段
    email = Column(String(64), nullable=False, index=True)  # users表中的email字段(有索引)
    
    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)


# 创建userinfo表(所有表结构)
# Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)  # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession()  # 生成链接数据库的实例

# 获取指定数据
obj = session.query(User).filter(User.id == 1).one()
print(obj.id)
print(obj.username)
print(obj.password)
print(obj.email)

print("-" * 20)

obj = session.query(User).filter(User.id == 4).one()
print(obj.id)
print(obj.username)
print(obj.password)
print(obj.email)

session.close()

<think>好的,用户想了解SQLAlchemy,我需要先回忆一下自己的知识库。SQLAlchemy是一个Python的ORM框架,对吧?首先,应该解释ORM是什么,这样用户更容易理解。然后介绍SQLAlchemy的主要功能和组成部分,比如Engine、Session、ORM部分。可能需要提到它支持多种数据库,比如MySQL、PostgreSQL等,还有它的两种使用方式:核心SQL和ORM方式。 用户可能想知道为什么使用SQLAlchemy,所以得说明它的优势,比如灵活性、避免SQL注入、跨数据库支持。同时,也要提到它适合的场景,比如复杂查询和需要数据库抽象的项目。可能还要对比一下其他ORM,比如Django的ORM,指出SQLAlchemy更灵活但学习曲线陡一些。 需要给出一个简单的代码示例,展示如何定义模型和进行查询,这样用户能直观看到用法。还要注意提醒安装方法,比如pip install sqlalchemy。另外,用户可能是开发者,可能需要知道文档和社区资源的位置,比如官网和中文文档。 可能用户的实际需求是想在项目中使用数据库,所以得强调SQLAlchemy的适用性和最佳实践。不过,如果用户的项目简单,可能推荐更轻量的库,比如peewee。最后要确保回答结构清晰,分点说明,用中文,避免技术术语过多,保持易懂。</think>SQLAlchemy 是 Python 中一个功能强大的开源 SQL 工具包和对象关系映射(ORM)框架。以下是它的核心特点和使用场景: 📌 核心构成 1️⃣ **ORM 层** - 将数据库表映射为 Python 类 - 表字段对应类属性 - 通过操作对象实现数据库交互 2️⃣ **SQL 表达式语言** - 提供 Pythonic 方式编写原生 SQL - 支持复杂查询构造 - 自动处理数据类型转换 3️⃣ **数据库引擎** - 统一数据库连接管理 - 支持连接池 - 适配 20+ 数据库(MySQL/PostgreSQL/SQLite等) 🔧 核心组件 ```python from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base # 创建基类 Base = declarative_base() # 定义数据模型 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) ``` 🚀 典型使用流程 ```python # 创建引擎(SQLite示例) engine = create_engine('sqlite:///mydatabase.db') # 创建会话 from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() # 执行查询 users = session.query(User).filter(User.name.like('张%')).all() ``` 💡 核心优势 ✅ 灵活的多层架构设计 ✅ 同时支持高级 ORM 和底层 SQL 操作 ✅ 完善的类型系统和事务管理 ✅ 强大的关联关系处理(1:1, 1:N, N:M) ✅ 支持数据库迁移(需配合 Alembic) 📚 学习资源推荐 - 官方文档:https://www.sqlalchemy.org - 中文文档:https://www.osgeo.cn/sqlalchemy/ - 《SQLAlchemy技术手册》(中文实体书) ⚠️ 注意要点 - 适合中大型项目,小型项目可考虑 peewee - 学习曲线较陡峭,但回报显著 - 性能调优需要理解 session 生命周期 - 建议配合 alembic 进行数据库版本管理 实际开发中,SQLAlchemy 特别适合需要复杂查询逻辑、多数据库支持以及高度定制化数据访问层的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值