이 섹션
- 데이터베이스 작업
- 패키지 데이터베이스 작업
머리말
함수에서 인터페이스 테스트는 종종 데이터베이스 조작 인터페이스는 정확한 데이터, 테스트 및 검증 환경 기능을 준비하기 위해, 데이터베이스의 조작에 의해 요구된다.
자동화 된 테스트에서, 우리는 데이터베이스 데이터 준비에 연결하고 환경 검사 데이터베이스 주장 기능을 자동으로 코드를 사용해야합니다.
파이썬을 사용하여 MySQL 데이터베이스 작업은 여기에 우리는 삼자 라이브러리를 사용할 필요가PyMySQl
설치 :
pip install pymysql
데이터베이스 작업
- 데이터베이스 연결을 설정
conn = pymysql.connect()
- 연결 구축 작업으로 커서
cur = conn.cursor()
- SQL을 수행하기 위해 커서를 사용 (읽기 / 쓰기)
cur.execute(sql)
- 결과보기 (읽기) / 제출 변경 (쓰기)
cur.fetchall()
/conn.commit()
- 커서 및 연결을 닫습니다
cur.close();conn.close()
import pymysql
# 1. 建立连接
conn = pymysql.connect(host='127.0.0.1',
port=3306,
user='root', passwd='123456', # password也可以 db='api_test', charset='utf8') # 如果查询有中文需要指定数据库编码 # 2. 从连接建立游标(有了游标才能操作数据库) cur = conn.cursor() # 3. 查询数据库(读) cur.execute("select * from user where name='张三'") # 4. 获取查询结果 result = cur.fetchall() print(result) # 3. 更改数据库(写) cur.execute("delete from user where name='李四'") # 4. 提交更改 conn.commit() # 注意是用的conn不是cur # 5. 关闭游标及连接 cur.close() conn.close()
커서는 무엇입니까? 마찬가지로 파일 핸들을 커서, 당신은 결과 집합 중 하나를 사용하여 데이터베이스에 액세스 할 수 있습니다. pymysql는 SQL을 실행하고 커서를 통해 결과를 얻을 수 있습니다
쿼리
데이터베이스 쿼리를 실행 한 후, cur.execute ()를 사용하여 오히려 결과보다, 행의 수에게 영향을 반환하지 않습니다. 우리는 사용하고자하는 cur.fetchone()/cur.fetchmany()/cur.fetchall()
결과를 얻을 수
- cur.fetchone (가), (동시에 획득 된 데이터가 결과 집합에서 삭제한다)는 데이터 취득, Ganso를 반환
('张三','123456')
- cur.fetchmany (3) 복수의 데이터를 획득하는 중첩 조상
(('张三','123456'),('李四','123456'),("王五","123456"))
- cur.fetchall () : 모든 데이터 중첩 튜플을 가져,
(('张三','123456'),)
(하나 개의 데이터)
참고 : 데이터를 획득 한 후, 데이터가 중앙 집중식 데이터 수집에서 삭제됩니다 다시 한 번 같은 덜 수 :
cur.execute(select * from user where name='张三')
print(cur.fetchone()) # 结果: ('张三','123456')
print(cur.fetchone()) # 结果:None print(cur.fetchall()) # 结果:()
그래서 우리는 쿼리 결과를 재사용 할 필요가 쿼리 결과를 변수에 할당해야
cur.execute(select * from user where name='张三')
result = cur.fetchall()
print(result) # 结果: ('张三','123456')
print(result) # 结果: ('张三','123456')
동작 수정
작업이 연결이 사용하여 데이터베이스를 수정 수행 직후에 적용되지 않습니다 conn.commit()
커밋 지원 일을 롤백 할 때까지 적용을
try:
cur.execute("insert into user (name,password) values ('张三', '123456')")
cur.execute("insert into user (name, passwd) values ('李四'), '123456'") # 此处sql出错
conn.commit() # 使用连接提交所有更改 except Exception as e: conn.rollback() # 回滚所有更改(注意用的是conn) print(str(e))
패키지 데이터베이스 작업
종종 데이터베이스에 사용하기 때문에, 모든 데이터베이스 작업은 일반적인 데이터베이스 모듈로 패키징하는 것이 좋습니다
- 새로운 db.py, 코드는 다음과 같습니다 :
import pymysql
# 获取连接方法
import pymysql
# 获取连接方法
def get_db_conn(): conn = pymysql.connect(host='127.0.0.1', port=3306, user='test', passwd='123456', db='api_test', charset='utf8') # 如果查询有中文,需要指定测试集编码 return conn # 封装数据库查询操作 def query_db(sql): conn = get_db_conn() # 获取连接 cur = conn.cursor() # 建立游标 cur.execute(sql) # 执行sql result = cur.fetchall() # 获取所有查询结果 cur.close() # 关闭游标 conn.close() # 关闭连接 return result # 返回结果 # 封装更改数据库操作 def change_db(sql): conn = get_db_conn() # 获取连接 cur = conn.cursor() # 建立游标 try: cur.execute(sql) # 执行sql conn.commit() # 提交更改 except Exception as e: conn.rollback() # 回滚 finally: cur.close() # 关闭游标 conn.close() # 关闭连接 # 封装常用数据库操作 def check_user(name): # 注意sql中''号嵌套的问题 sql = "select * from user where name = '{}'".format(name) result = query_db(sql) return True if result else False def add_user(name, password): sql = "insert into user (name, passwd) values ('{}','{}')".format(name, password) change_db(sql) def del_user(name): sql = "delete from user where name='{}'".format(name) change_db(sql)
데이터베이스를 직접 조작 SQL 예와 비교하여, 공통의 패키지 데이터베이스 작업을 안전하게
- 방법 (다른 모듈)을 호출
from db import *
if check_user("张三"):
del_user("张三")
참고 : 다른 포장 방법
위의이 포장 방법은, 각 데이터베이스 쿼리가 덜 효율적인 연결을 설정할 것이기 때문에, 또한 포장의 객체 지향 방법을 아래에 이용 될 수있다
db2.py
import pymysql
class DB:
def __init__(self): self.conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', # passwd 不是 password db='api_test') self.cur = self.conn.cursor() def __del__(self): # 析构函数,实例删除时触发 self.cur.close() self.conn.close() def query(self, sql): self.cur.execute(sql) return self.cur.fetchall() def exec(self, sql): try: self.cur.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() print(str(e)) def check_user(self,name): result = self.query("select * from user where name='{}'".format(name)) return True if result else False def del_user(self, name) self.exec("delete from user where name='{}'".format(name))
용도
from db2 import DB:
db = DB() # 实例化一个数据库操作对象
if db.check_user("张三"): db.del_user("张三")
즉 후
- 데이터베이스 연결 정보 구성 파일은 구성 파일에서 읽어 권장 사항을 작성
- SQL 문은 수동 테스트 패키지로 더 문법을 봐하는 것이 좋습니다
- 다양한 동작들은 다양한 서비스 SQL을 캡슐화하여 수행 할 수있다
- 위험에 데이터베이스 변경 작업은주의 할 필요가! ! !