如何为模型定义自定义筛选函数,这样我就不会在应用程序中复制它了?我是说,如果我有模特,像这样:
class DataTables(Base):
__tablename__ = 'datatables'
id = Column(Integer, primary_key=True, autoincrement=False)
table_name = Column(String(50))
row_id = Column(String(50))
row_data = Column(BLOB)
我经常使用这样的select (获取特定表和行的row_data ):
session.execute(select(DataTables.row_data).where(DataTables.table_name == table_name, DataTables.row_id == row_id))
我不想使用ActiveRecord混音,在这里我可以在模型中获取会话。所以我想做一些函数,它将得到两个params,并返回session.execute
的对象。我在文档中没有发现任何有用的东西。
发布于 2021-12-20 13:55:23
您可以创建您自己的会话类,您可以对这些操作进一步展开,如下所示:
class DataTablesSesssion:
def __init__(session):
self.session = session
def get_row_data_by_name_and_row_id(table_name, row_id):
return self.session.execute(
select(DataTables.row_data)
.where(
DataTables.table_name == table_name,
DataTables.row_id == row_id
)
)
def get_some_other_kind_of_data(some_variable):
...
然后,您可以在代码中使用它,例如
data_tables_session = DataTablesSession(session)
row_data = data_tables_session.get_row_data_by_name_and_row_id("name", 1)
some_other_kind_of_data = data_tables_session.get_some_other_kind_of_data(42)
随着应用程序的发展,并且您有更多使用数据库连接的模型和模块,为每个模块设置这样的会话对象将使您的模型和数据库交互代码很好地分离(这就是我如何在30k LOC项目中使用SQL Alchemy,它可以很好地避免重复和意大利面代码)。
https://stackoverflow.com/questions/70426324
复制相似问题