使用对象属性的SQLAlchemy动态查询

玛古恩

我正在寻找动态查询对象的属性。在执行时,我将不知道要使用哪个属性或列。

class Product(Base):
    __tablename__ = 'products'

    sku = Column(String, primary_key=True)
    list_price = Column(String)
    status = Column(String)
    url = Column(String)
    special_price1 = Column(String)
    special_price2 = Column(String)
    special_price3 = Column(String)

我有一个Product描述一些属性的SQLAlchemy基类,外加与标价不同的其他特殊价格。

然后PriceList,在下面有一个类,该类可以访问有助于报告和更新表中列的其他资源和方法'products'此类存储有关所有Product对象的唯一特殊价目表的信息

class PriceList:

    def __init__(self, name, db_col_name):
        # Display name
        self.name = name

        # Used for querying the database for a specific column
        # This will always be one of the 4 price related column names
        # list_price, special_price1, special_price2, or special_price3
        self.db_col_name = db_col_name

后来我开始迭代在每个ProductPriceList实例。

for product in products:
    for price_list in price_lists:
        # Do stuff

此时,我的product对象具有一个新的特殊价格,或多个新的特殊价格,我计划在数据库中进行更新。可以简单地将我的对象添加到数据库会话中并提交,但是在提交之前,我需要获取旧价格并将它们链接到各自的价目表。旧价格用于报告中,然后通过电子邮件发送给我。我现在正在做的事情在下面

for product in products:
    sku = product.sku
    for price_list in price_lists:
        # New price
        new_price = product.__getattribute__(price_list.db_col_name)

        # Get the existing special price from the database
        old_price = s.query(Product.__getattribute__(Product, price_list.db_col_name)).filter(Product.sku.like(sku)).first()

我觉得我对使用__getattribute __()使其复杂化了极大的兴趣。它可以工作,但这似乎不是pythonic。有谁知道在更新之前获取未知列的值的更好方法?数据库更新大约每500个产品进行一次或两次,因此在处理过程中将每个特殊价格存储在外部变量中并不是很有效。

雷蛇

要动态访问属性,应使用getattr内置函数。

new_price = getattr(product, price_list.db_col_name)

如果实例是陈旧的,则应使用Session.expire,这意味着下次访问属性时,将从数据库中检索它们。

s.expire(product)

# or only expire price
s.expire(product, [price_list.db_col_name])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python sqlalchemy union查询,“ Query”对象没有属性“ spends”

来自分类Dev

MongoDb使用动态查询对象查找

来自分类Dev

使用对象属性动态填充DataTable

来自分类Dev

如何使用动态属性名称创建对象

来自分类Dev

如何使用 QDataWidgetMapper 恢复对象的动态属性?

来自分类Dev

sqlalchemy核心构建动态查询

来自分类Dev

sqlalchemy核心构建动态查询

来自分类Dev

使用对象的属性进行Rails查询

来自分类Dev

使用.NET DocumentDB SDK查询对象属性

来自分类Dev

使用 Realm 查询嵌套对象数组的属性

来自分类Dev

如何使用Column对象获取/设置SqlAlchemy查询值

来自分类Dev

AttributeError:使用Flask SqlAlchemy,“ tuple”对象没有属性“ drivername”

来自分类Dev

如何使用字符串表示sqlalchemy对象属性?

来自分类Dev

动态对象或属性?

来自分类Dev

动态引用对象属性

来自分类Dev

动态引用对象属性

来自分类Dev

动态对象或属性?

来自分类Dev

多个动态对象属性

来自分类Dev

At @ sign in 动态对象的属性

来自分类Dev

从 SQLalchemy 查询对象访问数据?

来自分类Dev

使用Q对象在Django中动态构建复杂查询

来自分类Dev

Python SQLAlchemy查询:AttributeError:'Connection'对象没有属性'contextual_connect'

来自分类Dev

适用于Python的SQLAlchemy,“查询”对象没有属性“ fetchone”

来自分类Dev

查询SQLAlchemy关联表时,Python返回AttributeError(“ function”对象没有属性“ c”)

来自分类Dev

使用map和setattr函数动态设置对象属性

来自分类Dev

如何使用javascript中的Onclick属性动态创建对象

来自分类Dev

如何使用反射从动态(匿名类型)对象获取属性?

来自分类Dev

使用自动映射器从动态对象复制属性

来自分类Dev

如何使用动态属性名称为JSON对象

Related 相关文章

  1. 1

    python sqlalchemy union查询,“ Query”对象没有属性“ spends”

  2. 2

    MongoDb使用动态查询对象查找

  3. 3

    使用对象属性动态填充DataTable

  4. 4

    如何使用动态属性名称创建对象

  5. 5

    如何使用 QDataWidgetMapper 恢复对象的动态属性?

  6. 6

    sqlalchemy核心构建动态查询

  7. 7

    sqlalchemy核心构建动态查询

  8. 8

    使用对象的属性进行Rails查询

  9. 9

    使用.NET DocumentDB SDK查询对象属性

  10. 10

    使用 Realm 查询嵌套对象数组的属性

  11. 11

    如何使用Column对象获取/设置SqlAlchemy查询值

  12. 12

    AttributeError:使用Flask SqlAlchemy,“ tuple”对象没有属性“ drivername”

  13. 13

    如何使用字符串表示sqlalchemy对象属性?

  14. 14

    动态对象或属性?

  15. 15

    动态引用对象属性

  16. 16

    动态引用对象属性

  17. 17

    动态对象或属性?

  18. 18

    多个动态对象属性

  19. 19

    At @ sign in 动态对象的属性

  20. 20

    从 SQLalchemy 查询对象访问数据?

  21. 21

    使用Q对象在Django中动态构建复杂查询

  22. 22

    Python SQLAlchemy查询:AttributeError:'Connection'对象没有属性'contextual_connect'

  23. 23

    适用于Python的SQLAlchemy,“查询”对象没有属性“ fetchone”

  24. 24

    查询SQLAlchemy关联表时,Python返回AttributeError(“ function”对象没有属性“ c”)

  25. 25

    使用map和setattr函数动态设置对象属性

  26. 26

    如何使用javascript中的Onclick属性动态创建对象

  27. 27

    如何使用反射从动态(匿名类型)对象获取属性?

  28. 28

    使用自动映射器从动态对象复制属性

  29. 29

    如何使用动态属性名称为JSON对象

热门标签

归档