Я пытаюсь извлечь данные, которые соответствуют запасу, который присутствует в обоих моих наборах данных (данный в коде ниже).Пересечение в sqlite3 в Python
Это мои данные:
#(stock,price,recommendation)
my_data_1 = [('a',1,'BUY'),('b',2,'SELL'),('c',3,'HOLD'),('d',6,'BUY')]
#(stock,price,volume)
my_data_2 = [('a',1,5),('d',6,6),('e',2,7)]
Вот мои вопросы:
Вопрос 1:
Я пытаюсь извлечь цену, рекомендацию, и объем, которые соответствуют актив 'а' , В идеале я хотел бы получить кортеж так:
(u'a',1,u'BUY',5)
Вопрос 2:
Что делать, если я хотел бы получить пересечение всех акций (а не только «а», как и в вопросе 1), в этом случае это акции «а» и ЗАО «d», то мой желаемый результат становится:
(u'a',1,u'BUY',5)
(u'd',6,u'BUY',6)
Как мне это сделать?
Вот моя попытка (вопрос 1):
import sqlite3
my_data_1 = [('a',1,'BUY'),('b',2,'SELL'),('c',3,'HOLD'),('d',6,'BUY')]
my_data_2 = [('a',1,5),('d',6,6),('e',2,7)]
#I am using :memory: because I want to experiment
#with the database a lot
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('''CREATE TABLE MY_TABLE_1
(stock TEXT, price REAL, recommendation TEXT)''')
c.execute('''CREATE TABLE MY_TABLE_2
(stock TEXT, price REAL, volume REAL)''')
for ele in my_data_1:
c.execute('''INSERT INTO MY_TABLE_1 VALUES(?,?,?)''',ele)
for ele in my_data_2:
c.execute('''INSERT INTO MY_TABLE_2 VALUES(?,?,?)''',ele)
conn.commit()
# The problem is with the following line:
c.execute('select* from my_table_1 where stock = ? INTERSECT select* from my_table_2 where stock = ?',('a','a') )
for entry in c:
print entry
я не получаю сообщение об ошибке, но не выход, так что-то явно выключен.
Я также попробовал эту строку:
c.execute('select* from my_table_1 where stock = ? INTERSECT select volume from my_table_2 where stock = ?',('a','a')
но это не работает, я получаю эту ошибку:
c.execute('select* from my_table_1 where stock = ? INTERSECT select volume from my_table_2 where stock = ?',('a','a') )
sqlite3.OperationalError: SELECTs to the left and right of INTERSECT do not have the same number of result columns
Я понимаю, почему я хотел бы иметь разное количество результирующих столбцов, но дон» t почему бы не вызвать ошибку.
Как мне это сделать?
Спасибо заранее
Большое спасибо за ваш ответ; он делает именно то, что я искал. Кроме того, спасибо за объяснение, мне это нужно :). – Akavall