本文へ移動
カテゴリ

Webマーケ

Webマーケの記事すべてSEOサイト運営データマネジメントビジネス・マーケ概論広告

インタビュー

インタビューの記事すべて

おすすめサービス

おすすめサービスの記事すべて

おすすめ勉強法

おすすめ勉強法の記事すべて

おすすめ書籍

おすすめ書籍の記事すべて

データサイエンス

データサイエンスの記事すべてデータ解析品質工学多変量解析機械学習生成AI統計学

プログラミング

プログラミングの記事すべてPythonRSQLプログラミングスクール

スタビジについて

記事一覧運営者情報

【DB作成】PythonのSqlite3を使ってデータベースを操作する方法を見ていこう!

目次
ウマたんウマたん

当サイト【スタビジ】の本記事では、PythonのSqlite3を使ってデータベース操作をおこなっていきます。PythonでSQL扱えると便利!もちろんPythonだけでなくSQLの知識も必要になるので注意してくださいねー!

こんにちは!

データサイエンティストでありながら最近はWeb開発に没頭しているウマたん(@statistics1012)です。

Pythonでデータベースを作成して操作することができるのをご存知でしょうか?

もちろんSQLの知識もある程度必要ですが、Pythonのsqlite3というライブラリを使えば簡易的にデータベース使えちゃいます。

是非、マスターしておきましょう!

ウマたんウマたん

PythonとSQLを用いてデータベース作成・操作していこう!

この記事ではPythonのsqlite3を用いてデータベースを作成する方法について見ていきます。

Pythonでデータベースを扱えるsqlite3とは

sqlite3はpythonでデータベースを操作するライブラリです。

基本的な記述方法はSQLが分かっていれば問題ありません。ちなみにMySQLをPythonで使う方法もあります。

sqlite3のリファレンスに関して詳細は以下のURLをご覧ください!

https://docs.python.org/ja/3.5/library/sqlite3.html

Python Sqlite3の使用方法

Sqlite3で簡単にデータベースを作成し、テーブルにデータを格納し抽出してみます。

コードは以下のようになっています。

import sqlite3

dbname = 'trains.db'

conn=sqlite3.connect(dbname)
c = conn.cursor()

# executeメソッドでSQL文を実行する
create_table = 'create table toukeilab (id value,name verchar)'
c.execute(create_table)

# SQL文に値をセットする場合は,Pythonのformatメソッドなどは使わずに,
# セットしたい場所に?を記述し,executeメソッドの第2引数に?に当てはめる値をタプルで渡す.
sql = 'insert into toukeilab (id, name) values (?,?)'
namelist = (1, "uma")
c.execute(sql, namelist)

conn.commit()

select_sql = 'select * from toukeilab'

c.execute(select_sql)
result=c.fetchone()

conn.close()

print(result)
ロボたんロボたん

うわ!たくさんコードがあって理解が難しそう、、、

ウマたんウマたん

大丈夫!順番に説明していくよ!

データベースを作成

import sqlite3

dbname = 'trains.db'

conn=sqlite3.connect(dbname)
c = conn.cursor()

こちらの部分でデータベースを作成しています。conn.cursor()はデータベースに接続するためのおまじないだと思っていただければ問題ございません。

テーブルを作成

# executeメソッドでSQL文を実行する
create_table = '''create table toukeilab (id value,name verchar)'''
c.execute(create_table)

こちらで、テーブルを作成しています。テーブル上の列名を型と同時に定義します。

この時、テーブルが既に存在する場合エラーを起こしてしまうので、もしテーブルが存在する場合はテーブルを作成しないという処理を入れる必要があります。

また複数のSQL文処理を行う場合は、executeではなくexecutescriptを使う必要があります。

これらに関しては後述します。

テーブルにデータを格納

sql = 'insert into toukeilab (id, name) values (?,?)'
namelist = (1, "uma")
c.execute(sql, namelist)

conn.commit()

こちらでテーブルにデータを格納していきます。

conn.commit()ではデータの格納を保存します。

データを抽出

select_sql = 'select * from toukeilab'

c.execute(select_sql)
result=c.fetchone()

conn.close()

print(result)

こちらの部分で格納したデータを抽出していきます。

fetchoneではデータを1行抽出します。

conn.close()では、データベースへの接続を止めます。

これで簡単なデータベース作成・操作方法は終了。

続いて他のコードと組みあわせて、少し応用した実装を行っていきましょう!

Pythonで応用的なコードを実装

今回実装したいのは、ある記事情報をスクレイピングで抽出しそれらの類似度を計算した後、抽出に使ったURLと類似度をデータベースに格納して抽出するというもの。

実際にはデータベースを経由する必要はありませんが、勉強のためSqlite3を使ってみましょう。

ちなみにスクレイピングと類似度算出に関しては以下の記事でまとめているので参考にしてみてください。

コードは以下のようになっています。

import requests
from bs4 import BeautifulSoup
import sys
import MeCab
from time import sleep
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
import sqlite3


def geturl(urls):
    all_text=[]
    for url in urls:
        r=requests.get(url)
        c=r.content
        soup=BeautifulSoup(c,"html.parser")
        article1_content=soup.find_all("p")
        temp=[]
        for con in article1_content:
            out=con.text
            temp.append(out)
        text=''.join(temp)
        all_text.append(text)
        sleep(1)
    return all_text

def mplg(article):
    word_list = ""
    m=MeCab.Tagger()
    m1=m.parse (text)
    for row in m1.split("\n"):
        word =row.split("\t")[0]#タブ区切りになっている1つ目を取り出す。ここには形態素が格納されている
        if word == "EOS":
            break
        else:
            pos = row.split("\t")[1]#タブ区切りになっている2つ目を取り出す。ここには品詞が格納されている
            slice = pos[:2]
            if slice == "名詞":
                word_list = word_list +" "+ word
    return word_list

def tfidf(word_list):
    docs = np.array(word_list)#Numpyの配列に変換する
    #単語を配列ベクトル化して、TF-IDFを計算する
    vecs = TfidfVectorizer(
                token_pattern=u'(?u)\\b\\w+\\b'#文字列長が 1 の単語を処理対象に含めることを意味します。
                ).fit_transform(docs)
    vecs = vecs.toarray()
    return vecs


def cossim(v1,v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

##データベースの
class Db():
    def __init__(self,dbname):
        self.db=dbname

    def db_input(self,article):
        #値をデータベースに格納
        conn=sqlite3.connect(self.db)
        c = conn.cursor()
        # executeメソッドでSQL文を実行する
        create_table = '''DROP TABLE IF EXISTS article_match;
                        create table article_match (text_1 verchar,text_2 verchar,match_rate double)'''
        c.executescript(create_table)
        # セットしたい場所に?を記述し,executeメソッドの第2引数に?に当てはめる値を
        # タプルで渡す.
        sql = 'insert into article_match (text_1, text_2, match_rate) values (?,?,?)'
        c.execute(sql, article)
        conn.commit()
        c.close()
        conn.close()

    def db_output(self):
        #データベースから値を抽出
        conn=sqlite3.connect(self.db)
        c = conn.cursor()
        select_sql = 'select * from article_match'
        c.execute(select_sql)
        match_rate=c.fetchone()
        conn.commit()
        c.close()
        conn.close()
        return match_rate

word_list=[]
url=["https://toukei-lab.com/conjoint","https://toukei-lab.com/correspondence"]
texts=geturl(url)
for text in texts:
    word_list.append(mplg(text))
    
vecs=tfidf(word_list)
match_rate=cossim(vecs[1],vecs[0])
article = (url[0], url[1], match_rate)
dbname = 'article.db'
db=Db(dbname)
db.db_input(article)
article=db.db_output()

article[2]

前半部分ではスクレイピング・形態素解析・類似度算出を行う関数を定義しています。

その後データベース格納から抽出まで行うクラスを定義し、その中で関数を定義しています。

基本的に先ほどと変わりませんが、テーブルが既に存在する場合は消去し新たにテーブルを定義するSQL文を作成しています。

そのSQL文を実行する際はexecutescriptを使っています。

各URLに紐づくテキストの類似度をデータベースに蓄積していくなどを行うことが可能ですね!

Pythonでデータベース操作 まとめ

ここまでご覧いただきありがとうございます!

本記事では、Pythonでデータベースを操作する方法について見てきました。

この記事では簡易的なSQL文についてのみ見てきましたが、SQL文を使えば様々なデータを作成・抽出・加工することができます。

以下の記事でSQL文の簡単な構文についてまとめていますのでよければご覧ください!

SQLで覚えるべき書き方はSELECT文だけ!SELECT文とWHERE句・集計関数をマスターしよう!当サイト【スタビジ】の本記事では、SQLでマスターしておきたい基本的な構文SELECT文について見ていきます!SQLでは、基本SELECT文ができて後はそれにWHERE句や集計関数そして他テーブルのJOINなどが出来れば不自由しません!

Pythonはデータ解析やスクレイピングそしてWebアプリケーション作成まで出来る幅広いプログラミング言語!

Pythonでできることは以下にまとめています!

【初心者向け】Pythonでできること7選!サンプルコードをまじえて解説!当サイト【スタビジ】本記事では、Pythonでできることを7つまとめていきます!!Pythonで何ができるのか分からない状況から深い理解にもっていきますよー!実際にPythonでの実装例や勉強方法も取り上げているのでぜひご自分の環境で手を動かして実装してみてくださいね!

また以下の記事で初心者がPythonを習得する方法・SQLを習得する方法についてまとめていますのでよければご覧ください!

【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。 SQLを最速でマスターできる勉強方法とオススメ本・サイト当サイト【スタビジ】の本記事では、SQLを勉強するのにオススメな本と勉強法についてまとめていきます!SQLはデータサイエンスの基本であり必ずマスターしておかなくてはいけない言語です。早い段階から手を動かすことで理解が深まりますよー!

また、データベース・データマネジメント周りの知識を体系的に付けたい人は以下の記事もしくはUdemy講座でまとめていますので是非見てみてください!

データマネジメントとは?DMBOK(ディンボック)に沿ってまとめておこう!当サイト【スタビジ】の本記事では、データ活用において非常に重要であるデータマネジメントについてDMBOKの考え方に沿ってまとめていきます。データマネジメントを疎かにしてしまうと、せっかくのデータも意味をなさなくなりますので必ずおさえておきましょう!

【初学者向け】データマネジメント入門!DX推進やAI 導入を支える重要な要素をDMBOKに沿ってみていこう!

Udemy データマネジメント講座

【オススメ度】
【時間】 1.5時間

自分で言うのもなんですが、データマネジメントについてDMBOKに沿ってこれでもかというくらい分かりやすくまとめているつもりです!

\30日以内なら返金無料/このコースを見てみる
スポンサーリンク

ウマたんスタビジ編集長

大学院は理系の統計科学研究室で、ベイズ統計学・時系列分析・異常検知を研究。日系・外資の消費財メーカーのデータサイエンティストを経て、現在は会社を経営しながらデータサイエンティストとして働いています。

スタビジアカデミー

読んだ内容を、スタアカの「SQL基礎」コースで身につける

データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。最初のレッスンは無料で見られます。