ODBC を使用したデータの作成

このチュートリアルでは、ODBC を使用して、Actian Zen データベースで作成コマンドを実行する方法を学習します。ZENDB データベースにテーブルを作成し、そのテーブルにレコードを挿入します。

右側の「このページの内容」では当ページで扱うトピックを示しています。

テーブルの作成

現在、独自の ZENDB データベースがあります。チュートリアルの残り部分では、このデータベースを扱います。

現在、ZENDB データベースは空です。この手順では、テーブルを作成します。

まず、前の手順で説明した接続文字列を使用して ZENDB に接続します。

conn_str = "Driver={Pervasive ODBC Interface};Server=Localhost;DBQ=ZENDB"
db = pyodbc.connect(conn_str)

カーソルを作成します。

c = db.cursor()

次に、カーソルの execute メソッドと SQL CREATE TABLE コマンドを使用して、テーブルを作成します。

c.execute("CREATE TABLE Students (Id IDENTITY, Name CHAR(32), Account_Balance INT DEFAULT 0)")

execute メソッドは、基本的には SQL ステートメントをデータベースに渡します。この場合、SQL ステートメントは次のとおりです。

CREATE TABLE Students (Id IDENTITY, Name CHAR(32), Account_Balance INT DEFAULT 0)

テーブルを作成するには、次を指定する必要があります。

  • テーブル名(Students)
  • 列名の一覧(Id、Name、Account_Balance)
  • 各列の対応するデータ型

この例では、次のようになります。

  • Id 列のデータ型は IDENTITY です。これは、新しいエントリを追加するたびに設定する必要のない、自動インクリメントする整数値です。
  • Name 列のデータ型は CHAR(32) です。32 文字までの文字列を格納します。
  • Account Balance 列のデータ型は INT DEFAULT 0 です。これは、Account_Balance は整数(INT)であり、値を設定しなかった場合、この列のデフォルト値は 0 になることを示しています。

Zen Control Center に戻り、必要であれば F5 キーを押して更新して、新しい Students テーブルを表示します。

テーブルをダブルクリックすると、自動的に SELECT * が実行され、結果が表示されます。列の情報を調べると、CREATE TABLE ステートメントで指定した 3 つの列が見えます。

使用可能なデータ型の詳細については、ドキュメントの Zen で使用できるデータ型を参照してください。

データベースを作成するときの一般的な規則がいくつかあります。

  • データベースには、一意の名前を付ける必要があります。
  • テーブルには、同じデータベース内で一意の名前を付ける必要があります。
  • 列には、各テーブル内で一意の名前を付ける必要があります。
  • テーブルに列 ID フィールドは必要ありませんが、このチュートリアルでは、ID フィールドの使用と動作を示すために使用しています。

テーブルへのデータの挿入

テーブルを作成したので、次はそのテーブルにレコードを挿入します。

再度、カーソルの execute メソッドを使用しますが、今回は SQL INSERT コマンドを渡して、レコードを追加します。

c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('John', 100)")
c.commit()

これは、基本的な SQL INSERT 操作です。レコードを追加するテーブル、含める列、およびそれらの列に格納する特定の値を指定します。

この例では、Id 列は IDENTITY データ型であるため、自動インクリメントします。

レコードを挿入後、その変更をコミットする必要があります。コミットしないと、レコードは一時データのままであり、データベースに追加されません。

コマンドを実行したら、Zen Control Center に戻ってテーブルを開き、F9 キーを押してもう一度 SELECT * クエリを実行します。

Students テーブルは以下のように表示されます。

Id は、増分値として自動的に 1 に設定されており、Name および Account_Balance は、それらに設定した値になっていることがわかります。Account_Balance の設定を省略した場合には、デフォルト値の 0 が使用されることに留意してください。

今後のチュートリアルでは、手順ごとに Zen Control Center に戻って確認することはしません。しかし今までに、作業を再確認したい場合の基本的な機能の実行方法を見てきました。

次に、以降のチュートリアルで使用する目的のデータを持つように、いくつかのレコードを追加しましょう。

c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('Mary', 200)")
c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('Bob', 300)")
c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('Amy', 400)")
c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('Sam', 500)")
c.execute("INSERT INTO Students(Name, Account_Balance) VALUES ('Jill', 600)")
c.commit()

これらのコマンドにより、テーブルにさらに 5 件のレコードが挿入され、変更がコミットされます。これで、合わせて 6 件のレコードがあるはずです。

変更のコミットと autocommit(自動コミット)

接続文字列に autocommit オプションを設定できることにも注目しましょう。

db = pyodbc.connect(conn_str, autocommit=True)

autocommit が true の場合は、execute() メソッドを実行したときにすべての変更が自動的にコミットされます。commit() メソッド(上の例の c.commit())を使用する必要がなくなります。

残りのチュートリアルでは、例の中に c.commit() コマンドを入れていません。

詳細: