python - 为 SQLAlchemy 和 jquery 数据表构建排序函数

标签 python mysql sqlalchemy datatables

我想在我的 SQLAlchemy 模型中使用 jQuery DataTables。数据表可以配置为使用服务器端处理进行排序、过滤、搜索等操作。

我问了this question关于减少我的过滤代码中的重复,因为我有许多具有不同列名的模型将被过滤。

GG_Python 提供的代码目前运行良好。

现在我在过滤模型关系时遇到问题。例如,我有一个如下所示的用户模型

class User(Model):
    ...
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    region_id = Column(Integer, ForeignKey('regions.id'), nullable=False)
    firstname = Column(String(20))
    ...

和如下的区域模型

class Region(Model):
    ...
    id = Column(Integer, Sequence('region_id_seq'), primary_key=True)
    name = Column(String(50), unique=True)
    users = relationship('User', backref='region', order_by='User.id', lazy='joined')

我正在努力思考如何以适合函数的方式查询它。恐怕我正在以一种过于复杂的方式看待它。

我缺少什么能够搜索已建立的关系,最好是建立在 GG_Python's answer here 之上?

type(mapper[col_name])sqlalchemy.orm.properties.ColumnPropertysqlalchemy.orm.properties.RelationshipProperty

q = User.query
rv = rv = request.values
q = filter_model_by_request(q, User, rv):

...

def filter_model_by_request(qry, model, rv):
    mapper = inspect(model).attrs
    col_names = list(set([c.key for c in mapper]) & set(rv.keys()))
    for col_name in col_names:
        if type(mapper[col_name]) == ColumnProperty:
            col = mapper[col_name].columns[0]
            col_type = type(col.type)
            if col_type == String:  # filter for String
                qry = qry.filter(col.ilike('%{0}%'.format(rv.get(col_name))))
            elif: ... # filter other types

        elif type(mapper[col_name]) == RelationshipProperty:
            # what the heck goes here?

如何为 users where user.region.name = SearchString 执行查询?希望在一个保持干燥的函数中

最佳答案

你查了吗sqlalchemy-datatables ?我认为它完全可以满足您的需求。

sqlalchemy-datatables is a library providing an SQLAlchemy integration of jQuery DataTables. It helps you manage server side requests in your application.

It is framework agnostic, tested with Pyramid and Flask mainly.

关于python - 为 SQLAlchemy 和 jquery 数据表构建排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29759491/

相关文章:

python - 为什么将 Windows 路径放入变量中不会用双斜杠替换特定的单斜杠?

MySQL 嵌套选择和更新

python - 如何在 SQLAlchemy ORM 中选择带有 "as"的查询并连接表

mysql - 选择每个对话的最新消息

mysql - Ruby 的 have_header 方法在哪里寻找头文件?

django - SQLAlchemy 是否有 Django 的spectrdb 等效项?

python - 如何与 sqlalchemy 达到 postgres 最大连接?

python - 每隔第 n 个字符拆分 python 字符串,迭代起始字符

python - 使用 sum、np.sum 和 fsum 对数组列表求和时会得到不同的结果吗?

Python:替换字符串中的特定字符(重复问题)