Python数据集更新 - TypeError:update()最多需要2个位置参数(给定3个)

时间:2016-10-18 18:11:01

标签: python python-2.7 dataset parameter-passing

当尝试使用uuident = uuident的dict中的数据更新数据库时,我收到此错误

错误:

// [[Rcpp::export]]
Rcpp::StringVector Segment(Rcpp::StringVector x, int start, int end) {
  Rcpp::StringVector s(end-start+1);
  for(int i=start; i <= end; i++){
    s[i]=x[i];
    }
  return(s);
}

错误仅在此更新中发生。如果插入则根本没有错误。

我是初学者,能帮帮我吗?

详情

TypeError: update() takes at most 2 positional arguments (3 given)

teste.py

Traceback (most recent call last):
  File "/home/ubuntu/workspace/ex50/bin/teste.py", line 59, in <module>
    main()
  File "/home/ubuntu/workspace/ex50/bin/teste.py", line 35, in main
    prec.precifica("7f559bb1-b6c6-44b7-ba4e-1e4592dcd009")
  File "/home/ubuntu/workspace/ex50/bin/precificator.py", line 81, in precifica
    produto_precificado.update(product,['uuident'])
  File "/usr/lib/python2.7/_abcoll.py", line 534, in update
    "arguments ({} given)".format(len(args)))
TypeError: update() takes at most 2 positional arguments (3 given)

precificator.py

from alcateia.alcateia import *
from bling.bling import *
from tray.tray import *
import alcateia.alcateia
import tray.tray
import tray.trayservice
from precificator import Precificator
import logging


def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.info('Programa inicializado...')

    prec = Precificator()
    prec.precifica("7f559bb1-b6c6-44b7-ba4e-1e4592dcd009")


    logging.info('Processo finalizado!')
    logging.info('--------------------')



if __name__ == '__main__':
    main()

更新

# coding: utf-8 import sys import uuid from sgcon import Produto from db import produtosalca, alca_uuid, cem, precificado import logging logger = logging.getLogger(__name__) class Precificator(object): """ modulo precificador """ def __init__(self): pass def precifica(self,uuident): print 'uuident value is %s' % uuident print 'uuident type is %s' % type(uuident) product = {} ## cria dict product product['uuident'] = uuident produto_cem = cem.find_one(uuident=uuident) ## gets produto_cem from database cem valorcem = produto_cem['valorcem'] margem = 0.04 ## definimos margem em 10% product['margem']=margem ## atribuimos margem valorMargem = valorcem * margem ## valor + margem product['valormargem']=valorMargem despadm = 15.00 ## desp adm 15 reais product['despadm'] = despadm outrasdesp = 5.00 ## outras desp 5 reais product['outrasdesp'] = outrasdesp somatudo = valorMargem + despadm + outrasdesp comissaovenda = 0.00 ##comissao mktplace 16% product['comissaovenda'] = comissaovenda comissaorecebiveis = 0.05 ##comissao / desp financeiras 0% product['comissaorecebiveis']=comissaorecebiveis cemcommargem = valorcem*(1+(margem)) ## cem com margem = cem*(1+margem) aliqICMS = produto_cem['aliqICMS'] product['aliqICMS'] = aliqICMS aliqPIS = produto_cem['aliqPIS'] aliqCofins = produto_cem['aliqCofins'] aliqTotalImposto = aliqICMS + aliqCofins + aliqPIS ## aliquota total (em %) dos impostos base = cemcommargem + despadm + outrasdesp ## Soma as despesas em reais ao valorcem e obtem a base para o calculo outrasAliq = comissaovenda + comissaorecebiveis ## outras aliquotas não tributárias indice = 1-(aliqTotalImposto + outrasAliq) ## índice para cálculo precovenda = base / indice ## aplica o índice product['precovenda']=precovenda ## atribui ao dict product ## ALL MATH DONE AND DICT PRODUCT IS READY TO GO TO DATABASE TABLE PRECIFICA produto_precificado = precificado.find_one(uuident=uuident) ## CHECKS IF ROW WITH THIS UUIDENT EXISTS IN TABLE PRECIFICA """ CHECKS AND ACT """ if produto_precificado: ## IF PRODUCT EXISTS IN DATABASE TABLE ## UPDATE print 'produto exists in db' print product print type(product) """ THIS DO NOT WORK """ produto_precificado.update(product,['uuident']) ## THIS DO NOT WORK!!!! ##produto_precificado.update(dict(precovenda=precovenda),['id']) else: ## IF product do not exists ## INSERT print 'produto nao existe no bd' """ THIS WORKS!!!! """ precificado.insert(product) ### THIS WORKS! 类型为produto_precificado

2 个答案:

答案 0 :(得分:0)

内置字典更新方法接受其他keywords = values并使用该字典或其他字典更新字典,并使用第二个字典中的所有键更新字典。

您可能想要做的是:

produto_precificado[product['uuident']] = product

根据uuident(或任何键)制作产品哈希值。

答案 1 :(得分:0)

对不起我在这里犯下的可怕错误。

好吧,以防有人经历同样的事情:

produto_precificado是表precificado中的一行。

这就是错误。

我改变了:

produto_precificado.update(product,['uuident'])

precificado.update(product,['uuident'])

像魅力一样工作。