【发布时间】:2021-08-02 00:27:30
【问题描述】:
我有一个场景来迭代 session_number 列以获取相关的 user_name。如果用户在我将迭代最后一个 session_number 之前创建了一个会话,但如果用户第一次创建了会话 session_number 应该从 1 开始。我试图在下面说明。现在我通过使用逻辑来处理这个问题,但尝试在 SqlAlchemy 中找到更优雅的方法。
id - user_name - session_number
1 user_1 1
2 user_1 2
3 user_2 1
4 user_1 3
5 user_2 2
这是我的表格的 python 代码。我的数据库是 PostgreSQL,我正在使用 alembic 来升级表。现在它继续迭代@987654327@,不管user_name。
class UserSessions(db.Model):
__tablename__ = 'user_sessions'
id = db.Column(db.Integer, primary_key=True, unique=True)
username = db.Column(db.String, nullable=False)
session_number = db.Column(db.Integer, Sequence('session_number_seq', start=0, increment=1))
created_at = db.Column(db.DateTime)
last_edit = db.Column(db.DateTime)
__table_args__ = (
db.UniqueConstraint('username', 'session_number', name='_username_session_number_idx_'),
)
我在互联网上搜索过这种情况,但这些不是我的问题。是否可以通过 SqlAlchemy/PostgreSQL 操作来实现这一点?
【问题讨论】:
-
您可以使用混合属性,其中返回值是用户名的
count? docs.sqlalchemy.org/en/14/orm/extensions/hybrid.html -
需要统计user_name吗?你是说 session_number 吗?
-
在执行过程中,您真的需要
session_number的值吗?或者您只是想在以后的某个时候拥有/使用它? -
你需要存储这个值还是可以在检索时生成?
-
@rfkortekaas 是的,我确实这样做了。这是对实际问题的说明,但场景是相同的。
标签: python postgresql sqlalchemy alembic