欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解使用Python寫一個(gè)向數(shù)據(jù)庫填充數(shù)據(jù)的小工具(推薦)

 更新時(shí)間:2020年09月11日 10:07:24   作者:硬核少女  
這篇文章主要介紹了用Python寫一個(gè)向數(shù)據(jù)庫填充數(shù)據(jù)的小工具,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一. 背景

公司又要做一個(gè)新項(xiàng)目,是一個(gè)合作型項(xiàng)目,我們公司出web展示服務(wù),合作伙伴線下提供展示數(shù)據(jù)。

而且本次項(xiàng)目是數(shù)據(jù)統(tǒng)計(jì)展示為主要功能,并沒有研發(fā)對(duì)應(yīng)的數(shù)據(jù)接入接口,所有展示數(shù)據(jù)源均來自數(shù)據(jù)庫查詢,

所以驗(yàn)證數(shù)據(jù)沒有別的入口,只能通過在數(shù)據(jù)庫寫入數(shù)據(jù)來進(jìn)行驗(yàn)證。

二. 工具

Python+mysql

三.前期準(zhǔn)備

前置:當(dāng)然是要先準(zhǔn)備好測(cè)試方案和測(cè)試用例,在準(zhǔn)備好這些后才能目標(biāo)明確將要開發(fā)自動(dòng)化小工具都要有哪些功能,避免走彎路

3.1 跟開發(fā)溝通

1)確認(rèn)數(shù)據(jù)庫連接方式,庫名 ;

2)測(cè)試所涉及到的表名;

3)每個(gè)表是對(duì)哪部分業(yè)務(wù)造成影響;

4)表之間的關(guān)聯(lián)關(guān)系,同業(yè)務(wù)模塊之間的不同表之間是否有關(guān)聯(lián)字段;

5)表中個(gè)字段數(shù)據(jù)是否有特殊來源,如用戶ID、廠商名稱一類與業(yè)務(wù)有一定關(guān)聯(lián)程度的字段,一定要確認(rèn)好是可以隨機(jī)生成的 還是 需要從指定表中獲取字段

3.2 設(shè)計(jì)小工具最終要實(shí)現(xiàn)的效果

我設(shè)計(jì)這個(gè)小工具就希望它可以完成兩件事情

1) 生成sql語句,并且能寫入進(jìn)入mysql數(shù)據(jù)庫

2) 數(shù)據(jù)我寫入sql的統(tǒng)計(jì)結(jié)果,方便使用它直接與頁面結(jié)果進(jìn)行比對(duì)

3.3 給自己加個(gè)油! 我一定可以的!

四.開始編程

***因?yàn)榇a內(nèi)實(shí)際業(yè)務(wù)邏輯比較強(qiáng),所以下面只寫出一些示例啦~

4.1 先處理一下基礎(chǔ)數(shù)據(jù)

1)因?yàn)槲覍⒁獙懭氲膬?nèi)容涉及到全國(guó)的省市名稱和省市行政區(qū)域代碼,所以先找開發(fā)要了一個(gè)他們使用的全國(guó)省市名稱及代碼對(duì)照json,然后處理成字典格式備用

2)編寫寫入sql的語句頭

通過配置文件的方式將各個(gè)表的寫入語句的前半句語法格式和寫入字段名稱編輯好。

之后每次使用的時(shí)候只需通過配置文件讀取對(duì)應(yīng)表的寫入語句再拼裝上要寫入的內(nèi)容就是一個(gè)完整的sql語句了

使用配置文件的模式主要是可以統(tǒng)一管理,并且可以保持后面生成環(huán)節(jié)的代碼整潔

[veh_scrap]
veh = INSERT INTO zqy_veh_scrap_sto (zqy_id, vin, pack_num, scrap_time, bat_is_scrap,wmi,epname,epcode,province_code,city_code,submit_time) values

4.2 編寫工具模塊

1)編寫隨機(jī)工具

因?yàn)閷懭氲膬?nèi)容大部分字段需要不重復(fù),所以使用random模塊,定義不同的方法生成各種類型隨機(jī)數(shù)據(jù),如隨機(jī)身份證號(hào) 隨機(jī)姓名 隨機(jī)編碼 隨機(jī)ID 等等...

再生成寫入數(shù)據(jù)的時(shí)候,就可以引用這個(gè)隨機(jī)工具模塊引用里面的方法取隨機(jī)值,以保證寫入數(shù)據(jù)的唯一性

例:

def random_vin():
 """
 生成隨機(jī)vin
 :return:
 """
 return ''.join(
  random.sample(['Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P',
      'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E',
      'D', 'C', 'B', 'A', '1', '2', '3', '4', '5', '6', '7',
      '8', '9', '0'], 17))

2)pyMysql模塊引入并封裝可用工具

因?yàn)樽罱K要將內(nèi)容寫入,所以要使用pyMysql模塊,將組裝好的sql語句執(zhí)行寫入

需要封裝的內(nèi)容有 數(shù)據(jù)庫鏈接 獲取游標(biāo) 語句執(zhí)行方法 數(shù)據(jù)庫查詢方法 刪除語句方法

例:

def get_conn():
 conn = pymysql.connect(
  host=,
  port=,
  user=,
  password=,
  database=,
  charset='utf8')
 return conn


def execut_sql(sql):
 try:

  conn = get_conn()
  cur = conn.cursor()
  cur.execute(sql)
  conn.commit()
  print("數(shù)據(jù)庫執(zhí)行成功")
  cur.close()

 except Exception as e:
  print(str(e))
  print(sql)
  # 有異常就回滾
  conn.rollback()
  # 關(guān)閉連接
 cur.close()
 conn.close()

def select_one_sql(sql):
 try:
  conn = get_conn()
  cur = conn.cursor()
  cur.execute(sql)
  results = cur.fetchone()
  #print(results)
  cur.close()

  return results
 except Exception as e:
  print(str(e))
  # 關(guān)閉連接
 cur.close()
 conn.close()

3)讀取配置的模塊

因?yàn)槲覀儗ql語句的頭通過配置文件進(jìn)行管理,那么就需要一個(gè)讀取配置的模塊或方法,因?yàn)槲冶容^菜 所以為了看起來更加清晰 就用模塊來進(jìn)行管理了

import configparser

cfg_path = 'rebulid_generate_sql_git\base_data\sql_header.ini'
cfg = configparser.ConfigParser()
cfg.read(cfg_path,encoding='utf-8')

def get_config_data(section,options):
 return cfg.get(section,options)

4) 編寫生成寫入信息的方法

因?yàn)槲覀冊(cè)谔幚砘A(chǔ)數(shù)據(jù)的時(shí)候就已經(jīng)寫好了sql寫入語句頭了,所以現(xiàn)在只要生成它后面的values值就可以了,這步就是生成他values值的步驟

創(chuàng)建一個(gè)列表,根據(jù)寫入語句內(nèi)字段的順序生成對(duì)應(yīng)字段的值并添加至創(chuàng)建的列表中。對(duì)應(yīng)字段的內(nèi)容如果是隨機(jī)值,就使用之前準(zhǔn)備好的隨機(jī)模塊,使用里面的方法生成隨機(jī)值;如果是需要從其他表中獲取的值,則通過封裝好的qymysql的查找方法進(jìn)行搜索并引用。

例:

def recycle_veh_scrap(prov, city):
 """
 報(bào)廢車輛入庫表
 :return:
 """
 prov_info = random_util.random_city_code(prov, city)
 # 獲取當(dāng)?shù)厮泄拘畔?
 company = search_factory_info.get_company_data(prov, city)
 # 獲取vin
 vin = random_util.random_vin()
 # 生成數(shù)據(jù)容器
 insert_data = []
 # 生成隨機(jī)zqy_id,寫入列表
 insert_data.append(random_util.random_id())
 # 生成隨機(jī)vin,寫入列表
 insert_data.append(vin)
 # 生成隨機(jī)電池包數(shù),寫入列表
 insert_data.append(random.randint(1, 10))
 # 生成報(bào)廢時(shí)間,寫入列表
 insert_data.append(random_util.random_date())
 # bat_is_scrap
 insert_data.append('1')
 # wmi
 insert_data.append(vin[0:3].upper())
 # 生成報(bào)廢企業(yè)名稱,寫入列表
 insert_data.append(company[0])
 # 生成報(bào)廢企業(yè)代碼,寫入列表
 insert_data.append(company[1])
 # 獲取省級(jí)代碼,寫入列表
 insert_data.append(prov_info[0])
 # 獲取市級(jí)代碼,寫入列表
 insert_data.append(prov_info[1])
 # 數(shù)據(jù)提交時(shí)間為當(dāng)前數(shù)據(jù)生成時(shí)間,寫入列表
 insert_data.append(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))return insert_data

5) 編寫統(tǒng)計(jì)方法

因?yàn)槲覀儗懭氲闹凳请S機(jī)的,所以沒有標(biāo)準(zhǔn)去判斷最終系統(tǒng)寫入的內(nèi)容是否正確。

那就需要我們將需要對(duì)比的值取出保存并統(tǒng)計(jì),用于最后對(duì)照使用。

取值的過程會(huì)在語句寫入之前一步完成,現(xiàn)在要先準(zhǔn)備一個(gè)數(shù)據(jù)處理的模塊,以便對(duì)取出的至進(jìn)行統(tǒng)計(jì)。

可以先準(zhǔn)備幾個(gè)比較常用的,例如列表內(nèi)同類值 列表內(nèi)數(shù)值求和 字典合并等方法,如果后面再有更復(fù)雜的格式,再單獨(dú)編寫。

例:

def TongJiQi(list):
 # 列表內(nèi)容統(tǒng)計(jì)器,對(duì)列表內(nèi)的重復(fù)項(xiàng)進(jìn)行數(shù)量統(tǒng)計(jì)
 count_dict = dict()
 for item in list:
  if item in count_dict:
   count_dict[item] += 1
  else:
   count_dict[item] = 1
 return count_dict


def qiuhe(data_list):
 """
 對(duì)列表內(nèi)的數(shù)值進(jìn)行求和
 :param data_list:
 :return:
 """
 total = 0
 for ele in range(0, len(data_list)):
  total = total + data_list[ele]
 return total

以上,準(zhǔn)備工作就都做好了,下面就要開始真正的寫入了

4.3 生成數(shù)據(jù)并拼裝為sql語句

1) 通過生產(chǎn)sql語句數(shù)量來控制循環(huán),將sql頭與值拼裝在一起,并將拼裝好的結(jié)果進(jìn)行寫入

2) 在循環(huán)生成寫入值的過程中,將需要統(tǒng)計(jì)或計(jì)算的值取出單獨(dú)保存,在寫入結(jié)束后再進(jìn)行技術(shù)統(tǒng)計(jì)輸出統(tǒng)計(jì)結(jié)果

def write_sql(prov, city, des_prov, des_city)
# 通過配置文件獲取sql頭
sql = config_util.get_config_data('veh_scrap', 'pack_out')
# 控制循環(huán)
i = 0
# 創(chuàng)建列表,用于收集需要統(tǒng)計(jì)計(jì)算的數(shù)據(jù)
company_num = []
des_company_num = []
while i < sql_num:
 i += 1
 # 取生成的values值
 data = _crap_out(prov, city, des_prov, des_city)
 # 收集需要統(tǒng)計(jì)的數(shù)據(jù)
 company_num.append(data[8])
 des_company_num.append(data[4])
 # 拼裝sql語句
 sql = sql + str(tuple(data)) + ','
 # 最后一組數(shù)據(jù)后的,刪除掉
right_sql = sql.strip(',')
# 拼裝上結(jié)尾的; fullsql作為返回值
full_sql = right_sql + ';'
# print(full_sql)
# 執(zhí)行寫入
pymysql_util.execut_sql(full_sql)
print('上報(bào)企業(yè)統(tǒng)計(jì): ' + str(
 statistics_util.TongJiQi(company_num)))
print('去向企業(yè)統(tǒng)計(jì): ' + str(
 statistics_util.TongJiQi(des_company_num)))

這樣一個(gè)表的數(shù)據(jù)就寫入成功了,只需要調(diào)整寫入條數(shù)就可以想寫入多少條就寫入多少條,還可以直接輸出你關(guān)心的字段統(tǒng)計(jì)結(jié)果。

多個(gè)數(shù)據(jù)庫表的話可以就是將以上的生產(chǎn)數(shù)據(jù)和寫入數(shù)據(jù)的步驟復(fù)制,按照表名和字段稍作修改就可以了。

再將所有表的數(shù)據(jù)生成和寫入都編寫完成后,可以編寫一個(gè)小工具的入口,給自己編寫一個(gè)選擇器

每次只要輸入對(duì)應(yīng)的數(shù)字就可以執(zhí)行對(duì)應(yīng)的方法,寫入數(shù)據(jù)并輸出統(tǒng)計(jì)結(jié)果啦

def main(prov, city, sql_num, sour_prov, sour_city):
 """
 啟動(dòng)數(shù)據(jù)自動(dòng)寫入的主方法
 :return:
 """
 features_type = input("請(qǐng)選擇生成數(shù)據(jù)所屬功能模塊 1.車輛報(bào)廢 2.梯次利用 3.資源再生")
 if features_type == '1':
  scrapped_main.write_sql(prov, city, sql_num, des_prov=sour_prov,
        des_city=sour_city)
 elif features_type == '2':
  echelon_use_main.write_main(prov, city, sql_num, sour_prov, sour_city)
 elif features_type == '3':
  recycle_main.write_main(sql_num, prov, city, sour_prov, sour_city)

五.總結(jié)

以上只是一個(gè)工作過程中倉促搞出的一個(gè)小東西,還有很多不足。拋轉(zhuǎn)引玉,拿出來跟大家分享一下我的思路,希望能對(duì)大家有所幫助!

還有我趟過的坑,也記錄一下吧

1.不要只管悶頭寫,寫完一個(gè)表的時(shí)候就執(zhí)行試一下,不只要看數(shù)據(jù)庫寫進(jìn)去了 主要是看看要測(cè)試的平臺(tái)能不能看到,之前因?yàn)殚_發(fā)忘了跟我說一個(gè)字段條件,我全都寫完了也執(zhí)行成功了,但就是上不去平臺(tái),最后不得不大改一遍

2.隨時(shí)跟開發(fā)溝通確認(rèn)任何一個(gè)不確定的問題,因?yàn)橛械谋砜赡軙?huì)用不到,表內(nèi)的某些字段沒有用,表設(shè)計(jì)不明確的時(shí)候等等,這些時(shí)候都要跟他們確認(rèn)好再繼續(xù)動(dòng)手寫,防止無用功。

3.這只是輔助測(cè)試的工具,要控制住開發(fā)工具的時(shí)間,防止測(cè)試工作的延誤。

到此這篇關(guān)于詳解使用Python寫一個(gè)向數(shù)據(jù)庫填充數(shù)據(jù)的小工具(推薦)的文章就介紹到這了,更多相關(guān)Python向數(shù)據(jù)庫填充數(shù)據(jù)的小工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬取微信公眾號(hào)文章

    python爬取微信公眾號(hào)文章

    這篇文章主要為大家詳細(xì)介紹了python爬蟲實(shí)戰(zhàn)案例,微信公眾號(hào)文章的爬取,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python代碼模擬CPU工作原理

    Python代碼模擬CPU工作原理

    Python代碼來實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的CPU。用代碼模擬大的部件,使大家從原理上理解CPU工作。使它可編程,支持加減法運(yùn)算、讀寫內(nèi)存、無條件跳轉(zhuǎn)、條件跳轉(zhuǎn)的功能。
    2023-01-01
  • python自動(dòng)化UI工具發(fā)送QQ消息的實(shí)例

    python自動(dòng)化UI工具發(fā)送QQ消息的實(shí)例

    今天小編就為大家分享一篇python自動(dòng)化UI工具發(fā)送QQ消息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python字符串不可變數(shù)據(jù)類型

    python字符串不可變數(shù)據(jù)類型

    這篇文章主要介紹了python字符串不可變數(shù)據(jù)類型,下文關(guān)于python字符串不可變數(shù)據(jù)類型相關(guān)資料展開的內(nèi)容主要有查找子串及數(shù)量、字符串的替換、分割以及合并、刪除側(cè)邊的空白等內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • Python庫urllib與urllib2主要區(qū)別分析

    Python庫urllib與urllib2主要區(qū)別分析

    這篇文章主要介紹了Python庫urllib與urllib2主要區(qū)別,需要的朋友可以參考下
    2014-07-07
  • 利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到

    利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到

    小五收藏了一些論壇網(wǎng)站,經(jīng)常需要自己登錄簽到,以此來獲得積分金幣等等。但天天手動(dòng)太容易忘了這件事啦。畢竟我們都會(huì)用python了,那就可以使用Selenium操作,接下來就和大家講講如何利用Python實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到
    2022-08-08
  • Python爬取百度春節(jié)祝福語并生成心形詞云

    Python爬取百度春節(jié)祝福語并生成心形詞云

    這篇文章主要介紹了利用Python爬蟲爬取百度的春節(jié)祝福語,并將其生成心形詞云,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起試試
    2022-01-01
  • Gradio機(jī)器學(xué)習(xí)模型快速部署工具應(yīng)用分享前篇

    Gradio機(jī)器學(xué)習(xí)模型快速部署工具應(yīng)用分享前篇

    這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具應(yīng)用分享前篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • python?argparse模塊傳參用法實(shí)例

    python?argparse模塊傳參用法實(shí)例

    這篇文章主要為大家介紹了python?argparse模塊傳參用法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于Python實(shí)現(xiàn)交互式文件瀏覽器

    基于Python實(shí)現(xiàn)交互式文件瀏覽器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)簡(jiǎn)單的交互式文件瀏覽器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04

最新評(píng)論