SQLAlchemy 基础知识 功能 示例 说明 创建引擎 engine = create_engine('sqlite:///example.db') 创建数据库连接引擎 会话 Session = sessionmaker(bind=engine) 用于和数据库交互的会话 数据模型 class User(Base): 定义数据库模型 查询 session.query(User).filter(User.name == 'John').all() 执行查询操作 插入 session.add(new_user) 向数据库插入数据 更新 session.query(User).filter(User.id == 1).update({'name': 'Azheng'}) 更新数据库中的记录 删除 session.query(User).filter(User.id == 1).delete() 删除数据库中的记录 一个最小的 SQLAlchemy 应用 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 创建数据库引擎 engine = create_engine('sqlite:///example.db', echo=True) # 创建一个基本类 Base = declarative_base() # 创建会话 Session = sessionmaker(bind=engine) session = Session() # 定义一个模型类 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) # 创建数据库表 Base.metadata.create_all(engine) # 插入数据 new_user = User(name="Azheng") session.add(new_user) session.commit() # 查询数据 user = session.query(User).filter(User.name == 'Azheng').first() print(user.name) session.close() SQLAlchemy 基础操作 from sqlalchemy import create_engine, Column, Integer, String, DECIMAL, Date, ForeignKey from sqlalchemy.orm import sessionmaker, relationship, declarative_base # 使用 create_engine() 来创建数据库引擎。 # SQLAlchemy 中的引擎是连接数据库的核心对象,负责与数据库的通信。 # 'sqlite:///example.db',三个斜杠表示 SQLite 数据库文件是相对路径(如果是绝对路径,应该是两个斜杠)。 # echo=True,这个参数控制 SQLAlchemy 的日志记录功能。当设置为 True 时,SQLAlchemy 会输出所有生成的 SQL 语句到标准输出(例如命令行)。这对于调试和查看 SQL 查询非常有用。 engine = create_engine('sqlite:///example.db', echo=True) # 使用 sessionmaker() 创建会话。 # 通过会话对象与数据库进行交互(添加、查询、删除等操作)。 Session = sessionmaker(bind=engine) # 定义会话类 Session,它与指定的数据库引擎(engine)绑定。 session = Session() # 通过会话类 Session,实例化一个会话对象 session,用于与数据库进行交互。通过这个会话对象,可以执行查询、插入、更新、删除等操作。 # 注意:SQLAlchemy 会自动创建数据库文件,但只有第一次操作数据库时(比如创建表),SQLAlchemy 才会实际创建文件。仅仅创建引擎和会话不会立即创建文件。 # 定义模型基类 # declarative_base() 是 SQLAlchemy 的声明式基类,用于创建数据模型类的基类。 # 所有继承自 Base 的类都会被 SQLAlchemy 自动识别为数据库表模型。 # 相当于 Django 的 models.Model,Flask-SQLAlchemy 的 db.Model。 Base = declarative_base() # 创建部门表 class Department(Base): __tablename__ = 'departments' # 指定该模型对应的数据库表名 # 定义一个名为 department_id 的列,类型是 Integer(整数),并设为主键(primary_key=True) # 主键是表的唯一标识符,通常自动递增(SQLite/SQLAlchemy 默认行为) department_id = Column(Integer, primary_key=True) # 定义一个名为 department_name 的列,类型是 String(字符串) # String(100) 表示的是一个 长度为 100 的字符串字段,也就是这个字段最多可以存储 100 个字符。 # nullable=False 表示这个字段不能为空,必须有值。 department_name = Column(String(100), nullable=False) # 创建员工表 class Employee(Base): __tablename__ = 'employees' employee_id = Column(Integer, primary_key=True) first_name = Column(String(50)) last_name = Column(String(50)) gender = Column(String(1)) hire_date = Column(Date) department_id = Column(Integer, ForeignKey('departments.department_id')) # 设置与部门表的关系 department = relationship("Department") # 创建薪资表 class Salary(Base): __tablename__ = 'salaries' salary_id = Column(Integer, primary_key=True) employee_id = Column(Integer, ForeignKey('employees.employee_id')) salary = Column(DECIMAL(10, 2)) from_date = Column(Date) to_date = Column(Date) # 设置与员工表的关系 employee = relationship("Employee") # 创建项目表 class Project(Base): __tablename__ = 'projects' project_id = Column(Integer, primary_key=True) project_name = Column(String(100)) start_date = Column(Date) # 定义为日期类型 end_date = Column(Date) # 创建员工-项目关系表(多对多) class EmployeeProject(Base): __tablename__ = 'employee_projects' employee_id = Column(Integer, ForeignKey('employees.employee_id'), primary_key=True) project_id = Column(Integer, ForeignKey('projects.project_id'), primary_key=True) role = Column(String(50)) # 设置与员工表和项目表的关系 employee = relationship("Employee") project = relationship("Project") # 创建所有表 Base.metadata.create_all(engine) 增(插入数据) 使用 session.add() 将对象添加到会话中,并使用 session.commit() 提交事务到数据库。
...