在Python Elixir中编写更新语句

时间:2010-10-19 01:37:17

标签: python sql orm python-elixir

我正在使用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))

我该怎么做?

3 个答案:

答案 0 :(得分:0)

尝试用对象而不是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

答案 1 :(得分:0)

您可以使用SQLAlchemy方法执行此操作,请注意,elixir并不打算在很多情况下替换SQLAlchemy的工作方式。

import sqlalchemy as sa

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

答案 2 :(得分:0)

如果sombody偶然发现这个问题,这应该在Elixir中有效:

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