@heyovak23

Как сделать цикл по кортежам?

Добрый день!

В ответах SQL запросов получаю кортеж в 1 ответе и кортежИ во втором.
Например (10, 20, 30) и [(5, 10, 15), (11, 12, 14)] (может быть не 2, 122 набора во втором ответе) соответственно.
Не могу понять как сделать цикл, что бы значения ответа (первого кортежа) разделить на соответствующие значения второго ответа.
Вот в таком виде - все работает, но это немного (совсем) не то.
a = (10, 20, 30)
w = (5, 10, 15)
ee = zip(a,w)
for a,w in ee:
	print(a*w)


Может быть математические операции можно делать сразу в sql запросах?
Сейчас они такого вида:
c.execute('SELECT sid, kol, bot FROM stocks')
и
c2.execute('SELECT sid, kol, bot FROM stul')

Спасибо!

UPD.
Ответ хотелось бы видеть так:
50, 200, 450
110, 240, 420
  • Вопрос задан
  • 269 просмотров
Решения вопроса 2
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
a = (10, 20, 30)
b = [(5, 10, 15), (11, 12, 14)]
c = list()

for i, v in enumerate(b):
    c.insert(i, [])
    for x, y in zip(a, v):
        c[i].append(x * y)

print(c)

outp: [[50, 200, 450], [110, 240, 420]]
Оно?
Ответ написан
Я думал речь про операции внутри запроса.
Вот пример на SQLite набросал:
root@a:~# sqlite3
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE table1(id INT PRIMARY KEY AUTOINCREMENT, fld1 INTEGER , fld2 INTEGER, fld3 INTEGER);
Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
sqlite> CREATE TABLE table1(id INTEGER PRIMARY KEY AUTOINCREMENT, fld1 INTEGER , fld2 INTEGER, fld3 INTEGER);
sqlite> CREATE TABLE table2(id INTEGER PRIMARY KEY AUTOINCREMENT, fld1 INTEGER , fld2 INTEGER, fld3 INTEGER);
sqlite> INSERT INTO table1(fld1, fld2, fld3) VALUES(15, 10, 5);
sqlite> INSERT INTO table1(fld1, fld2, fld3) VALUES(3, 6, 9);
sqlite> INSERT INTO table2(fld1, fld2, fld3) VALUES(5, 10, 15);
sqlite> INSERT INTO table2(fld1, fld2, fld3) VALUES(4, 8, 12);
sqlite> SELECT * FROM table1;
1|15|10|5
2|3|6|9
sqlite> SELECT * FROM table2;
1|5|10|15
2|4|8|12
sqlite> SELECT (table1.fld1 * table2.fld1)
   ...> FROM table1
   ...> INNER JOIN TABLE2 ON table1.id=table2.id;
75
12
sqlite> SELECT (table1.fld2 * table2.fld2)
   ...> FROM table1
   ...> INNER JOIN TABLE2 ON table1.id=table2.id;
100
48
sqlite> SELECT (table1.fld1 * table2.fld1), (table1.fld2 * table2.fld2), (table1.fld3 * table2.fld3)
   ...> FROM table1
   ...> INNER JOIN TABLE2 ON table1.id=table2.id;
75|100|75
12|48|108
sqlite>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы