Pythonデータベースプログラミング

高洛峰
リリース: 2016-11-19 10:03:21
オリジナル
1284 人が閲覧しました

MySQL データベースを例として、Python がどのようにデータベースを操作し、簡単な追加、削除、変更、検索を実行するかを説明します。

Python の MySQL データベース操作モジュールは MySQLdb と呼ばれ、追加のインストールが必要です。

pip ツールによるインストール: pip install MySQLdb

MySQLdb モジュールでは、主に MySQLdb.Connect() メソッドを使用してデータベースに接続し、対応する操作を実行します。

MySQLdb.Connect(parameters...) メソッドは、一般的に使用される次のパラメータを提供します:

Pythonデータベースプログラミング

接続オブジェクトによって返される connect() 関数:

Pythonデータベースプログラミング

カーソル オブジェクトもいくつかのメソッドを提供します:

Pythonデータベースプログラミング

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 ループを使用して走査しますクエリ結果を取得し、例外処理を追加します。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート