在我看来,我调用了一个存储过程,该存储过程向我返回了它创建的条目的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} )
答案 0 :(得分:3)
类型转换就像:
一样简单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,以确保最终得到一个字符串。