Variablen in R DBI binden

8

In Rs DBI -Paket finde ich keine Möglichkeit, gebundene Variablen zu verwenden. Ich habe ein Dokument gefunden (die Originalvignette aus dem Jahr 2002), das über gebundene Variablen sagt: "Vielleicht könnte der DBI irgendwann in der Zukunft dieses Feature implementieren", aber es sieht so aus, als ob es zurückgelassen wurde.

Was benutzen Leute in R für einen Ersatz? Verketten Sie einfach Strings direkt in die SQL? Das hat einige offensichtliche Probleme für Sicherheit & amp; Leistung.

BEARBEITEN:

Hier ist ein Beispiel dafür, wie Platzhalter funktionieren könnten:

%Vor%

Das ist keine sehr gut durchdachte Schnittstelle, aber die Idee ist, dass Sie einen Wert für bind verwenden können und der Treiber die Details des Escaping behandelt (wenn die zugrunde liegende API nativ keine gebundenen Variablen verarbeitet) der Anrufer muss es [schlecht] neu implementieren.

    
Ken Williams 02.02.2010, 17:05
quelle

3 Antworten

16

Für jeden, der wie ich nach dem googlen für rsqlite und dbgetpreparedquery zu dieser Frage kommt, scheint es, dass Sie in der neuesten Version von rsqlite eine SELECT-Abfrage mit Bind-Variablen ausführen können. Ich habe gerade folgendes ausgeführt:

%Vor%

Dies war relativ schnell (Auswahl von 2.000 Zeilen aus einer 450.000 Reihentabelle) und ist unglaublich nützlich.

Zu Ihrer Information

    
user1076 11.07.2011, 17:08
quelle
3

Im Folgenden finden Sie eine Zusammenfassung dessen, was derzeit in RSQLite für die Bindung unterstützt wird Parameter. Sie haben recht, dass es derzeit keine Unterstützung gibt SELECT, aber es gibt keinen guten Grund dafür und ich möchte hinzufügen Unterstützung dafür.

Wenn Sie Lust haben zu hacken, können Sie sich einen schreibgeschützten Checkout von allen verschaffen die DBI-bezogenen Pakete hier:

%Vor%

Ich erhalte gerne Patches, besonders wenn sie Tests enthalten und Dokumentation. Einheitliches Diff, bitte. Ich mache eigentlich alles Entwicklung mit Git und so am besten Fall ist es, einen Git Klon von sagen RSQLite und dann senden Sie mir Diffs als git format-patch -n git-svn..

Wie auch immer, hier sind einige Beispiele:

%Vor%     
seth 11.02.2010 17:56
quelle
1

Hey hey - Ich habe gerade entdeckt, dass RSQLite, was ich in diesem Fall verwende, tatsächlich eine Unterstützung für gebundene Variablen hat:

Ссылка

Siehe den Eintrag über dbSendPreparedQuery() und dbGetPreparedQuery() .

Also, in der Theorie, das macht diese Boshaftigkeit:

%Vor%

hinein:

%Vor%

Leider, wenn ich es tatsächlich versuche, scheint es, dass es nur für INSERT -Anweisungen und ähnliches ist, nicht für SELECT -Anweisungen, weil ich einen Fehler bekomme: RS-DBI driver: (cannot have bound parameters on a SELECT statement) .

Diese Fähigkeit wäre fantastisch.

Der nächste Schritt wäre, DBI selbst hochzuladen, damit alle DBs davon profitieren und eine Standardimplementierung bereitstellen können, die sie einfach in den String einfügt, wie wir es jetzt selbst tun.

    
Ken Williams 02.02.2010 23:12
quelle

Tags und Links