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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Python データベース・サポート » sqlanydb を使用する Python スクリプトの作成

 

ローの挿入

ローをテーブルに挿入する最も簡単な方法は、パラメータ化されていない 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 メソッドが呼び出されます。