variablen übergabe an sql

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
mephisto23
User
Beiträge: 18
Registriert: Montag 10. September 2007, 13:47

hi leute
der anfänger hat mal wieder ne frage:
wie schaffe ich es eine varialbe an einen sql statement zu übergeben.

Code: Alles auswählen

import cx_Oracle
con = cx_Oracle.connect("***/****@******")
cur= con.cursor()

CHA_IN_VAR = "hallo"

sql =  'DECLARE CHA_IN_VAR VARCHAR2(200); BEGIN CHA_IN_VAR := NULL; TIRIS.P_PYTHON ( CHA_IN_VAR ); COMMIT; END;'

cur.execute(sql)
con.commit()
das sql statement ruft eine oracle funktion auf... soweit funktioniert es. nur die variabel wird nicht übernommen

danke für eure hilfe
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mephisto23 hat geschrieben:wie schaffe ich es eine varialbe an einen sql statement zu übergeben.
Hallo mephisto23!

Das könnte dir helfen: [wiki]Parametrisierte SQL-Queries[/wiki]

Welcher paramstyle von cx_Oracle verwendet wird, musst du selber herausfinden.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mephisto23
User
Beiträge: 18
Registriert: Montag 10. September 2007, 13:47

sorry für die blöde frage aber wie soll das gehn?
CHA_IN_VAR is ja eigentlich eine variable die ins oracel gecastet wird.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mephisto23 hat geschrieben:sorry für die blöde frage aber wie soll das gehn?
CHA_IN_VAR is ja eigentlich eine variable die ins oracel gecastet wird.
SQL-Anweisungen sind nur Text. Also musst du den Text anpassen. Und ``TIRIS.P_PYTHON`` kenne ich nicht.

Code: Alles auswählen

CHA_IN_VAR = "hallo"
sql = """
DECLARE
  CHA_IN_VAR VARCHAR2(200);
BEGIN
  CHA_IN_VAR := ?;
  ....;
END;
"""
cur.execute(sql, (CHA_IN_VAR, )) 
Dieser code setzt allerdings voraus, dass cx_Oracle das Fragezeichen (?) als Platzhalter verwendet.

Ich weiß jetzt nicht wirklich, wo da im SQL die Strichpunkte hin gehören. ;-)

Ob ein ``COMMIT`` in der SQL-Anweisung gut ist? Das sollte ja von ``conn.commit()`` erledigt werden.

Es kann natürlich sein, dass cx_Oracle das ganze etwas anders handhabt. Aber was kann ich dir wirklich nicht sagen. Ich habe damit nie etwas gemacht.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 19. November 2007, 13:21, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

@gerold: Das sieht nach einee Funktionsdefinition in der Datenbank aus, und *in* einer Funtkion, die die DB ändert ein COMMIT abzusetzen kann schon Sinn machen.
Antworten