'factura'という名前のMySQLテーブル(英語の請求書)に複数のレコードを挿入しようとしています。 'INSERT ... SELECT 'Pythonで。ここで設定するINSERT ... SELECT課金システムのPythonとMySQLでのFORブール
#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!")
最初のクエリは、唯一の浮動小数点値(16.0)が含まれて「configuracion」という名前のテーブルに「IVAJurídico」と呼ばれる税、の値を検索し、この1は、これらの法的なテナントに適用されます。
MariaDB> SELECT ivajuridico FROM configuracion;
+-------------+
| ivajuridico |
+-------------+
| 16 |
+-------------+
1 row in set (0.00 sec)
そして、2番目のクエリは、これらは、データベース内のテナントの合計であるので、結果は、8つのレコードがいくつかの関連テーブルでテナントとプロパティのrequiered情報を検索します。それらのうちの1つは、最初のもので、合法的なタイプです。
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を実行する必要があります。すべてのテナントと税金0に対して同じ賃貸料の値を持つレコードが8つあります。そのうちの1つは合法ですが無視されます。私はtry
を設定し、else
以下にその内容なら、私は64 recodrsの代わりに、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:
を配置する必要がありますか、私はそれを動作させるどのような他のコードを必要としないところのものはありますか?
insert文からselect文を実行します。%f列を使用せずに単独で選択します。あなたは8つのレコードを取得します。これらの8つのレコードを最後の値iva、totalで挿入しています。 ivaにprintステートメントを入れ、ifブロック、elseブロック、insertの直前に選択してください。なぜこの動作が起こるのかがわかります – LAS