我有python3 + flask + sqlalchemy + postgres
我有一堆自定义查询,我提供的数据以json分页。
from sqlalchemy.sql import text
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
db.engine.execute('SELECT * FROM MY_TABLE LIMIT :limit OFFSET :offset',
limit=limit, offset=offset)
到目前为止,我可以传递limit
和values
的整数值。
但是,有时我需要完整的数据而不是分页的数据。
的等效查询为
SELECT * FROM MY_TABLE LIMIT ALL OFFSET 0
因此,我尝试通过limit='ALL'
和offset=0
SQLAlchemy抱怨
sqlalchemy.exc.DataError: (psycopg2.DataError) invalid input syntax for integer: "ALL"
LINE 1: ...T_LABEL_ID IN (2, 5) ORDER BY TIMESTAMP_RAW LIMIT 'ALL' OFFS...
ALL
是保留关键字,不希望作为字符串传递
我的问题是,除了有条件地仅在需要时向我的查询中添加LIMIT :limit OFFSET :offset
之外,还有其他更好的方法吗?
答案 0 :(得分:1)
执行类似操作的最好方法是分配一个任意大的数字。像这样
from sqlalchemy.sql import text
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
db.engine.execute('SELECT * FROM MY_TABLE LIMIT :limit OFFSET :offset',
limit=99999999999999, offset=offset)
您已经尝试过another way if your database is postgres。即添加LIMIT ALL
。由于出现错误,因此我假设您正在使用Mysql或其他数据库。
更新:
如Sundeep所述,该错误是由于字符串替换引起的。因此,另一种方法是。
db.engine.execute('SELECT * FROM MY_TABLE LIMIT {limit} OFFSET {offset}'.format(limit='ALL', offset=offset))