Ich verwende derzeit MySQL Connector/Python, um eine Datenbank abzufragen.MySQL führt mehrere, ähnliche Select-Abfragen mit einer Anweisung aus
Derzeit einer der Prozesse Ich tue das sieht so etwas wie:
SELECT some_column FROM some_table WHERE some_column_2 = foo_1;
SELECT some_column FROM some_table WHERE some_column_2 = foo_2;
SELECT some_column FROM some_table WHERE some_column_2 = foo_3;
...
SELECT some_column FROM some_table WHERE some_column_2 = foo_9999;
SELECT some_column FROM some_table WHERE some_column_2 = foo_10000;
ich eine sehr große Anzahl von sehr ähnlichen Anfragen leite.
Die einzelnen Ergebnisse jeder Abfrage sind wichtig. Selbst wenn eine gegebene Abfrage nichts als Ergebnis ergibt.
Leider ist der aktuelle Ansatz, mehrere tausend Abfragen zu erstellen, zeitraubend und äußerst ineffizient.
Also meine Frage ist: gibt es eine Möglichkeit, diese Prozedur in einer einzigen Abfrage zu verdichten, so dass es effizienter läuft?
Ich denke, das sollte in MySQL definitiv möglich sein, und ich bin mir ziemlich sicher, dass mir etwas fehlt.
Bisher habe ich versucht, den Einsatz von MySQL Connector/Python executemany() Funktion, etwa so:
cursor.executemany("SELECT some_column FROM some_table WHERE some_column_2 = %s", foo_list)
ich dies eine Liste der Ergebnisse jeder einzelnen Abfrage erhalten erwartet, aber optimiert so viele Anfragen. Leider scheint dies in MySQL Connector/Python nicht zu funktionieren und führt zu einem Syntaxfehler.
Ich vermute, dass Executemany nicht mit SELECT-Anweisungen, nur mit INSERT-Anweisungen verwendet werden soll.
Ich habe gesucht auch im Internet nach Möglichkeiten, Massenabfragen wählen auszuführen, aber ich habe noch nichts Relevantes zu meiner Situation zu finden.
Ich mag ausdrücklich würde darauf hinweisen, dass
SELECT some_column FROM some_table WHERE some_column_2 IN (foo_1, foo_2, foo_3, etc);
nicht eine gültige Lösung ist, weil es die Ergebnisse nicht erhalten (oder dessen Fehlen) von jeder einzelnen Abfrage.
Jede Unterstützung mit diesem wäre willkommen.
Ja, etwas effizienter wird effizienter sein. – Strawberry
Siehe [Warum sollte ich ein MCVE für eine scheinbar sehr einfache SQL-Abfrage bereitstellen] (http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for -was-scheint-mir-zu-sehr-einfach-sql-query) – Strawberry
Warum holen Sie nicht auch 'some_column_2' mit der einzelnen SELECT-Abfrage und ordnen Sie explizit die (mit dict)" some_column_2 "mit der Entsprechende "some_column"? –