一、背景
在做APP自動化測試數據進行分離的時候,需要將數據庫的瓶碼數據獲取到,然後再傳入接口,我在網上邊學邊做花了兩天的時間終於,弄成了理想的樣子。在這裏記錄自己的學習過程。
二、環境
Python3.6
MySQL-Navicat(驗證SQL語言是否寫正確)
用到的庫:
import pymysql
import csv
三、代碼解析
# -*- coding: utf-8 -*-
import Common.configDB #這裏我對數據庫操作進行了封裝
import csv
DB = Common.configDB.MyDB()
#定義文件路徑
file = "E:\python\Factory_AppTest1\Factory_AppTest\code.csv"
with open(file, 'w+', newline='') as csv_file:#newline=''是爲了避免出現空格
write = csv.writer(csv_file, dialect='excel')
#寫入瓶碼
#以托盤出庫方式寫入產品ID爲7的瓶碼
sql = "SELECT t1.packing_info_id,t1.code,t1.inside_code,t1.flag,t2.product_id FROM t_packing_list t1," \
"(SELECT p2.logistics_id,p1.surplus_amount,p2.id,p2.packing_epc,p1.product_id FROM " \
"(SELECT * FROM t_logistics_cell_info WHERE surplus_amount=72 AND product_id=7) p1," \
"(SELECT * FROM t_logistics_cell_list GROUP BY logistics_id) p2 WHERE p1.id=p2.logistics_id) t2 " \
"WHERE t1.packing_info_id=t2.id GROUP BY t1.packing_info_id"
DB.executeSQL(sql)
productID = ['productID_7', 'productID_8', 'productID_9', 'productID_10', 'productID_1042']
write.writerow(productID)
#這裏有坑,之前嘗試了無數次write.writerows()導致存到CSV文件的數據被拆成單個的數字
for item in DB.get_all(sql):
data = list(tuple(item))#這裏是將SQL查詢到的數據進行轉化,Python從數據庫裏獲取到數數據是元組格式,之前操作xlwt時必須要字符串或者列表,不能是元組格式數據,所以爲了避免這種情況,用csv存數據還是先轉換成列表
write.writerow([data[1]])#這裏我只需要瓶碼數據所以取了data[1]這個索引
DB.closeDB()
csv展示格式
這裏需要說明一下,每次執行會覆蓋掉之前的數據,由於我的數據需要實時更新,所以這個不會有影響,大家在寫的時候注意一下。
四、讀取指定列
with open(file,’rb’) as csvfile:
reader = csv.DictReader(csvfile)
column = [row[‘productID_7’] for row in reader]
這裏就是以產品名稱標號來讀取數據了