ホームページ  >  記事  >  バックエンド開発  >  Python標準ライブラリ14データベース(sqlite3)

Python標準ライブラリ14データベース(sqlite3)

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

Python には軽量のリレーショナル データベース SQLite が付属しています。このデータベースはSQL言語を使用しています。バックエンド データベースとして、SQLite を Python とともに使用して、Web サイトを構築したり、データ ストレージを必要とするツールを作成したりできます。 SQLite は、HTML5 やモバイル端末などの他の分野でも広く使用されています。 Python 標準ライブラリの sqlite3 は、このデータベースへのインターフェイスを提供します。

書店の本のカテゴリと価格を保存するための簡単なリレーショナル データベースを作成します。データベースには 2 つのテーブルが含まれています。カテゴリは分類を記録するために使用され、ブックは特定の書籍に関する情報を記録するために使用されます。本は特定のカテゴリに属しているため、本にはカテゴリ テーブルの主キー ID を指す外部キーがあります。

Python標準ライブラリ14データベース(sqlite3)

データベースを作成する

まずデータベースとデータベース内のテーブルを作成します。 connect() を使用してデータベースに接続した後、カーソルを置くことで SQL コマンドを実行できます。

# By Vamei
import sqlite3

# test.db is a file in the working directory.
conn = sqlite3.connect("test.db")

c = conn.cursor()

# create tables
c.execute('''CREATE TABLE category
      (id int primary key, sort int, name text)''')
c.execute('''CREATE TABLE book
      (id int primary key, 
       sort int, 
       name text, 
       price real, 
       category int,
       FOREIGN KEY (category) REFERENCES category(id))''')

# save the changes
conn.commit()

# close the connection with the database
conn.close()

SQLite のデータベースは、上記の test.db などのディスク上のファイルであるため、データベース全体を簡単に移動またはコピーできます。 。 test.db はそもそも存在しないため、SQLite が自動的に新しいファイルを作成します。

execute() コマンドを使用して 2 つの SQL コマンドを実行し、データベースに 2 つのテーブルを作成しました。作成後、保存してデータベースから切断します。

データの挿入

上記でデータベースとテーブルが作成され、データベースの抽象構造が確立されました。以下は同じデータベースにデータを挿入します:

# By Vamei

import sqlite3

conn = sqlite3.connect("test.db")
c    = conn.cursor()

books = [(1, 1, 'Cook Recipe', 3.12, 1),
            (2, 3, 'Python Intro', 17.5, 2),
            (3, 2, 'OS Intro', 13.6, 2),
           ]

# execute "INSERT" 
c.execute("INSERT INTO category VALUES (1, 1, 'kitchen')")

# using the placeholder
c.execute("INSERT INTO category VALUES (?, ?, ?)", [(2, 2, 'computer')])

# execute multiple commands
c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)

conn.commit()
conn.close()

データの挿入では、execute() を使用して完全な SQL ステートメントを実行することもできます。 SQL ステートメントのパラメータには、置換記号として「?」を使用し、後続のパラメータに特定の値を指定します。 「%s」などの Python 形式文字列は、SQL インジェクション攻撃に対して脆弱であるため、ここでは使用できません。

executemany() メソッドを使用して複数の挿入を実行し、複数のレコードを追加することもできます。各レコードは、上の書籍テーブルの要素など、テーブル内の要素です。

Query

クエリ ステートメントを実行すると、Python はクエリによって取得された複数のレコードを含むルーパーを返します。ループで読み取ることも、sqlite3 が提供する fetchone() および fetchall() メソッドを使用してレコードを読み取ることもできます:

# By Vamei

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()

# retrieve one record
c.execute('SELECT name FROM category ORDER BY sort')
print(c.fetchone())
print(c.fetchone())

# retrieve all records as a list
c.execute('SELECT * FROM book WHERE book.category=1')
print(c.fetchall())

# iterate through the records
for row in c.execute('SELECT name, price FROM book ORDER BY sort'):
    print(row)

更新と削除

レコードを更新または削除できます:

# By Vamei

conn = sqlite3.connect("test.db")
c = conn.cursor()

c.execute('UPDATE book SET price=? WHERE id=?',(1000, 1))
c.execute('DELETE FROM book WHERE id=2')

conn.commit()
conn.close()

直接削除することもできます テーブル全体:

c.execute('DROP TABLE book')

test.db が削除されると、データベース全体が削除されます。

概要

sqlite3 は SQLite への単なるインターフェイスです。 SQLite データベースを上手に使いたい場合は、リレーショナル データベースに関する知識をさらに学ぶ必要があります。


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