ローをテーブルに挿入する最も簡単な方法は、パラメータ化されていない INSERT 文を使用することです。この方法では、値は SQL 文の一部として指定されます。新しい文が新しいローごとに構築されて実行されます。前の例でみたように、SQL 文を実行するにはカーソルが必要です。
次のサンプル・プログラムは、2 人の新規顧客をサンプル・データベースに挿入します。切断される前に、データベースに対してトランザクションをコミットします。
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() |
パラメータ化された INSERT 文を使用してローをテーブルに挿入する方法もあります。この場合、疑問符が値のプレースホルダとして使用されます。executemany メソッドは、ローのセットのメンバごとに INSERT 文を実行するために使用します。新しいローの値は、1 つの引数として executemany メソッドに渡されます。
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() |
どちらのサンプル・プログラムも、ローのデータをテーブルに挿入する方法として適切であるようですが、いくつかの理由で後者の方が優れています。入力を要求されてデータ値が取得された場合、最初のサンプル・プログラムでは SQL 文を含む不良データが挿入される可能性があります。最初のサンプル・プログラムでは、execute メソッドはテーブルに挿入されるローごとに呼び出されます。2 番目のサンプル・プログラムでは、すべてのローをテーブルに挿入するときに一度だけ executemany メソッドが呼び出されます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |