[Python-de] Formatierung von SQL-Statements
Stefan Schwarzer
sschwarzer at sschwarzer.net
Die Jul 13 21:02:39 CEST 2004
Hallo Holger,
On Fri, 2004-07-09 13:48:11 +0100, Holger Duerer wrote:
> >>>>> "MU" == Mathias Uebel <mathias.uebel at meeloon.de> writes:
>
> MU> Gerhard Häring wrote:
> MU> [...]
> MU> Vielen Dank für die Hilfe. Jetzt habe ich das:
> MU> Um die Spaltenwerte mitzuliefern, habe ich mich für ein Dictionary
> MU> entschieden.
>
> MU> def SQLInsert( self, table, dict ): columns = ",
> MU> ".join(dict.keys()) values = [self.mytime] + dict.values()
> MU> placeholders = ", ".join(["%s"] * (len(dict)+1))
> MU> sql = """INSERT INTO %(table)s (id,timestamp, %(columns)s)
> MU> VALUES (NULL,%(placeholders)s)""" % locals()
> MU> try:
> MU> self.cu.execute(sql,values)
> MU> self.cx.commit()
>
> MU> Das ist sehr schön kurz und ich kann gut flexibel bleiben.
man sollte möglichst nicht Namen verwenden, die bereits im
Builtin-Namespace verwendet werden (hier: dict in der Parameterliste
von SQLInsert).
Python 2.3.4 (#2, Jul 11 2004, 20:47:46)
[GCC 3.3.3 [FreeBSD] 20031106] on freebsd5
Type "help", "copyright", "credits" or "license" for more information.
>>> dict
<type 'dict'>
>>> dict([(1, 2), (3, 4)])
{1: 2, 3: 4}
>>> dict = 5678
>>> dict
5678
>>> del dict
>>> dict([(1, 2), (3, 4)])
{1: 2, 3: 4}
>>> dict
<type 'dict'>
Besonders "interessant" wird es, wenn du dict _zusätzlich_ in seiner
Bedeutung als Builtin-Typ verwenden willst. ;-)
Entsprechendes gilt für für die beliebten Bezeichner list und vars. :-)
> b) bei den Spaltennamen stellst Du 'id' und 'timestamp' (ist das
> portabel oder würden da andere DBs drüber stolpern, weil das ein
> Datentyp ist?)
Soweit ich weiß, ist es gültiges SQL, aber man sollte es m. E. eher vermeiden.
Viele Grüße
Stefan