Python情報収集器軽量レベル関係型データベースSQLiteを使用
1、引用
Pythonは軽量レベルのリレーショナル・データベースSQLiteを持っています.このデータベースはSQL言語を使用します.SQLiteはバックエンド・データベースとして、Pythonと組み合わせてウェブサイトを構築したり、pythonネットワークの爬虫類にデータを格納したりすることができます.SQLiteはまた、HTML 5やモバイル端末などの他の分野で広く応用されている.
Python標準ライブラリのsqlite 3は、データベースのインタフェースを提供します.
2,PythonがSQLiteを操作する例
次のコードは、書店に本の分類と価格を格納する簡単なリレーショナル・データベースを作成します.データベースには2つのテーブルがあります.categoryは分類を記録するために使用され、bookは本の情報を記録するために使用されます.1冊の本はある分類に属しているので、bookにはcatogoryテーブルのプライマリ・キーidを指す外部キー(foreign key)があります.
2.1データベースの作成
まず、データベースとデータベース内のテーブルを作成します.connect()を使用してデータベースに接続すると、ポインタcursorを配置してSQLコマンドを実行できます.
SQLiteのデータベースは、上のtestのようなディスク上のファイルです.dbであるため、データベース全体の移動やレプリケーションが容易になります.test.dbは最初は存在しないので、SQLiteは自動的に新しいファイルを作成します.
execute()コマンドを使用して、2つのSQLコマンドを実行し、データベース内の2つのテーブルを作成します.作成が完了したら、データベース接続を保存して切断します.
2.2データの挿入
上にデータベースとテーブルを作成し、データベースの抽象構造を確立しました.次に、同じデータベースにデータを挿入します.
データの挿入は、execute()を使用してSQL文全体を実行することもできます.SQL文のパラメータ、「?」代替記号として、後のパラメータに具体的な値を指定します.ここでは「%s」などのPythonのフォーマット文字列は使用できません.SQL注入攻撃を受けやすいからです.
executemany()の方法で複数回の挿入を実行し、複数のレコードを追加することもできます.各レコードは、上のbooksテーブルの要素など、テーブルの要素です.
2.3クエリー
クエリー文を実行すると、Pythonはクエリーで取得した複数のレコードを含むループを返します.ループ読み出しは、sqlite 3が提供するfetchone()およびfetchall()メソッドを使用して記録を読み出すこともできます.
2.4更新と削除
レコードを更新するか、レコードを削除できます.
テーブル全体を直接削除することもできます.
testを削除するとdbでは、データベース全体が削除されます.
3、まとめ
sqlite 3はSQLiteのインタフェースです.SQLiteデータベースを使いこなすには、リレーショナル・データベースの知識を学ぶ必要があります.いくつかのシナリオでは、Pythonネットワーク爬虫類は、SQLiteを使用して収集されたウェブページ情報を格納することができる.GoodSeeker爬虫類DS打数機は7.xバージョンではSQLiteがサポートされていますが、Pythonネットワーク爬虫類がDS打数機と接続されていることを考えてみてください.
4,文書修正履歴
2016-07-07:V1.0、初リリース
Pythonは軽量レベルのリレーショナル・データベースSQLiteを持っています.このデータベースはSQL言語を使用します.SQLiteはバックエンド・データベースとして、Pythonと組み合わせてウェブサイトを構築したり、pythonネットワークの爬虫類にデータを格納したりすることができます.SQLiteはまた、HTML 5やモバイル端末などの他の分野で広く応用されている.
Python標準ライブラリのsqlite 3は、データベースのインタフェースを提供します.
2,PythonがSQLiteを操作する例
次のコードは、書店に本の分類と価格を格納する簡単なリレーショナル・データベースを作成します.データベースには2つのテーブルがあります.categoryは分類を記録するために使用され、bookは本の情報を記録するために使用されます.1冊の本はある分類に属しているので、bookにはcatogoryテーブルのプライマリ・キーidを指す外部キー(foreign key)があります.
2.1データベースの作成
まず、データベースとデータベース内のテーブルを作成します.connect()を使用してデータベースに接続すると、ポインタcursorを配置してSQLコマンドを実行できます.
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つのテーブルを作成します.作成が完了したら、データベース接続を保存して切断します.
2.2データの挿入
上にデータベースとテーブルを作成し、データベースの抽象構造を確立しました.次に、同じデータベースにデータを挿入します.
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()の方法で複数回の挿入を実行し、複数のレコードを追加することもできます.各レコードは、上のbooksテーブルの要素など、テーブルの要素です.
2.3クエリー
クエリー文を実行すると、Pythonはクエリーで取得した複数のレコードを含むループを返します.ループ読み出しは、sqlite 3が提供するfetchone()およびfetchall()メソッドを使用して記録を読み出すこともできます.
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)
2.4更新と削除
レコードを更新するか、レコードを削除できます.
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では、データベース全体が削除されます.
3、まとめ
sqlite 3はSQLiteのインタフェースです.SQLiteデータベースを使いこなすには、リレーショナル・データベースの知識を学ぶ必要があります.いくつかのシナリオでは、Pythonネットワーク爬虫類は、SQLiteを使用して収集されたウェブページ情報を格納することができる.GoodSeeker爬虫類DS打数機は7.xバージョンではSQLiteがサポートされていますが、Pythonネットワーク爬虫類がDS打数機と接続されていることを考えてみてください.
4,文書修正履歴
2016-07-07:V1.0、初リリース