Die einfachste Möglichkeit, Zeilen in eine Tabelle einzufügen, ist die Verwendung einer INSERT-Anweisung ohne Parameter, bei der die Werte als Teil der SQL-Anweisung angegeben werden. Für jede neue Zeile wird eine neue Anweisung erstellt und ausgeführt. Wie im vorherigen Beispiel ist ein Cursor erforderlich, um SQL-Anweisungen auszuführen.
Das folgende Beispielprogramm fügt zwei neue Kunden in die Beispieldatenbank ein. Bevor die Verbindung getrennt wird, werden die Transaktionen in der Datenbank festgeschrieben.
import sqlanydb # Create a connection object, then use it to create a cursor con = sqlanydb.connect( userid="DBA", pwd="sql" ) cursor = con.cursor() cursor.execute("DELETE FROM Customers WHERE ID > 800") rows = ((801,'Alex','Alt','5 Blue Ave','New York','NY', 'USA','10012','5185553434','BXM'), (802,'Zach','Zed','82 Fair St','New York','NY', 'USA','10033','5185552234','Zap')) # Set up a SQL INSERT parms = ("'%s'," * len(rows[0]))[:-1] sql = "INSERT INTO Customers VALUES (%s)" % (parms) print sql % rows[0] cursor.execute(sql % rows[0]) print sql % rows[1] cursor.execute(sql % rows[1]) cursor.close() con.commit() con.close() |
Eine alternative Methode bietet die Verwendung einer INSERT-Anweisung mit Parametern, in der Fragezeichen als Platzhalter für Werte eingesetzt werden. Die Methode executemany wird verwendet, um für jedes Mitglied der Zeilengruppe eine INSERT-Anweisung auszuführen. Die neuen Zeilenwerte werden als ein einziges Argument der executemany-Methode bereitgestellt.
import sqlanydb # Create a connection object, then use it to create a cursor con = sqlanydb.connect( userid="DBA", pwd="sql" ) cursor = con.cursor() cursor.execute("DELETE FROM Customers WHERE ID > 800") rows = ((801,'Alex','Alt','5 Blue Ave','New York','NY', 'USA','10012','5185553434','BXM'), (802,'Zach','Zed','82 Fair St','New York','NY', 'USA','10033','5185552234','Zap')) # Set up a parameterized SQL INSERT parms = ("?," * len(rows[0]))[:-1] sql = "INSERT INTO Customers VALUES (%s)" % (parms) print sql cursor.executemany(sql, rows) cursor.close() con.commit() con.close() |
Wenngleich beide Beispiele gleichermaßen geeignete Verfahren zum Einfügen von Zeilendaten in eine Tabelle zu sein scheinen, ist das zweite Beispiel aus verschiedenen Gründen vorzuziehen. Wenn die Datenwerte durch Eingabeaufforderungen für die Dateneingabe erhalten werden, ist das erste Beispiel anfällig für das Eindringen von schädlichen Daten, möglicherweise auch von SQL-Anweisungen. Im ersten Beispiel wird für jede in die Tabelle einzufügende Zeile die execute-Methode aufgerufen. Im zweiten Beispiel wird die executemany-Methode nur einmal aufgerufen, und alle Zeilen werden gleichzeitig in die Tabelle eingefügt.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |