Pythonインタフェース試験戦闘3(上) - データベースのPythonの動作

このセクションの内容

  • データベース操作
  • パッケージのデータベース操作

序文

機能において、インターフェース・テストは、多くの場合、データベース操作インターフェイスが正しい、データ、テストおよび検証環境機能を調製するために、データベースの操作で必要とされます。
自動テストでは、我々は、データベースのデータの準備、環境検査データベースアサーション機能に接続し、自動的にコードを使用する必要があります。
ここで、我々は三者のライブラリを使用する必要があるのPythonを使用して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は():データを取得し(同時に取得されたデータは、結果セットから削除されます)、元祖を返します('张三','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