Ich versuche, Daten zu extrahieren, die einer Aktie entspricht, die in meinen beiden Datensätzen vorhanden ist (in einem Code unten angegeben).Kreuzung in sqlite3 in Python
Dies ist meine Daten:
#(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)]
Hier sind meine Fragen:
Frage 1:
Ich versuche, Preis, Empfehlung und Volumen zu extrahieren, die auf Asset entsprechen 'a' . Im Idealfall würde Ich mag ein Tupel wie folgt erhalten:
(u'a',1,u'BUY',5)
Frage 2:
Was passiert, wenn ich wollte Kreuzung erhalten für alle Bestände (nicht nur ‚a‘ wie in Frage 1), in dieser Fall ist es Lager ‚a‘, und Lager ‚d‘ ist, dann meine gewünschte Ausgabe wird:
(u'a',1,u'BUY',5)
(u'd',6,u'BUY',6)
Wie soll ich das tun?
Hier ist mein Versuch (Frage 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
ich keine Fehler, aber auch keine Ausgabe, so klar aus etwas ist.
Ich habe auch versucht, diese Zeile:
c.execute('select* from my_table_1 where stock = ? INTERSECT select volume from my_table_2 where stock = ?',('a','a')
aber es funktioniert nicht, bekomme ich diesen Fehler:
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
Ich verstehe, warum ich unterschiedliche Anzahl von resultierenden Spalten haben würde, aber don‘ Ich verstehe nicht, warum das einen Fehler auslöst.
Wie soll ich das tun?
Vielen Dank im Voraus
Vielen Dank für Ihre Antwort; es macht genau das, wonach ich gesucht habe. Danke auch für die Erklärung, ich brauchte das :). – Akavall