【问题标题】:Write update statement in Python Elixir在 Python Elixir 中编写更新语句
【发布时间】:2010-10-19 01:37:16
【问题描述】:

我使用 Elixir 作为 MySQL 数据库的 ORM,我在编写更新语句时遇到问题,例如:

"update products set price=NULL where id>100"

这是我的 Elixir clsee

class Product(Entity):
    using_options(tablename='model_product')
    name                        = Field(Unicode(200))
    en_name             = Field(Unicode(200))
    price                       = Field(Float)
    en_price            = Field(Float)
    productid                   = Field(Unicode(200))
    site                        = Field(Unicode(30))
    link                        = Field(Unicode(300))
    smallImage                  = Field(Unicode(300))
    bigImage                    = Field(Unicode(300))
    description                 = Field(UnicodeText)
    en_description              = Field(UnicodeText)
    createdOn                   = Field(DateTime, default=datetime.datetime.now)
    modifiedOn                  = Field(DateTime, default=datetime.datetime.now)
    size                        = Field(Unicode(30))
    en_size                     = Field(Unicode(30))
    weight                      = Field(Unicode(30))
    en_weight                   = Field(Unicode(30))
    wrap                        = Field(Unicode(30))
    en_wrap                     = Field(Unicode(30))
    material                    = Field(Unicode(30))
    en_material                 = Field(Unicode(30))
    packagingCount              = Field(Unicode(30))
    stock                       = Field(Integer)
    location                    = Field(Unicode(30))
    en_location                 = Field(Unicode(30))
    popularity                  = Field(Integer)
    inStock                     = Field(Boolean)
    categories                  = Field(Unicode(30))

我应该怎么做?

【问题讨论】:

  • 你的模型类是如何定义的?
  • @ma3204 类定义如上所列

标签: python sql orm python-elixir


【解决方案1】:

尝试从对象而不是 SQL 的角度来思考,这就是拥有 ORM 的原因。
我几乎只是跟着你的班级elixir tutorial

for p in Product.query.filter(Product.id > 100):
    p.price = None
session.commit()

在 SQLAlchemy 中,Python 的 None 映射到 SQL 中的 NULLCommon Filter Operators

【讨论】:

    【解决方案2】:

    您可以只使用 SQLAlchemy 的方式来执行此操作,请注意,在许多情况下,elixir 并不打算取代 SQLAlchemy 的工作方式。

    import sqlalchemy as sa
    
    sa.update(Product.table).\
        where(Product.id > 100).\
        values(price=None)
    

    【讨论】:

      【解决方案3】:

      如果有人偶然发现这个问题,这应该可以在 Elixir 中使用:

      Product.query.filter(Product.id > 100).update({Product.price: None})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 2018-11-13
        • 1970-01-01
        • 2010-11-21
        • 2016-06-28
        • 2012-06-22
        相关资源
        最近更新 更多