ホームページ >php教程 >PHP视频 >Python を使用した SQLite データベース操作

Python を使用した SQLite データベース操作

高洛峰
高洛峰オリジナル
2016-11-23 11:35:241788ブラウズ

簡単な紹介

SQLite データベースは非常に小さな組み込みオープンソース データベース ソフトウェアです。つまり、独立したメンテナンス プロセスはなく、すべてのメンテナンスはプログラム自体によって行われます。これは、ACID に準拠したリレーショナル データベース管理システムであり、多くの組み込み製品で使用されており、組み込みデバイスではわずか数 100 K のメモリしか必要としません。十分。 Windows/Linux/Unix などの主流のオペレーティング システムをサポートし、Tcl、C#、PHP、Java などの多くのプログラミング言語や 2 つのオープンな ODBC インターフェイスと組み合わせることができます。 Mysql や PostgreSQL のソースの世界では、有名なデータベース管理システムよりも処理速度が高速です。 SQLite の最初のアルファ バージョンは 2000 年 5 月に誕生しました。それから 10 年が経ち、SQLite のバージョンもリリースされました。

インストールと使用方法

1. Python SQLITE データベース モジュールをインポートします

Python2.5 以降、SQLite3 が組み込まれ、組み込みモジュールになります。これにより、インストールの手間が省かれ、インポートするだけで済みます。 ~

import sqlite3

2. データベースを作成/開く

指定したデータベースが存在する場合は、データベースを直接開きます。 1つを選択して開きます。

cx = sqlite3.connect("E:/test.db")

メモリ内にデータベースを作成することもできます。

con = sqlite3.connect(":memory:")

3. データベース接続オブジェクト

データベースを開くときに返されるオブジェクト cx は、次の操作を持つことができます:

commit( )- - トランザクションの送信

rollback()-- トランザクションのロールバック

close()-- データベース接続を閉じる

cursor()-- カーソルを作成する

commit() については、isolation_level 分離レベルがデフォルトの場合、このコマンドはデータベース操作に必要です。また、isolation_level=None を設定して自動送信モードに変更することもできます。

4. カーソルを使用してデータベースをクエリする

データベースをクエリし、クエリ オブジェクトを取得するには、カーソル オブジェクト SQL ステートメントを使用する必要があります。 次の方法でカーソルを定義します。

cu=cx.cursor()

カーソルオブジェクトには次の操作があります:

execute()-- SQL ステートメントを実行します

executemany-- 複数の SQL ステートメントを実行します

close()-- カーソルを閉じます

fetchone() -- 結果から 1 つのレコードをフェッチし、カーソルを次のレコードにポイントします

fetchmany() -- 結果から複数のレコードをフェッチします

fetchall() -- 結果からすべてのレコードをフェッチします

scroll ()--カーソルスクロール

1. テーブルの作成

cu.execute("create table category (id integer priority key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

上記ステートメント カタログと呼ばれるテーブルが作成されます。このテーブルには主キー ID、PID、名前が含まれます。名前は重複できず、ニックネームはデフォルトで NULL になります。

2. データの挿入

次のような記述は避けるように注意してください:

# これは絶対に行わないでください -- 安全でない場合、インジェクション攻撃が発生します pid=200c.execute("... where pid = '%s' " % pid)

正しいアプローチは次のとおりです。t が単一の値の場合、タプルは不変であるため、t=(n,) の形式にする必要があります。

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]: cx.execute("カタログ値に挿入(?,? ,? ,?)", t)

単に 2 行のデータを挿入するだけですが、それは送信された後にのみ有効になることに注意してください。コミットおよびロールバック操作を実行するためにデータベース接続オブジェクト cx を使用します。

cx. commit()

3. Query

cu.execute("select * from category")

クエリされたデータを抽出するには、次のようなカーソルのフェッチ関数を使用します。 [10]: cu .fetchall() Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

If cu.fetchone () を使用し、最初にリストの最初の項目を返し、再度使用すると 2 番目の項目を返します。

を変更します。 [12]: cu.execute(" update category set name='Boy' where id = 0") In [13]: cx.commit()

データを変更してから送信してください

5. 削除

cu.execute("カタログから削除where id = 1") cx .commit()

6. 中国語

を使用するには、IDE またはシステムのデフォルトのエンコーディングが utf-8 であることを確認し、中国語の前に u

を追加してください。

x=u'鱼' cu.execute("更新カタログセット名=? ここでid = 0",x) cu.execute("カタログから * を選択") cu.fetchall() [(0, 10, u' u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

中国語フォントを表示したい場合は、各文字列を順番に出力する必要があります

[ 26 ]: cu.fetchall() の項目: ....: 項目の要素: ....: 印刷要素、 ....: 印刷 ....: 0 10 鱼 Yu 1 20 cba Xu

7.Row 型

Row は、メモリ オーバーヘッドをほとんど発生させずに、インデックス ベースおよび名前ベースの大文字と小文字を区別した列へのアクセスを提供します。 元のテキストは次のとおりです。

sqlite3.Row は、メモリ オーバーヘッドをほとんど発生させずに、インデックス ベースと大文字小文字を区別しない名前ベースの両方の列へのアクセスを提供します。おそらく、独自のカスタム辞書ベースのアプローチよりも優れています。 db_row ベースのソリューション。

Row オブジェクトの詳細な紹介

class sqlite3.Row

A Row インスタンスは、Connection オブジェクトの高度に最適化された row_factory として機能し、ほとんどの機能でタプルを模倣しようとします。

をサポートします。列名とインデックス、反復、表現、等価性テスト、および len() によるマッピング アクセス。

2 つの Row オブジェクトにまったく同じ列があり、そのメンバーが等しい場合、それらは等しいと比較されます。

バージョン 2.6 で変更: 反復とquality (hashability ).

keys()

このメソッドは、クエリの直後に、Cursor.description の各タプルの最初のメンバーを返します。

バージョン 2.6 の新機能です。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。