我正在使用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))
我该怎么做?
答案 0 :(得分:0)
尝试用对象而不是SQL来思考,这就是拥有ORM的原因 我几乎跟着你的班级elixir tutorial:
for p in Product.query.filter(Product.id > 100):
p.price = None
session.commit()
在SQLAlchemy中,Python的None
映射到SQL中的NULL
:Common 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})