Flask-Sqlalchemy 使用 postgres 创建视图

Posted

技术标签:

【中文标题】Flask-Sqlalchemy 使用 postgres 创建视图【英文标题】:Flask-Sqlalchemy create views with postgres 【发布时间】:2022-01-15 06:01:17 【问题描述】:

我正在使用具有以下样式的 Flask-Sqlalchemy postgres 数据库模型:

class User(db.Model) // Holds the users
    id = db.Column(db.Integer, primary_key=True)
    ...

class Track(db.Model) // Holds racing tracks
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255), nullable=False)

class Record(db.Model) // Hold users records on tracks
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), primary_key=True)
    track_id = db.Column(db.Integer, db.ForeignKey("map.id"), primary_key=True)
    time = db.Column(db.BigInteger, nullable=False)

我现在的目标是创建一个包含用户完成的所有曲目的视图。在普通的 PostgresSQL 中,它看起来像这样:

CREATE VIEW OR REPLACE user_tracks_finished AS
SELECT DISTINCT user_id, track_id 
FROM record;

用户模型看起来像这样:

class User(db.Model) // Holds the users
    id = db.Column(db.Integer, primary_key=True)
    finished_tracks = db.relationship(...)

我无法使用 flask-sqlalchemy 模块创建视图。有一个 sqlalchemy-views 模块,我无法在我的烧瓶应用程序中运行它。有人对如何建模这样的东西有一个好主意吗?任何帮助不胜感激!

【问题讨论】:

【参考方案1】:

我设法用 SQLAlchemy-Utils 完成了它:https://pypi.org/project/SQLAlchemy-Utils/

from sqlalchemy_utils import create_view

class UserFinishedMaps(db.Model):
    __table__ = create_view(
        name="user_finished_maps",
        selectable=select([Record.user_id, Record.map_id]).group_by(
            Record.user_id, Record.map_id
        ),
        metadata=db.metadata,
    )

【讨论】:

以上是关于Flask-Sqlalchemy 使用 postgres 创建视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask-SQLAlchemy 连接到 MSSQL 数据库

如何在 Celery 任务中使用 Flask-SQLAlchemy

Flask-SQLAlchemy使用方法

使用Flask-SQLAlchemy管理数据库

Flask-Sqlalchemy 使用 postgres 创建视图

那些年我们学Flask-SQLAlchemy,实现数据库操作,分页等功能