Seite 1 von 1
Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 20:19
von erdmulch
Hallo zusammen,
ich würde gerne eine neue Tabelle erstellen. was auch sehr gut mit dem unten aufgeführten Befehl funktioniert!
nun würde ich gerne das der TabellenNamen Variable ist
sprich, ich würde gerne eine Variable Defininieren String = 'TabellenName'
kann mir jemand sagen wie man sowas macht?
wie kann ich das sql Kommando so ausklammern, das ich eine Variable definieren kann
Code: Alles auswählen
sql = """
-- Tabelle erstellen
CREATE TABLE TabellenNamen (
id SERIAL PRIMARY KEY,
Anrede text
) WITHOUT OIDS;
"""
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 20:21
von deets
Stichwort ist String-Formatierung, gibt's hier hunderte Beispiele im Forum. Oder hier die offizielle Doku:
http://docs.python.org/library/stdtypes ... formatting
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 20:23
von BlackJack
@erdmulch: Das geht mit Zeichenkettenformatierung. Du musst allerdings aufpassen, dass die Daten für den Tabellennamen aus einer vertrauenswürdigen Quelle kommen. Und so etwas zu machen beziehungsweise machen zu wollen ist IMHO ein „code smell”. In normalen Programmen gibt es keine variablen Tabellennamen.
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 21:21
von erdmulch
also mit dem % Modulo operator funktioniert es nicht:
A = 'Test'
'%A'
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 21:26
von sparrow
Was hast du denn versucht? (Code)
Was ist passiert? (Fehlermeldung)
Was hast du erwartet?
All das ist nötig um dir zu helfen, nichts von dem kann ich aus deinem letzten Post erkennen.
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 21:32
von erdmulch
Code: Alles auswählen
def create_table(conn):
cur = conn.cursor()
A = 'test';
sql = """
-- Tabelle erstellen
CREATE TABLE %A (
id SERIAL PRIMARY KEY,
Anrede text
) WITHOUT OIDS;
"""
# SQL-Anweisungen ausführen
cur.execute(sql)
conn.commit()
Hier die Fehlermeldung dazu:
psycopg2.ProgrammingError: FEHLER: Syntaxfehler bei »%«
LINE 3: CREATE TABLE %A (
will nur damit die tabelle "test" heißt!
aber mit dem modulo kommando geht das nicht
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 21:35
von deets
Du musst schon die Doku richtig lesen.
Code: Alles auswählen
tablename = 'foo'
sql = "CREATE %(table)s (id ...)" % dict(table=tablename)
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 21:42
von erdmulch
was hat das jetzt mit einem dictionary zu tun?
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 22:15
von deets
Hast du es ausprobiert? Dann klaert sich deine Frage vielleicht von gaaaaanz alleine...
Re: Variable beim Tabellen erstellen
Verfasst: Mittwoch 19. September 2012, 22:17
von cofi
deets gibt dem Platzhalter einen Namen, darum braucht er ein dict, anstelle von `%(table)s` kannst du auch `%s` verwenden und brauchst das nicht, zu lasten der Lesbarkeit.
Wenn dir das aber nicht klar ist, solltest du nochmal die Doku lesen, das erste Beispiel dort nutzt es sogar.
Re: Variable beim Tabellen erstellen
Verfasst: Donnerstag 20. September 2012, 11:44
von sparrow
Oder einfach den Inhalt der Dokumentation lesen, die deets 2. Post des Threads zielisicher verlinkt hat.