MySQL データベースを例として、Python がどのようにデータベースを操作し、簡単な追加、削除、変更、検索を実行するかを説明します。
Python の MySQL データベース操作モジュールは MySQLdb と呼ばれ、追加のインストールが必要です。
pip ツールによるインストール: pip install MySQLdb
MySQLdb モジュールでは、主に MySQLdb.Connect() メソッドを使用してデータベースに接続し、対応する操作を実行します。
MySQLdb.Connect(parameters...) メソッドは、一般的に使用される次のパラメータを提供します:
接続オブジェクトによって返される connect() 関数:
カーソル オブジェクトもいくつかのメソッドを提供します:
13.1 データベースの追加、削除、変更クエリ
13.1.1 テストライブラリにユーザーテーブルを作成し、レコードを追加します
>>> conn = MySQLdb.Connect(host='192.168.1.244',user='root',passwd='QHyCTajI',db='test',charset='utf8') >>> cursor = conn.cursor() >>> sql = "create table user(id int,name varchar(30),password varchar(30))" >>> cursor.execute(sql) # 返回的数字是影响的行数 0L >>> sql = "insert into user(id,name,password) values('1','xiaoming','123456')" >>> cursor.execute(sql) 1L >>> conn.commit() # 提交事务,写入到数据库 >>> cursor.execute('show tables') # 查看创建的表 1L >>> cursor.fetchall() # 返回上一个游标执行的所有结果,默认是以元组形式返回 ((u'user',),) >>> cursor.execute('select * from user') 1L >>> cursor.fetchall() ((1L, u'xiaoming', u'123456'),)
13.1.2 複数のデータを挿入します
>>> sql = 'insert into user(id,name,password) values(%s,%s,%s)' >>> args = [('2','zhangsan','123456'), ('3','lisi','123456'),('4','wangwu','123456')] >>> cursor.executemany(sql, args) 3L >>> conn.commit() >>> sql = 'select * from user' >>> cursor.execute(sql) 4L >>> cursor.fetchall() ((1L, u'xiaoming', u'123456'), (2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))
args 変数は、次の内容を含むリストですタプル。各タプルは各レコードに対応します。複数のレコードをクエリする場合、この方法を使用すると、挿入効率が効果的に向上します。
13.1.3 ユーザー名 xiaoming のレコードを削除します
>>> sql = 'delete from user where name="xiaoming"' >>> cursor.execute(sql) 1L >>> conn.commit() >>> sql = 'select * from user' >>> cursor.execute(sql) 3L >>> cursor.fetchall() ((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))
13.1.4 レコードをクエリします
>>> sql = 'select * from user' >>> cursor.execute(sql) 3L >>> cursor.fetchone() # 获取第一条记录 (2L, u'zhangsan', u'123456') >>> sql = 'select * from user' >>> cursor.execute(sql) 3L >>> cursor.fetchmany(2) # 获取两条记录 ((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'))
13.1.4 結果を辞書形式で返します
默认显示是元组形式,要想返回字典形式,使得更易处理,就用到cursor([cursorclass])中的cusorclass参数。 传入MySQLdb.cursors.DictCursor类: >>> cursor = conn.cursor(MySQLdb.cursors.DictCursor) >>> sql = 'select * from user' >>> cursor.execute(sql) 3L >>> cursor.fetchall() ({'password': u'123456', 'id': 2L, 'name': u'zhangsan'}, {'password': u'123456', 'id': 3L, 'name': u'lisi'}, {'password': u'123456', 'id': 4L, 'name': u'wangwu'})
13.2 クエリ結果を走査します
#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb try: conn = MySQLdb.Connect(host='127.0.0.1', port=3306, user='root', passwd='123456', connect_timeout=3, charset='utf8') cursor = conn.cursor() sql = "select * from user" cursor.execute(sql) for i in cursor.fetchall(): print i except Exception, e: print ("Connection Error: " + str(e)) finally: conn.close() # python test.py (2L, u'zhangsan', u'123456') (3L, u'lisi', u'123456') (4L, u'wangwu', u'123456')
for ループを使用して走査しますクエリ結果を取得し、例外処理を追加します。