faker可以用來批量構造測試數據。首先安裝:pip install Faker
具體用法參考:https://zhuanlan.zhihu.com/p/87203290
這里主要是講下利用faker批量生成測試數據,並保存到數據庫。
如下圖,創建了一個person表,里面有id,name,address,birthdate。這幾個字段,id是自增屬性。
下面利用faker生成測試數據后,再調用pymysql將生成的數據存儲到數據庫對應的person表里面。
效果如圖:
demo如下:
import pymysql from faker import Faker faker = Faker("zh_CN") # 中文數據 def insert_data(): conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', database='school') cursor = conn.cursor() # SQL 插入語句 sql = "INSERT INTO person(name,address,birthdate)VALUES (%s,%s,%s)" person_data = [] for i in range(100): person_info = (faker.name(), faker.address(), faker.date()) person_data.append(person_info) print(person_data) try: # 執行sql語句 cursor.executemany(sql, person_data) # todo 批量生成數據用executemany # 提交到數據庫執行 conn.commit() print("插入數據完成...") except Exception as e: # 如果發生錯誤則回滾 conn.rollback() raise e finally: conn.close() # 關閉數據庫連接 insert_data()
封裝后代碼:
import pymysql from faker import Faker class InsertData(): def __init__(self, host, port, user, password, database): '''連接初始化''' self.host = host self.port = port self.user = user self.password = password self.database = database try: self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database) self.cursor = self.conn.cursor() print("連接數據庫成功...") except Exception as e: raise e def get_data(self, number): '''獲取測試數據''' faker = Faker("zh_CN") # 中文數據 self.number = number person_data = [] for i in range(self.number): person_info = (faker.name(), faker.address(), faker.date()) person_data.append(person_info) # print(person_data) return person_data def execute(self, sql, data): '''執行sql''' self.cursor.executemany(sql, data) self.conn.commit() print("插入{}條數據完成...".format(self.number)) def __del__(self): '''關閉連接資源''' self.cursor.close() self.conn.close() print('關閉數據庫連接...') if __name__ == '__main__': db = InsertData('localhost', 3306, 'root', 'root', 'school') sql = "INSERT INTO person(name,address,birthdate)VALUES (%s,%s,%s)" db.execute(sql, db.get_data(100))
生成10萬條測試數據如圖: