Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere Python-Datenbankunterstützung » Python-Skripten erstellen, die sqlanydb verwenden

 

Zeilen einfügen

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.