Flask

Flask 基础知识结构 功能 示例 说明 路由 @app.route('/about') 定义 URL 路径 请求 from flask import request 获取表单、URL 参数等 响应 return 'text' 或 jsonify({...}) 返回给前端的内容 模板 render_template('index.html') 使用 Jinja2 模板渲染 HTML 重定向 redirect(url_for('func_name')) 页面跳转 表单 request.form.get('field') 获取表单数据 一个最小的 Flask 应用 from flask import Flask app = Flask(__name__) # 创建应用实例 @app.route("/") # 路由设置,访问根路径时执行 def hello(): return "Hello, Flask!" if __name__ == "__main__": app.run(host="0.0.0.0", port=80, debug=True) 注意事项: 在开发环境中使用 debug=True 没问题,它会自动重载代码并显示调试信息。 在生产环境中千万不要使用 debug=True 和 Flask 自带服务器,应该使用如 Gunicorn 或 uWSGI 搭配 Nginx。 路由 路由是 Flask 中最核心的部分之一,它用于将特定的 URL 请求映射到 Python 函数上。当用户访问某个 URL 时,Flask 会根据路由规则找到对应的视图函数并执行。 基本路由 在 Flask 中,我们使用 @app.route() 装饰器来定义路由。装饰器会将一个 URL 路径和对应的视图函数绑定在一起。 from flask import Flask app = Flask(__name__) @app.route("/") # 定义根路径的路由 def hello(): return "Hello, World!" if __name__ == "__main__": app.run(debug=True) 访问 http://127.0.0.1:5000/ 时,浏览器会显示 Hello, World!。 ...

2025年7月17日 · 6 分钟 · 阿征

ORM 框架之 SQLAlchemy

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() 提交事务到数据库。 ...

2025年7月17日 · 6 分钟 · 阿征

FastAPI

Pydantic 模型 Pydantic 是一个用于 数据验证 和 设置管理 的 Python 库,主要用于创建具有类型提示的数据模型。它的核心思想是利用 Python 的类型注解来自动进行数据校验和转换,广泛应用于 FastAPI、Typer 等现代 Python 框架中。 🔹 什么是 Pydantic 模型? Pydantic 模型是一个继承自 BaseModel 的类,用来表示结构化的数据对象。它会自动验证输入数据的类型、格式,并在可能的情况下进行类型转换。 ✅ 示例: from pydantic import BaseModel class User(BaseModel): id: int name: str email: str # 创建实例,自动验证类型 user = User(id='1', name='Alice', email='alice@example.com') print(user.id) # 输出:1 (自动从字符串转为整数) print(user.dict()) # {'id': 1, 'name': 'Alice', 'email': 'alice@example.com'} 🔍 Pydantic 的主要功能 功能 描述 类型检查 检查字段是否匹配类型,如 int、str、datetime 等 自动转换 字符串转为数字、日期等常见类型 校验错误报告 提供详细的错误信息 嵌套模型 支持嵌套数据结构 默认值与可选字段 支持 Optional 和默认值设置 JSON 序列化 .json() 方法快速转 JSON 🔧 应用场景 API 数据校验(如 FastAPI 中的请求体) 配置管理(如从 .env 加载配置) 前后端数据结构同步 数据解析和转换(如从数据库或外部接口返回的数据) 🚫 错误处理示例: try: user = User(id='not-an-int', name='Bob', email='bob@example.com') except Exception as e: print(e) 输出: ...

2025年7月10日 · 1 分钟 · 阿征

Python 数据结构

字典 dict Python 中的 字典(dictionary) 是一种内置的数据结构,用于存储键值对(key-value pairs)。它非常适合快速查找和组织数据。 字典定义方式 # 空字典 d = {} # 含有数据的字典 d = { "name": "Alice", "age": 25, "city": "Beijing" } # 使用 dict() 构造函数 d = dict(name='Alice', age=25, city='Beijing') # 使用 zip() 和两个列表创建 keys = ['name', 'age', 'city'] values = ['Alice', 25, 'Beijing'] d = dict(zip(keys, values)) # 使用可迭代对象创建 d = dict([('name', 'Alice'), ('age', 25)]) 字典常用方法 方法/操作 说明 d[key] 获取 key 对应的值,若 key 不存在会报错 d.get(key[, default]) 获取 key 对应的值,若不存在返回默认值 d[key] = value 设置 key 的值,若 key 不存在会创建 d.keys() 返回所有键 d.values() 返回所有值 d.items() 返回键值对元组的集合 d.update([other]) 更新字典,可合并另一个字典或键值对 d.pop(key[, default]) 删除键并返回对应的值 d.popitem() 删除并返回最后一个键值对 d.clear() 清空字典 key in d 检查 key 是否在字典中 字典使用示例 # 创建字典 person = {'name': 'Alice', 'age': 30} # 添加/更新键值对 person['city'] = 'New York' person['age'] = 31 # 访问键值 print(person['name']) # Alice print(person.get('gender')) # None # 删除键 person.pop('age') # 遍历字典 for key, value in person.items(): print(f'{key}: {value}') # 合并字典 other = {'gender': 'female'} person.update(other) 字典推导式 squares = {x: x**2 for x in range(5)} # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} 列表 list Python 中的 列表(list) 是一种有序、可变的序列数据结构,可以存储任意类型的对象。它非常适合用于存储多个元素,并对其进行增删改查操作。 ...

2025年7月10日 · 7 分钟 · 阿征