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は、計算処理を行うときに、Add(作成)、Read Query(取得)、Update(更新)、およびDelete(削除)という単語の頭文字の省略形を指します。
単一操作:c.execute( 'SQLステートメント'、(パラメーター値))
複数の操作:c.executemany( 'SQLステートメント'、(複数のパラメーター値))
シングルを取る:c.fetchone()
複数を取る:fetchmany(size)
すべてを取る:c.fetchall()
SQLiteは、自給自足のサーバーレスのゼロ構成のトランザクションSQLデータベースエンジンを実装するインプロセスライブラリです。これはゼロ構成データベースです。つまり、他のデータベースとは異なり、システムで構成する必要はありません。
他のデータベースと同様に、SQLiteエンジンは独立したプロセスではなく、アプリケーションの要件に応じて静的または動的に接続できます。 SQLiteはストレージファイルに直接アクセスします。
SQLiteデータタイプは、任意のオブジェクトのデータタイプを指定するために使用される属性です。 SQLiteのすべての列、すべての変数、および式には、関連付けられたデータ型があります。
これらのデータタイプは、テーブルの作成時に使用できます。 SQLiteは、より一般的な動的型システムを使用します。 SQLiteでは、値のデータタイプは、コンテナではなく、値自体に関連しています。
SQLiteの主なデータタイプは、NULL、INTEGER、REAL、TEXT、BLOBです。
モジュールのインポート
import sqlite3
データベースを作成/開く
接続関数を呼び出すときは、ライブラリ名を指定します。指定したデータベースが存在する場合はデータベースを直接開き、存在しない場合は新しいデータベースを作成して再度開きます。
cx = sqlite3.connect("E:/test.db") #ここでファイルを作成します
メモリ内にデータベースを作成することもできます。
con = sqlite3.connect(":memory:")
データベース接続オブジェクト
データベースが開かれたときに返されるオブジェクトcxは、データベース接続オブジェクトであり、次の操作を実行できます。
カーソルを使用してデータベースを照会
c = conn.cursor() #カーソルオブジェクトのSQLステートメントを使用してデータベースにクエリを実行し、クエリオブジェクトを取得する必要があります。
カーソルオブジェクトには、次の操作があります。
テーブルを作成
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([])