如何用python解析(Decimal(' str'))

时间:2017-10-04 14:07:07

标签: python django parsing

在我看来,我调用了一个存储过程,该存储过程向我返回了它创建的条目的ID。

我需要将此id用作另一个存储过程的参数。

我的问题是第一个查询的结果是:(十进制(' 1046'),)当然不适合作为第二个程序的参数。

我如何解析它只能获得' 1046' ?

编辑:

View.py:

def dictfetchall(cursor):
    columns = [col[0] for col in cursor.description]
    return [
        dict(zip(columns, row))
        for row in cursor.fetchall()
    ]

def mouvementCreation(request):
    idMI = 0
    especes = TbEspece.objects.order_by('id')
    #Get Mouvement informations

    #Connection to 'erp-site' DB 
    cursor = connections['erp-site'].cursor()
    try:
        #Get Produits list from Espece
        query = "{CALL SP_webGET_PRODUIT_FROM_ESPECE(%s,%s,%s,%s,%s)}"
        arguments = (2016, 'C', 0, 10, 'A',)
        cursor.execute(query, arguments)
        produits = dictfetchall(cursor)

        #Get Transporters list
        cursor.execute("{CALL SP_webGET_TRANSPORT}")
        transporters = dictfetchall(cursor)

        #Get Livreur list
        cursor.execute("{CALL SP_webGET_LIVREUR}")
        livreurs = dictfetchall(cursor)
    finally:
        cursor.close()       

    cursor = connections['site'].cursor()
    try:
        #Get Circuit list
        cursor.execute("{CALL SP_webGET_CIRCUIT_FOR_MVT}")
        circuits = dictfetchall(cursor)

        #Get Source list
        cursor.execute("{CALL SP_webGET_SOURCE_FOR_MVT}")
        mvtsources = dictfetchall(cursor)

        #Get Dest list
        cursor.execute("{CALL SP_webGET_DEST_FOR_MVT}")
        destinations = dictfetchall(cursor)

        #Get PontBascule list
        cursor.execute("{CALL SP_webGET_PBASCULE}")
        pontBascules = dictfetchall(cursor)
    finally:
        cursor.close()

    reg_normes = TbRegauxnormes.objects.all()
    ordreexecs = TbOrdreexecution.objects.all()
    if request.method == 'POST':
        typemouvement = request.POST.get('typemouvement')
        soustype = request.POST.get('soustype')
        recolte = request.POST.get('recolte') 
        groupe = request.POST.get('groupe')
        categorie = request.POST.get('categorie')
        code = request.POST.get('code')
        collecte = request.POST.get('collecte')
        vente = request.POST.get('vente')
        stock = request.POST.get('stock')
        achat = request.POST.get('achat')
        transporteur = request.POST.get('transporteur')
        blLivreur = request.POST.get('blLivreur', '')
        contratClient = request.POST.get('contratClient')

        pont1 = request.POST.get('pont1')               # BIGINT
        numTicket = request.POST.get('numTicket')       # INT
        dateheure1 = request.POST.get('dateheure1')     # DATETIME
        poid1 = request.POST.get('poid1')               # INT
        dsd1 = request.POST.get('dsd1')                 # INT
        pont2 = request.POST.get('pont2')               # BIGINT
        dateheure2 = request.POST.get('dateheure2')     # DATETIME
        poid2 = request.POST.get('poid2')               # INT
        dsd2 = request.POST.get('dsd2')                 # INT
        p1p2 = request.POST.get('p1p2')                 # INT
        livreur = request.POST.get('idlivreur')         # BIGINT
        vehicule = request.POST.get('vehicule')         # VARCHAR
        comTicket = request.POST.get('comTicket')       # VARCHAR
        comLogiciel = request.POST.get('comLogiciel')   # VARCHAR
        espece = request.POST.get('espece')             # BIGINT
        produit = request.POST.get('produit')           # BIGINT
        #Connection to 'erp-site' DB 

        cursor = connections['pontbascule'].cursor()
        try:
            query = "{CALL SP_webADD_MANUAL_PESEE(%s,%s,%s,%s,%s, %s,%s,%s,%s,%s, %s,%s,%s,%s,%s,%s,%s)}"
            arguments = (pont1, numTicket, dateheure1, poid1, dsd1,pont2, numTicket, dateheure2, poid2, dsd2, p1p2,livreur, vehicule,comTicket, comLogiciel,espece, produit)
            cursor.execute(query, arguments)
            #Here i recieve the (Decimal('1046'),)
            s = cursor.fetchone()
            idCreatedPesee = s[0]
        finally:
            cursor.close()
        cursor = connections['site'].cursor()
        try:
           #Here im supposed to send it as argument to this procedure
            query = "{CALL SP_webCREATE_MVT_INIT(%s)}"
            arguments = (idCreatedPesee)
            cursor.execute(query, arguments)
            idCreatedMVT = dictfetchall(cursor)
        finally:
            cursor.close()
    return render(request, 'mouvementCreation.html', {'especes' : especes, 'produits' : produits, 'transporters' :  transporters, 'livreurs' : livreurs, 'circuits' : circuits, 'mvtsources' : mvtsources, 'destinations' : destinations, 'pontBascules' : pontBascules} )

3 个答案:

答案 0 :(得分:3)

python中的

类型转换就像:

一样简单
my_decimal = Decimal('1046')
as_a_string = str(my_decimal) # '1046', a string
as_an_int = int(my_decimal) # 1046, an integer

答案 1 :(得分:0)

它是decimal.Decimal类的一个实例,是Python标准库的一部分。与正常的浮点数不同,它精确地存储小数部分。由于数据库执行类似的操作,将数据库的数字转换为Decimals是将它们转换为Python的最正确方法。

他们大多只是Python中的数字。

>>> from decimal import Decimal
>>> Decimal('12.3') + 4
Decimal('16.3')

如果您知道它是一个整数,并且您需要将整数传递到某个地方,请传递int(yourdecimal)

你得到(Decimal('1046'),)的parens和逗号意味着你得到长度为1的元组的结果。你可以通过用{{1}索引它来访问它的第一个元素和所有元组一样。

答案 2 :(得分:0)

由于没有任何效果,我只是在查询中使用了CONVERT,以确保最终得到一个字符串。