Wildcards im Spaltennamen für MySQL

8

Ich versuche, mehrere Spalten, aber nicht alle Spalten aus der Datenbank auszuwählen. Alle Spalten, die ich auswählen möchte, beginnen mit "word".

Also in Pseudocode möchte ich das tun:

%Vor%

Mehr oder weniger. Ich finde keine Dokumentation darüber, wie das geht - ist das in MySQL möglich? Im Grunde versuche ich, eine Liste von Wörtern in einer einzelnen Zeile mit einer Kennung zu speichern, und ich möchte alle Wörter mit dieser Kennung verknüpfen, wenn ich die Datensätze abrufe. Alle Wörter werden als eine Zeichenfolge verknüpft und an eine andere Funktion in einem Array / Wörterbuch mit ihrer Kennung übergeben.

Ich versuche, möglichst kurze Datenbankanrufe zu machen, um schnellen Code zu behalten.

Ok, hier ist noch eine Frage an euch:

Es wird eine variable Anzahl von Spalten mit dem Namen "word" geben. Wäre es schneller, für jede Zeile einen separaten Datenbankaufruf mit einer generierten Python-Abfrage pro Zeile auszuführen, oder wäre es einfacher, SELECT * zu wählen und nur die benötigten Spalten zu verwenden? Kann man SELECT * NOT XYZ sagen?

    
Andrew Alexander 13.07.2012, 08:24
quelle

4 Antworten

8

Nein, SQL bietet Ihnen keine Syntax für eine solche Auswahl.

Was Sie können tun, ist, MySQL nach einer Liste zu fragen der Spaltennamen zuerst, dann generieren Sie die SQL-Abfrage aus diesen Informationen.

%Vor%

Wählen Sie die Spaltennamen. Dann können Sie in Python:

tun %Vor%

Anstatt String-Verkettung zu verwenden, würde ich stattdessen SQLAlchemy empfehlen, die SQL-Generierung für Sie durchzuführen.

Wenn Sie jedoch nur die Anzahl der Spalten begrenzen möchten, müssen Sie keine dynamische Abfrage durchführen. Die harte Arbeit für die Datenbank ist die Auswahl der Zeilen; Es macht keinen großen Unterschied, Ihnen 5 Spalten von 10 oder alle 10 zu senden.

In diesem Fall verwenden Sie einfach "SELECT * FROM ..." und verwenden Python, um die Spalten aus der Ergebnismenge auszuwählen.

    
Martijn Pieters 13.07.2012, 08:29
quelle
1

Nein, Sie können die Liste der auszuwählenden Spalten nicht dynamisch erstellen. Es muss in Ihrer letzten Abfrage fest codiert werden.

Ihre aktuelle Abfrage würde eine Ergebnismenge mit einer Spalte erzeugen und der Wert dieser Spalte wäre die Zeichenkette "word%" in allen Zeilen, die die Bedingung erfüllen.

    
Jon 13.07.2012 08:28
quelle
1

Sie können die Liste der Spaltennamen zuerst mit

erstellen %Vor%

Dann durchlaufen Sie den Cursor und generieren SQL-Anweisung verwendet alle Spalten aus der Abfrage oben.

%Vor%     
Maria Zverina 13.07.2012 08:32
quelle
0

Dies könnte hilfreich sein: MySQL-Platzhalter in auswählen

Zusammenfassend ist es in MySQL nicht direkt möglich.

Was Sie als dreckige Problemumgehung tun könnten, ist, alle Spaltennamen aus der Tabelle mit einer anfänglichen Abfrage zu erhalten ( Ссылка ) und dann in Python vergleichen, wenn der Name mit Ihrem Muster übereinstimmt. Danach könnten Sie die MySQL-Select-Anweisung mit den gefundenen Spaltennamen wie folgt machen:

%Vor%     
Horen 13.07.2012 08:36
quelle

Tags und Links