Skip to content

SQLAlchemy

SQLAlchemy 是一个用于 Python 的 SQL 工具包和 ORM(对象关系映射)库。

安装依赖

shell
pip install flask-sqlalchemy

定义模型

类变量__tablename__定义在数据库中使用的表名

db.Column类定义模型的属性

python
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    email = db.Column(db.String(120), unique=True, index=True)
    password = db.Column(db.String(128))
    about_me = db.Column(db.Text)
    
    def __repr__(self):
        return f'<User {self.name}>'

SQLAlchemy 列类型:

  • Integer:整数类型。
  • BigInteger:大整数类型,可以存储比 Integer 更大的数值。
  • SmallInteger:小整数类型,适合存储较小范围的数值。
  • Numeric(precision, scale):固定精度和比例的数值类型。
  • Float(precision):浮点数类型。
  • String(length):变长字符串类型,需要指定最大长度。
  • Text:文本类型,通常用于存储较长的字符串。
  • Boolean:布尔值类型。
  • Date:日期类型,只存储年月日。
  • Time:时间类型,只存储时分秒。
  • DateTime:日期时间类型,同时存储日期和时间。
  • Interval:时间间隔类型。
  • Enum:枚举类型,限制列的取值为一组特定的字符串。
  • PickleType:任意可序列化的 Python 对象,使用 pickle 序列化后存储。
  • LargeBinary(length):二进制数据类型。

除了上述基本类型外,SQLAlchemy 还支持自定义类型,可以通过继承 TypeDecoratorUserDefinedType 类来创建。此外,SQLAlchemy 也支持特定数据库的专有类型,例如 PostgreSQL 的 ARRAY, JSON, JSONB, UUID 等。

关系

提供了灵活的方式定义一对多、多对一、一对一和多对多的关系

python
relationship("Author", back_populates="books")

第一个参数表明这个关系的另一端是哪个模型

backref参数向User模型中添加一个role属性,从而定义反向关系

实战案例-用户注册和列表

基于sqlite api了解基本使用方法

https://gitee.com/PatrickW/flask-web/blob/master/src/8sqldb.py

https://gitee.com/PatrickW/flask-web/blob/master/src/templates/sqldb/users.html

https://gitee.com/PatrickW/flask-web/blob/master/src/templates/sqldb/users_list.html

注册链接:http://localhost:9999/

用户列表:http://localhost:9999/users

页面功能

image-20250118114001084

注册成功后

image-20250118114026518