Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy在连接和限制时按表达式顺序生成错误的SQL_Python_Sql_Orm_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python SQLAlchemy在连接和限制时按表达式顺序生成错误的SQL

Python SQLAlchemy在连接和限制时按表达式顺序生成错误的SQL,python,sql,orm,sqlalchemy,flask-sqlalchemy,Python,Sql,Orm,Sqlalchemy,Flask Sqlalchemy,我有一个重复错误的应用程序 错误的简短描述:SQLAlchemy使用子查询,但忽略按表达式顺序排列的子查询别名 型号: from flask.ext.sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.

我有一个重复错误的应用程序

错误的简短描述:SQLAlchemy使用子查询,但忽略按表达式顺序排列的子查询别名

型号:

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String)

class Genre(db.Model):
    __tablename__ = 'genres'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)

class Magazine(db.Model):
    __tablename__ = 'magazines'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    genre_id = db.Column(db.Integer, db.ForeignKey('genres.id'))

    author = db.relationship(User,
                             backref=db.backref('magazines',
                                                order_by=id,
                                                lazy='joined'))
    genre = db.relationship(Genre,
                            backref=db.backref('magazines',
                                               order_by=id,
                                               lazy='joined'))

class WorkType(db.Model):
    __tablename__ = 'work_types'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)

class WorkEvent(db.Model):
    __tablename__ = 'work_events'
    id = db.Column(db.Integer, primary_key=True)
    start_date = db.Column(db.DateTime, nullable=False)
    end_date = db.Column(db.DateTime, nullable=False)
    work_type_id = db.Column(db.Integer, db.ForeignKey('work_types.id'))
    work_type = db.relationship(WorkType,
                                backref=db.backref('work_events'), order_by=id,
                                lazy='joined')

class AuthorRate(db.Model):
    __tablename__ = 'author_rates'
    id = db.Column(db.Integer, primary_key=True)
    amount = db.Column(db.Float, nullable=False)
    work_type_id = db.Column(db.Integer, db.ForeignKey('work_types.id'))
    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    work_type = db.relationship(WorkType,
                                backref=db.backref('author_rates'), order_by=id,
                                lazy='joined')

    author = db.relationship(User,
                             backref=db.backref('author_rates'),
                             order_by=id, lazy='joined')
观点:

@app.route('/')
def index():
    for i in range(5):
        some_key = str(random.randint(1000000, 9000000))
        work_type = WorkType(name='work_type' + some_key)
        db.session.add(work_type)
        for j in range(8):
            some_other_key = str(random.randint(1000000, 9000000))
            user = User(username='user' + some_key + some_other_key)
            db.session.add(user)
            rate = AuthorRate(
                amount=1 + random.random(),
                work_type=work_type,
                author=user)
            db.session.add(rate)
    db.session.commit()
    print('========')
    rates = AuthorRate.query
    print(rates)
    rates = rates.limit(10)
    print('+++++++')
    print(rates)
    print('=========')
    rates = rates.offset(0)
    return render_template('limit.html', rates=rates)
模板:

{% for rate in rates %}
   <p>{{ rate.id }} - {{ rate.amount }} - {{ rate.work_type }} - {{ rate.author }}</p>
{% endfor %}
错误: ProgrammingError:(psycopg2.ProgrammingError)在表“author_rates”的子句条目中丢失 第4行:…\u 1 ON users\u 1.id=杂志\u 1.author\u id按作者排序

其他订单应为:

 ORDER BY anon_1.author_rates_id, magazines_1.id;
问题:是否有解决方法

环境: ubuntu 14.04、python 2.7、SQLAlchemy 1.0.8、SQLAlchemy 2.0、SQLAlchemy 0.10.1

p.s.模型可能看起来有点奇怪,这是因为问题的根源是在封闭源代码的应用程序中,我没有足够的想象力来编写好的概念证明

 ORDER BY anon_1.author_rates_id, magazines_1.id;