簡単な紹介
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. Querycu.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 の新機能です。