Python Sqlalchemy带棱锥的批量插入
我有一个对象,我需要使用循环插入几次。每次循环迭代我都会更改一些字段值。 我的代码是:Python Sqlalchemy带棱锥的批量插入,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,我有一个对象,我需要使用循环插入几次。每次循环迭代我都会更改一些字段值。 我的代码是: @view_config(route_name="be.bautocredits.rates.add", request_method="POST", permission="admin", renderer="json") def _add_rates(self): _ = self.request.translate
@view_config(route_name="be.bautocredits.rates.add",
request_method="POST",
permission="admin",
renderer="json")
def _add_rates(self):
_ = self.request.translate
controls = self.request.POST.items()
schema = AutocreditRateSchema()
try:
schema.deserialize(controls)
rate = AutocreditRate()
rate.autocredit = Autocredit.by_rid(self.request.POST.get('_autocredits_rid'))
rate.carshow = Carshow.by_rid(self.request.POST.get('_carshows_rid'))
rate.currency = Currency.by_rid(self.request.POST.get('_currencies_rid'))
rate.min_cost_currency = Currency.by_rid(self.request.POST.get('min_cost_currencies_rid'))
rate.max_cost_currency = Currency.by_rid(self.request.POST.get('max_cost_currencies_rid'))
rate.min_currency = Currency.by_rid(self.request.POST.get('min_currencies_rid'))
rate.max_currency = Currency.by_rid(self.request.POST.get('max_currencies_rid'))
rate.manufacturer = Manufacturer.by_rid(self.request.POST.get('_manufacturers_rid'))
rate.autocredit.updated = datetime.datetime.now()
_cars_rids = list(set(self.request.POST.getall('_cars_rid')))
if _cars_rids:
for _cars_rid in _cars_rids:
rate.car = Car.by_rid(_cars_rid)
DBSession.add(rate)
else:
DBSession.add(rate)
except colander.Invalid, e:
return dict(errors=dict(e.asdict().items()+dict(status_bar=_(u'Check errors')).items()))
return dict()
这段代码只插入一行。由于某些原因,我无法在“try block”开头直接设置循环。
我做错了什么?
DBSession.add
将对象添加到会话(顾名思义)-此时不会发出SQL查询,。add
只会让会话知道该对象
您可以继续修改对象的属性,直到提交会话为止—无论您将对象添加到会话中多少次,只有一行将添加到数据库中
您可以使用一些巧妙的会话刷新来完成您想要完成的任务,但是,说真的,为什么不为每一行创建一个单独的对象呢?一般来说,ORMs就是这样工作的
def _add_rates(self):
_ = self.request.translate
controls = self.request.POST.items()
schema = AutocreditRateSchema()
try:
schema.deserialize(controls)
_cars_rids = list(set(self.request.POST.getall('_cars_rid')))
autocredit = Autocredit.by_rid(self.request.POST.get('_autocredits_rid'))
carshow = Carshow.by_rid(self.request.POST.get('_carshows_rid'))
currency = Currency.by_rid(self.request.POST.get('_currencies_rid'))
min_cost_currency = Currency.by_rid(self.request.POST.get('min_cost_currencies_rid'))
max_cost_currency = Currency.by_rid(self.request.POST.get('max_cost_currencies_rid'))
min_currency = Currency.by_rid(self.request.POST.get('min_currencies_rid'))
max_currency = Currency.by_rid(self.request.POST.get('max_currencies_rid'))
manufacturer = Manufacturer.by_rid(self.request.POST.get('_manufacturers_rid'))
if _cars_rids:
for _cars_rid in _cars_rids:
rate = AutocreditRate(autocredit=autocredit, carshow=carshow, ...)
rate.car = Car.by_rid(_cars_rid)
rate.autocredit.updated = datetime.datetime.now()
DBSession.add(rate)
else:
rate = AutocreditRate(autocredit=autocredit, carshow=carshow, ...)
rate.autocredit.updated = datetime.datetime.now()
DBSession.add(rate)
DBSession.add
将对象添加到会话(顾名思义)-此时不会发出SQL查询,.add
只会让会话知道该对象
您可以继续修改对象的属性,直到提交会话为止—无论您将对象添加到会话中多少次,只有一行将添加到数据库中
您可以使用一些巧妙的会话刷新来完成您想要完成的任务,但是,说真的,为什么不为每一行创建一个单独的对象呢?一般来说,ORMs就是这样工作的
def _add_rates(self):
_ = self.request.translate
controls = self.request.POST.items()
schema = AutocreditRateSchema()
try:
schema.deserialize(controls)
_cars_rids = list(set(self.request.POST.getall('_cars_rid')))
autocredit = Autocredit.by_rid(self.request.POST.get('_autocredits_rid'))
carshow = Carshow.by_rid(self.request.POST.get('_carshows_rid'))
currency = Currency.by_rid(self.request.POST.get('_currencies_rid'))
min_cost_currency = Currency.by_rid(self.request.POST.get('min_cost_currencies_rid'))
max_cost_currency = Currency.by_rid(self.request.POST.get('max_cost_currencies_rid'))
min_currency = Currency.by_rid(self.request.POST.get('min_currencies_rid'))
max_currency = Currency.by_rid(self.request.POST.get('max_currencies_rid'))
manufacturer = Manufacturer.by_rid(self.request.POST.get('_manufacturers_rid'))
if _cars_rids:
for _cars_rid in _cars_rids:
rate = AutocreditRate(autocredit=autocredit, carshow=carshow, ...)
rate.car = Car.by_rid(_cars_rid)
rate.autocredit.updated = datetime.datetime.now()
DBSession.add(rate)
else:
rate = AutocreditRate(autocredit=autocredit, carshow=carshow, ...)
rate.autocredit.updated = datetime.datetime.now()
DBSession.add(rate)