Seite 1 von 1

SQLite3 Select

Verfasst: Donnerstag 10. März 2011, 11:55
von vankuche
Hallo,

ich möchte in einem Select Statement variabel den Spaltennamen tauschen um zwei Datenbanken abzugleichen.
Dabei habe ich festgestellt, dass Hochkommas oder Anführungszeichen um den Spaltennamen ein Problem sind.

1. Funktioniert nicht:

Code: Alles auswählen

column = 'a'
sql = "SELECT ? FROM settings"
db2cursor.execute(sql, (column,))
2. Funktioniert:

Code: Alles auswählen

column = 'a'
sql = "SELECT %s FROM presettings" % column
db2cursor.execute(sql)
3. Funktioniert nicht:

Code: Alles auswählen

sql = "SELECT 'a' FROM settings"
db2cursor.execute(sql)
4. Funktioniert:

Code: Alles auswählen

sql = "SELECT a FROM settings"
db2cursor.execute(sql)
Warum funktioniert die erste und dritte Variante nicht? Was muss ich ändern, damit ich wie in der ersten Variante die gewählten Spalten leicht Tauschen kann?

Danke.

Re: SQLite3 Select

Verfasst: Donnerstag 10. März 2011, 12:16
von EyDu
Hallo und willkommen im Forum!

Das funktioniert nicht, weil

Code: Alles auswählen

"SELECT 'a' FROM settings"
etwas anderes ist als

Code: Alles auswählen

"SELECT a FROM settings"
Die nicht funktionierenden Varianten liefern beide die erste Variante.

Sebastian

Re: SQLite3 Select

Verfasst: Donnerstag 10. März 2011, 12:18
von vankuche
Die Frage ist nur, was muss ich an Variante 1 ändern, damit sie funktioniert.

Re: SQLite3 Select

Verfasst: Donnerstag 10. März 2011, 16:32
von deets
vankuche hat geschrieben:Die Frage ist nur, was muss ich an Variante 1 ändern, damit sie funktioniert.
Die 2te Variante nehmen?

Natuerlich oeffnest du dich je nach Herkunft der Eingaben damit fuer SQL-Injecktion. Aber es gibt keinen sicheren Weg, SQL-Statements selbst zu bauen. Nur zu parametrisieren. Denn das ist auch kein normaler Use-Case - schliesslich weiss man normalerweise, wie die Datenbank aussieht, und baut halt entsprechende Statements.

Die einzige (aber recht aufwaendige) Alternative waere, SQLAlchemy zu verwenden und Tabellen und Spalten-Mappings zu bauen, und dann damit zu arbeiten. Es kann sein, das SA ein paar Sanity-Checks hat.

Re: SQLite3 Select

Verfasst: Donnerstag 10. März 2011, 16:43
von vankuche
Ich kenne den Inhalt meiner Datenbank leider nicht sicher, da ich nicht weiß von welcher alten Version ich aus starte.

Aber danke für die Erklärung. Ich werde dann Variante 2 verwenden.