Я пытаюсь извлечь данные, которые соответствуют запасу, присутствующему в обоих моих наборах данных (приведены в коде ниже).
Это мои данные:
#(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), в данном случае это акции 'a' и акции '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
Я понимаю, почему у меня будет различное количество результирующих столбцов, но не совсем понимаю, почему это вызывает ошибку.
Как мне это сделать?
Заранее спасибо