【问题标题】:Flask-Sqlalchemy create views with postgresFlask-Sqlalchemy 使用 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 模块,我无法在我的烧瓶应用程序中运行它。有人对如何建模这样的东西有一个好主意吗?任何帮助不胜感激!

【问题讨论】:

    标签: python postgresql flask sqlalchemy


    【解决方案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,
        )
    

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2016-03-18
      • 2016-01-14
      • 1970-01-01
      相关资源
      最近更新 更多