Day20.python操作データベース

Python操作MySQLモジュール

mysql-connector-pythonはMySQLによって公式に提供されています

PyMySQLはpython2とpython3をサポートします

MySQLdbはpython2のみをサポートします

このコースでは、次のことが必要です。MySQLをインストールし、ケースのアカウントパスワードを自分のものに変更します(ケースのアカウントパスワードはrootです)。

PyMySQLモジュールをインストールします

コマンドライン:pip install pymysql

PyMySQLモジュールのインポート

import pymysql

接続されたオブジェクトを取得

conn=pymysql.connect(host=' ',user=' ',password=' ',database=' ',charset='utf-8')

カーソルオブジェクトを取得して、カーソルを介してデータをCRUDしますc

トランザクションのコミット

conn.commit()

カーソルを閉じる

c.close()

接続を閉じる

conn.close()

詳細なケース####

データベースを作成

''' データベースを作成する'''import pymysql
# データベースを作成する必要があるため、データベース接続を開きます。データベースを指定する必要はありません。
conn = pymysql.connect('localhost',user ="root",passwd ="root")
# カーソルを取得
cursor=conn.cursor()
# pythonBDデータベースを作成する
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.close()#最初にカーソルを閉じます
conn.close()#次に、データベース接続を閉じます
print('pythonBDデータベースを正常に作成する')

テーブルを作成

import pymysql
# データベース接続を開く
conn = pymysql.connect('localhost',user ="root",passwd ="root",db ="myemployees")
# カーソルを取得
cursor=conn.cursor()print(cursor)

# ユーザーテーブルを作成する
cursor.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user`(`id`int(11) NOT NULL AUTO_INCREMENT,`name`varchar(255) NOT NULL,`age`int(11) NOT NULL,
 PRIMARY KEY(`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cursor.execute(sql)
cursor.close()#最初にカーソルを閉じます
conn.close()#次に、データベース接続を閉じます
print('データテーブルを正常に作成する')

テーブルに1つのデータを挿入します

''' 単一のデータを挿入します'''import pymysql
# データベースを指定せずにデータベース接続を開く
conn=pymysql.connect('localhost','root','root')
conn.select_db('pythondb')

cur=conn.cursor()#カーソルを取得

# ユーザーテーブルを作成する
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user`(`id`int(11) NOT NULL AUTO_INCREMENT,`name`varchar(255) NOT NULL,`age`int(11) NOT NULL,
 PRIMARY KEY(`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

insert=cur.execute("insert into user values(1,'tom',18)")print('addステートメントの影響を受ける行数:',insert)

# データを挿入する別の方法は、文字列を介して値を渡します
sql="insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))

cur.close()
conn.commit()
conn.close()print('sqlが正常に実行されました')

クエリデータ

''' fetchone'''import pymysql
# データベース接続を開く
conn=pymysql.connect('localhost','root','root')
conn.select_db('myemployees')
# カーソルを取得
cur=conn.cursor()

cur.execute("select * from user;")while1:
 res=cur.fetchone()if res is None:
  # 結果セットが取得されたことを示します
  breakprint(res)
cur.close()
conn.commit()
conn.close()print('sqlが正常に実行されました')'''
(1,' tom',18)(3,'kongsh',20)
sqlが正常に実行されました
'''

CRUD

CRUDは、計算処理を行うときに、Add(作成)、Read Query(取得)、Update(更新)、およびDelete(削除)という単語の頭文字の省略形を指します。

追加、削除、変更の2つの操作

単一操作:c.execute( 'SQLステートメント'、(パラメーター値))

複数の操作:c.executemany( 'SQLステートメント'、(複数のパラメーター値))

チェックする3つの操作

シングルを取る:c.fetchone()

複数を取る:fetchmany(size)

すべてを取る:c.fetchall()

SQLiteデータベース###

SQLiteは、自給自足のサーバーレスのゼロ構成のトランザクションSQLデータベースエンジンを実装するインプロセスライブラリです。これはゼロ構成データベースです。つまり、他のデータベースとは異なり、システムで構成する必要はありません。

他のデータベースと同様に、SQLiteエンジンは独立したプロセスではなく、アプリケーションの要件に応じて静的または動的に接続できます。 SQLiteはストレージファイルに直接アクセスします。

データの種類###

SQLiteデータタイプは、任意のオブジェクトのデータタイプを指定するために使用される属性です。 SQLiteのすべての列、すべての変数、および式には、関連付けられたデータ型があります。

これらのデータタイプは、テーブルの作成時に使用できます。 SQLiteは、より一般的な動的型システムを使用します。 SQLiteでは、値のデータタイプは、コンテナではなく、値自体に関連しています。

SQLiteの主なデータタイプは、NULL、INTEGER、REAL、TEXT、BLOBです。

Python操作SQLiteデータベース###

モジュールのインポート

import sqlite3  

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

接続関数を呼び出すときは、ライブラリ名を指定します。指定したデータベースが存在する場合はデータベースを直接開き、存在しない場合は新しいデータベースを作成して再度開きます。

cx = sqlite3.connect("E:/test.db")  #ここでファイルを作成します

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

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

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

データベースが開かれたときに返されるオブジェクトcxは、データベース接続オブジェクトであり、次の操作を実行できます。

  1. commit()-トランザクションコミット
  2. rollback()-トランザクションのロールバック
  3. close()-データベース接続を閉じます
  4. cursor()-カーソルを作成します

カーソルを使用してデータベースを照会

c = conn.cursor() #カーソルオブジェクトのSQLステートメントを使用してデータベースにクエリを実行し、クエリオブジェクトを取得する必要があります。

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

  1. execute()-sqlステートメントを実行します
  2. executemany--複数のsqlステートメントを実行します
  3. close()-カーソルを閉じます
  4. fetchone()-結果からレコードをフェッチし、カーソルを次のレコードにポイントします
  5. fetchmany()-結果から複数のレコードをフェッチします
  6. fetchall()-結果からすべてのレコードをフェッチします
  7. scroll()-カーソルスクロール

テーブルを作成

c.execute('''CREATE TABLE stocks(date text,trans text,symbol text,gty real,price real)''')

テーブルにデータを挿入します

c.execute('''insert into stocks values('2016-01-05','BUY','RHAT',100,35.14)''')

以下は完全なケースデモンストレーションです####

データベースに接続する

import sqlite3
# データストレージ名
db_name ="test.db"
# テーブル名
table_name ="catalog"
conn = sqlite3.connect(db_name)

カーソルを開く

rs=conn.cursor()

テーブルを作成する

sql ='create table '+ table_name +' (id varchar(20) primary key, pid integer, name varchar(10))'try:
 rs.execute(sql)print("テーブルが正常に構築されました")
except:print("テーブルの作成に失敗しました")

追加、削除、変更

# 増加:3つのレコードを追加

sql ="Insert into "+ table_name +" values ('001', 1, '張さん')"try:
  rs.execute(sql)
# トランザクションをコミットする
conn.commit()print("正常に挿入されました")
except:print("挿入に失敗しました")
sql ="Insert into "+ table_name +" values ('002', 2, 'Li Si')"try:
  rs.execute(sql)
# トランザクションをコミットする
conn.commit()print("正常に挿入されました")
except:print("挿入に失敗しました")
sql ="Insert into "+ table_name +" values ('003', 3, '王呉')"try:
  rs.execute(sql)
# トランザクションをコミットする
conn.commit()print("正常に挿入されました")
except:print("挿入に失敗しました")

# 削除:pidが3に等しいレコードを削除します

sql ="Delete from "+ table_name +" where pid = 3"try:
 rs.execute(sql)
 conn.commit()print("正常に削除されました")
except:print("削除に失敗しました")

# 変更:pidが2から1に等しいレコードのpidを変更します

sql ="Update "+ table_name +" set pid = 1 where pid = 2"try:
 rs.execute(sql)
 conn.commit()print("正常に変更されました")
except:print("編集に失敗する")

# チェック:データベース内のすべてのテーブル名を照会します

sql ="Select name From sqlite_master where type = 'table'"
res = rs.execute(sql)print(res.fetchall())

# テーブル内のすべてのレコードをクエリします

sql ="Select * from "+ table_name
try:
 res = rs.execute(sql)print(res.fetchall())
except:print([])

Recommended Posts

Day20.python操作データベース
Python操作SQLiteデータベース
Day18.pythonファイル/ディレクトリ