Как сохранить выбранные строки в кортеж?

У меня есть следующий код для выбора строк из базы данных SQLite:

#!/usr/bin/python3.4
# -*- coding: utf-8 -*-

import sqlite3 as lite
import sys

csat = lite.connect('Tanuloim.db')

with csat:
    hely = csat.cursor()

    for evflym in range (5, 6):
    hely.execute('select count() from tanulo where evf=? and tannyelv="Sr"', (evflym,))
    xlegnagySr = (hely.fetchone()[0])

    hely.execute('select count() from tanulo where evf=? and tannyelv="Hu"', (evflym,))
    xlegnagyHu = (hely.fetchone()[0])


    hely.execute('select count() from munkadbnevsora where evf=?', (evflym,))
    ylegnagy = (hely.fetchone()[0])

    print ('Ennyi magyar ötödikes tanuló van - xlegnagyHu:', xlegnagyHu)
    print ('Ennyi szerb ötödikes tanuló van - xlegnagySr:', xlegnagySr)
    print ('Ennyi munkadarab van az ötödikben - ylegnagy:', ylegnagy)
    print ('evfolyam:', evflym)

    hely.execute('select tanuloneve from tanulo where evf=? and tannyelv="Sr"', (evflym,))
    """" This is returned as a tuple, let it named tuple1. """
    for x in range (0, xlegnagySr):
        print (hely.fetchone()[0])

    hely.execute('select munkdbnevesr from munkadbnevsora where evf=?', (evflym,)')
    """" This is returned as a tuple, let it named tuple2. """
    for y in range (0, ylegnagy):
        print (hely.fetchone()[0])

Пример для tuple1:

[('tanulo1',), ('tanulo2',), ('tanulo3',), ... ('tanulo19',)] 

где число 19 в tanulo19 указывает на то, что xlegnagySr=19.

Пример для tuple2:

[('munkdbnevesr1',), ('munkdbnevesr2',), ('munkdbnevesr3',),... ('munkdbnevesr13',)] 

где 13 указывают, что ylegnagy=13,

Желаемый результат должен выглядеть так:

thirdtable = [('tanulo1','munkadbnevesr1'),('tanulo1','munkadbnevesr2'),.‌​..('tanulo1','munkad‌​bnevesr13'),('tanulo‌​2','munkadbnevesr1')‌​,('tanulo2','munkadb‌​nevesr2'),...,('tanu‌​lo2','munkadbnevesr1‌​3'), ...,('tanulo19','munkadbnevesr13')]  

где числа 19 и 13 указывают на то, что xlegnagySr = 19 и ylegnagy=13.

Итак, я хочу вот что: вставить в третью таблицу базы данных несколько комбинированных значений из tuple1 и tuple2.

Я думаю, что путь для этого состоит в том, чтобы сохранить SQL-запросы в tuple1 и tuple2, а затем в операторе for вставить значения в третью таблицу.

Чтобы сделать что-то противоположное этому:

# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)

Как я могу это сделать?

Схема для моей базы данных следующая:

CREATE TABLE munkadbnevsora (
  sorszam integer CONSTRAINT ek_munkadbnevsora PRIMARY KEY AUTOINCREMENT ,
  evf integer NOT NULL ,
  negyedev integer NOT NULL ,
  munkdbnevehu text NOT NULL COLLATE nocase ,
  munkdbnevesr text NOT NULL COLLATE nocase
);
CREATE TABLE tanulo (
  az integer CONSTRAINT ek_tanulo PRIMARY KEY AUTOINCREMENT ,
  azszam integer UNIQUE NOT NULL ,
  tanuloneve text NOT NULL COLLATE nocase ,
  tannyelv text NOT NULL COLLATE nocase ,
  evf integer NOT NULL ,
  tagozat text NOT NULL COLLATE nocase ,
  osztfonok text NOT NULL COLLATE nocase 
);
CREATE TABLE egyedimunkadb (
  az integer CONSTRAINT ek_egyedimunkadb PRIMARY KEY AUTOINCREMENT,
  tanulo_akie_amunkadb text NOT NULL REFERENCES tanulo (azszam) ON DELETE CASCADE ON UPDATE CASCADE ,
  munkadb_anevsorbol integer NOT NULL REFERENCES munkadbnevsora (sorszam) ON DELETE CASCADE ON UPDATE CASCADE ,
  jegy integer ,
  indoklas text
);

Итак, я понял, что мой код на python и пример tuple2 неверны, потому что требуемые данные, помещенные в третью таблицу, которая имеет имя egyedimunkadb, должны выглядеть так:

egyedimunkadb = [(1,'tanulo1',1),(2,'tanulo1',2),.‌​..(13,'tanulo1',13),(14,'tanulo‌​2',1)‌​,(15,'tanulo2',2),...,(26,'tanu‌​lo2',1‌​3), ...,(N,'tanulo19',19)]

где N - это число, которое я не знаю сейчас.

Наконец-то это работает! Я поставил следующий код @CL. в сценарий Python:

hely.execute('INSERT INTO egyedimunkadb(tanulo_akie_amunkadb, munkadb_anevsorbol) SELECT tanuloneve, sorszam FROM tanulo CROSS JOIN munkadbnevsora WHERE tanulo.evf = ? AND munkadbnevsora.evf = ? AND tanulo.tannyelv = "Sr" ', (evflym, evflym))

и он заполняет третью таблицу базы данных данными, как я и ожидал.

Бест, Пал

1 ответ

Решение

Оператор INSERT может принять запрос. В этом случае вы хотите все возможные комбинации, которые являются перекрестным соединением:

INSERT INTO egyedimunkadb(tanulo_akie_amunkadb, munkadb_anevsorbol)
SELECT tanulo, sorszam
FROM tanulo
CROSS JOIN munkadbnevsora
WHERE tanulo.evf = ?
  AND munkadbnevsora.evf = ?
  AND tanulo.tannyelv = 'Sr';
Другие вопросы по тегам