gpt4 book ai didi

mysql - 在 FOR bucle 中设置 INSERT...SELECT 的位置用于计费系统 Python 和 MySQL

转载 作者:行者123 更新时间:2023-11-29 18:31:26 25 4
gpt4 key购买 nike

我正在尝试使用 Python 中的“INSERT...SELECT”在名为“factura”(英文发票)的 MySQL 表中插入多条记录。

#QUERY OF THE CONSULTA DEL VADOR DEL IVA JURIDICO
cursor.execute("SELECT ivajuridico FROM configuracion;")
dato1 = cursor.fetchall()
#CONSULTA DE LA INFORMACION DE LOS ARRENDATARIOS
cursor.execute("SELECT c_cod, now(), relacionip.i_cod, i_vlrenta, a_tpersona FROM contratos INNER JOIN relacionip ON contratos.r_id = relacionip.r_id INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;")
dato2 = cursor.fetchall()
connect.commit()
for a in dato1:
ivaj = a[0] #16.0 (float)
print ivaj
for i in dato2:
if i[4] == 2:
#showinfo("","Es Jurídico")
iva = i[3]*ivaj/100 #vl arriendo*iva/100
total = i[3]+iva
else:
#showinfo("","Es Natural")
iva = 0
total = i[3]+iva
try:
cursor.execute('''INSERT INTO factura_arre(c_cod, fa_fecha, fa_iva, fa_total) SELECT c_cod, now(), '%f', '%f' FROM contratos INNER JOIN relacionip ON contratos.r_id = relacionip.r_id INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;''' % (iva, total))
connect.commit()
except:
pass
showinfo('Operación', "Grabado!")

第一个查询在名为“configuracion”的表中搜索名为“IVA Jurídico”的税值,该表仅包含一个浮点值 (16.0),并且该值应用于这些合法租户。

MariaDB> SELECT ivajuridico FROM configuracion;
+-------------+
| ivajuridico |
+-------------+
| 16 |
+-------------+
1 row in set (0.00 sec)

然后,第二个查询在一些相关表中搜索所需的租户和特性信息,结果是 8 条记录,因为这些是数据库中租户的总数。其中第一个是类型合法的。

MariaDB> SELECT c_cod, now(), relacionip.i_cod, i_vlrenta, a_tpersona FROM contratos INNER JOIN relacionip ON contratos.r_id = relacionip.r_id INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;
+-------+---------------------+-------+-----------+------------+
| c_cod | now() | i_cod | i_vlrenta | a_tpersona |
+-------+---------------------+-------+-----------+------------+
| 1509 | 2017-07-03 23:55:08 | 1140 | 5284240 | 2 |
| 1526 | 2017-07-03 23:55:08 | 170 | 687500 | 1 |
| 1528 | 2017-07-03 23:55:08 | 88 | 432000 | 1 |
| 22736 | 2017-07-03 23:55:08 | 386 | 1338000 | 1 |
| 22754 | 2017-07-03 23:55:08 | 192 | 720000 | 1 |
| 22789 | 2017-07-03 23:55:08 | 1144 | 645000 | 1 |
| 22898 | 2017-07-03 23:55:08 | 448 | 3700000 | 1 |
| 22900 | 2017-07-03 23:55:08 | 449 | 1100000 | 1 |
+-------+---------------------+-------+-----------+------------+
8 rows in set (0.00 sec)

接下来的代码,我认为,这是可以理解的,因为它定义了如果租户类型为合法,则必须应用法人的税值,否则为 0。

但是,代码的其余部分,其中 try: 是并且必须执行 INSERT...SELECT,我遇到了问题,因为它为我提供了 8 条记录,所有记录的租金值相同租户和税费为0,忽略其中之一是合法的。但是,如果我将 try 及其内容设置在 else 下面,我会得到 64 个记录,而不是 8 个。

mysql> select * from factura_Arre;
+--------+-------+---------------------+--------+----------+-----------+----------+
| fa_num | c_cod | fa_fecha | fa_iva | fa_total | fa_estado | fa_notas |
+--------+-------+---------------------+--------+----------+-----------+----------+
| 40 | 1509 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 41 | 1526 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 42 | 1528 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 43 | 22736 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 44 | 22754 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 45 | 22789 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 46 | 22898 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
| 47 | 22900 | 2017-06-08 01:16:01 | 0 | 1100000 | 0 | NULL |
+--------+-------+---------------------+--------+----------+-----------+----------+
8 rows in set (0.00 sec)

问题是 try: 应该位于哪里,或者我还需要什么代码才能使其工作?

最佳答案

我缩进了 try block 并从插入中删除了选择。它重复了正在迭代的 dato2 选择。我使用 dat02 中的 c_cod 进行插入。

#QUERY OF THE CONSULTA DEL VADOR DEL IVA JURIDICO
cursor.execute("SELECT ivajuridico FROM configuracion;")
dato1 = cursor.fetchall()
#CONSULTA DE LA INFORMACION DE LOS ARRENDATARIOS
cursor.execute("SELECT c_cod, now(), relacionip.i_cod, i_vlrenta, a_tpersona FROM contratos INNER JOIN relacionip ON contratos.r_id = relacionip.r_id INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;")
dato2 = cursor.fetchall()
connect.commit()
for a in dato1:
ivaj = a[0] #16.0 (float)
print ivaj
for i in dato2:
if i[4] == 2:
#showinfo("","Es Jurídico")
iva = i[3]*ivaj/100 #vl arriendo*iva/100
total = i[3]+iva
else:
#showinfo("","Es Natural")
iva = 0
total = i[3]+iva
try:
cursor.execute("INSERT INTO factura_arre(c_cod, fa_fecha, fa_iva, fa_total) values ('%s', now(), '%f', '%f')" % (i[0], iva, total)) # i[0] is c_cod for the row just calculated.
connect.commit()
except:
pass
showinfo('Operación', "Grabado!")

关于mysql - 在 FOR bucle 中设置 INSERT...SELECT 的位置用于计费系统 Python 和 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com