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