- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模型(我将其用作抽象基类),它具有一些常见的方法和属性。
SQLAlchemy 允许使用 @hybrid_property
创建属性和方法和 @hybrid_method
,也是标准@property
, @classmethod
, @staticmethod
装饰师给我我想要的结果。
与标准 python 装饰器相比,使用 SQLA 装饰器有什么优点和缺点吗?
我什么时候应该使用,或者不应该使用 SQLA 装饰器?
最佳答案
The hybrid provides for an expression that works at both the Pythonlevel as well as at the SQL expression level
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
firstname = Column(String(50))
lastname = Column(String(50))
@hybrid_property
def fullname(self):
return self.firstname + ' ' + self.lastname
@property
def long_name(self):
return self.firstname + ' ' + self.lastname
session.add(User(firstname='Brendan', lastname='Simon'))
session.commit()
# error
# print(session.query(User).filter(User.long_name == 'Brendan Simon').first().id)
# works fine because @hybrid_property
print(session.query(User).filter(User.fullname == 'Brendan Simon').first().id)
您也可以定制
SQL expression
使用
@fullname.expression .
class MetaData(Base):
__tablename__ = 'meta_data'
system_field = Column(String(20)) # a lot of calculations and processing in different places
# a lot of fields ...
一日分几部
system_field
曾经(或将)重命名为
new_field
(不管为什么,谁和什么时候 - 只是事实)。您可以执行以下操作作为快速解决方案:
@hybrid_property
def new_field(self):
return self.system_field
@new_field.setter
def new_field(self, value: str):
self.system_field = value
# data from somewhere...
# data = {'new_field': 'default', other fields...}
# will works fine + in other places will work as `system_field` with old sql queries
process_meta(MetaData(**{data}))
所以这是一个非常好的功能,但是如果您正在考虑是否需要它,那么您肯定不需要它。
关于python - sqlalchemy @hybrid_property v @property,@hybrid_method v @classmethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64111320/
我正在尝试构建一个事件预订系统作为学习 Python 和 Web 开发的副项目。以下是我的项目中实现的两个模型。 EventSlot 表示为特定事件安排的时间段。 模型 from app import
我正在使用 sqlalchemy 将外部进程生成的一些数据存储在 postgres 数据库中。外部数据有几个存储为字符串的日期,我想将其用作日期时间对象以进行比较和持续时间计算,并且我希望在数据模型中
我有一个 hybrid_property 执行一些条件并返回响应。我希望能够针对该字段进行查询,因此我创建了一个 expression。但是,我不确定如何为这种用例编写条件。 如何编写一个表达式,根据
我在我的 RESTful flask 应用程序中使用 sqlalchemy 和 marshmallow 来序列化我的模型。我有一个 hybrid_property,它来 self 在该模型上的一个关系
我在 SQLAlchemy 模型中定义了以下 @hybird_property 和 表达式: class Widget(db.Model): # ... @hybrid_propert
我正在尝试使用 Flask-SQLAlchemy 从有序的多对多关系中获取第一个对象。 我想使用混合属性来实现这一点,这样我就可以以一种干净的方式重用我的代码。 这是代码,有一些注释: class P
我有一个相当复杂的 hybrid_property。这是一个供应商模型,它有多个 skuchannels(产品)。它的作用是:根据 target_stock_duration(例如,我们希望将商品存货
代码很简单: Class A(Base): status = Columns(Integer) @hybrid_property def is_ok(self):
在使用 Flask-Admin 创建的 ListView 中,我添加了一个 sqlalchemy 对象的两列,它们实际上是在我的对象类中使用混合属性计算的。 class MyClass(db.Mode
当我尝试按名称从映射器获取属性时,如果指定了 hybrid_property 名称,我将无法执行此操作。 import datetime from sqlalchemy import create_e
我有一个模型(我将其用作抽象基类),它具有一些常见的方法和属性。 SQLAlchemy 允许使用 @hybrid_property 创建属性和方法和 @hybrid_method ,也是标准@prop
我有一个现有的、可用的 Flask 应用程序,它使用 SQLAlchemy。这个应用程序中的几个模型/表有存储原始 HTML 的列,我想在列的 setter 上注入(inject)一个函数,以便传入的
如何将这两者结合起来: Werkzeug 的 @cached_property 装饰器:http://werkzeug.pocoo.org/docs/0.11/utils/#werkzeug.util
我是一名优秀的程序员,十分优秀!