python - 从 SQL 语法到 SQLAlchemy 语法

标签 python mysql sqlalchemy

我正在尝试将以下 SQL 语句“翻译”为 Flask 中的 SQLalchemy:

select subs.user_id, subs.magazine_id, article.title from article join subs on subs.magazine_id=article.magazine_id and subs.user_id=2;

它在 mysql shell 中工作正常,但是当我尝试使其在 plas 应用程序中工作时,我完全失败了。让我解释一下我想要做什么:我有三类不同的对象:用户、杂志和文章。用户可以订阅许多杂志。所有文章都属于一本独特的杂志。以下是我使用的模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column( db.String(64) )
    subscriptions= db.relationship('Magazine', secondary=subs, backref=db.backref('subscribers', lazy='dynamic'), lazy='dynamic')


class Magazine(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    articles= db.relationship('Article', backref='magazine', lazy='dynamic')


class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    abstract = db.Column(db.String(64))
    magazine_id= db.Column(db.Integer, db.ForeignKey('magazine.id'))

subs = db.Table('subs', 
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('magazine_id', db.Integer, db.ForeignKey('magazine.id'))
)

subs 表用于保存订阅记录。我需要做的是,对于给定用户,检索她订阅的杂志的所有文章。

我知道如何让它在 python 中工作,假设 user1 是一个用户:


articles=[]
for m in user1.subscriptions:
    articles+=m.articles.all()

但我需要从 SQLAlchemy 中执行此操作,因为我想过滤文章(已读/未读、发布日期、主题 ecc)并对结果进行分页。我可以使用帖子开头的语句从 mysql shell 执行此操作,但是当尝试从 SQLAlchemy 执行此操作时,我失败了:

user1.subscriptions.join(Article).filter(Article.magazine_id==id).all()

给出错误:

AttributeError: 'builtin_function_or_method' object has no attribute 'translate'

最佳答案

如果您正在寻找返回用户订阅的杂志中的所有文章的结果,请尝试从文章开始构建搜索。将 Magazine.subscribers 放在 join 子句中应该不需要在查询中直接引用 subs 表。

userArticles = db.session.query(Article).join(Article.magazine, Magazine.subscribers).filter(User.id==tbdID).all()

关于python - 从 SQL 语法到 SQLAlchemy 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58205773/

相关文章:

python - 迭代过期查询和更新时了解 SQLAlchemy 性能

python - 用 Python 编写 Restish 单元测试

Python:导入 pydoc 然后在本地使用它?

python - 我收到错误尝试相对导入超出顶级包

python - 准确率等于 0 CNN Python Keras

连接 SQL 失败时的 PHP 脚本

mysql - 我有一个具有挑战性的 MySQL SELECT 查询,涉及库存和阈值边界

python - SQLAlchemy:使用外键合并表数据

c# - MySQL 访问拒绝 C# 应用程序但不访问工作台

python - 从 SQLAlchemy 中删除多对多匹配错误的行数