파이썬 인터페이스 테스트 전투 3 (위) - 데이터베이스 파이썬의 작동

이 섹션

  • 데이터베이스 작업
  • 패키지 데이터베이스 작업

머리말

함수에서 인터페이스 테스트는 종종 데이터베이스 조작 인터페이스는 정확한 데이터, 테스트 및 검증 환경 기능을 준비하기 위해, 데이터베이스의 조작에 의해 요구된다.
자동화 된 테스트에서, 우리는 데이터베이스 데이터 준비에 연결하고 환경 검사 데이터베이스 주장 기능을 자동으로 코드를 사용해야합니다.
파이썬을 사용하여 MySQL 데이터베이스 작업은 여기에 우리는 삼자 라이브러리를 사용할 필요가PyMySQl

설치 :pip install pymysql

데이터베이스 작업

  1. 데이터베이스 연결을 설정 conn = pymysql.connect()
  2. 연결 구축 작업으로 커서 cur = conn.cursor()
  3. SQL을 수행하기 위해 커서를 사용 (읽기 / 쓰기) cur.execute(sql)
  4. 결과보기 (읽기) / 제출 변경 (쓰기) cur.fetchall()/conn.commit()
  5. 커서 및 연결을 닫습니다 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)) 

패키지 데이터베이스 작업

종종 데이터베이스에 사용하기 때문에, 모든 데이터베이스 작업은 일반적인 데이터베이스 모듈로 패키징하는 것이 좋습니다

  1. 새로운 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 예와 비교하여, 공통의 패키지 데이터베이스 작업을 안전하게

  1. 방법 (다른 모듈)을 호출
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을 캡슐화하여 수행 할 수있다
  • 위험에 데이터베이스 변경 작업은주의 할 필요가! ! !



추천

출처www.cnblogs.com/gdg87813/p/11225535.html