Python이 데이터베이스를 작동하고 간단한 추가, 삭제, 수정 및 검색을 완료하는 방법을 MySQL 데이터베이스를 예로 들어 설명합니다.
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 루프를 사용하여 쿼리 결과를 탐색하고 예외 처리를 추가합니다.