python第十五天-原來還差一份作業

来源:http://www.cnblogs.com/uge3/archive/2017/05/17/6870199.html
-Advertisement-
Play Games

作業 1: 員工信息表程式,實現增刪改查操作 可進行模糊查詢,語法至少支持下麵3種: select name,age from staff_table where age > 22 select * from staff_table where dept = "IT" select * from s ...


作業 1: 員工信息表程式,實現增刪改查操作

可進行模糊查詢,語法至少支持下麵3種:
  select name,age from staff_table where age > 22
  select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
查到的信息,列印後,最後面還要顯示查到的條數
可創建新員工紀錄,以phone做唯一鍵,staff_id需自增
可刪除指定員工信息紀錄,輸入員工id,即可刪除
可修改員工信息,語法如下:
  UPDATE staff_table SET dept="Market" WHERE where dept = "IT"
註意:以上需求,要充分使用函數,請盡你的最大限度來減少重覆代碼

詳細描述參考http://www.cnblogs.com/alex3714/articles/5740985.html

 

代碼才寫了一半,今天 有公開課就沒有寫完成!先上一部分,明天再戰

  1 #!usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan
  4 import os ,sys
  5 BASE_DIR=os.path.dirname(os.path.abspath(__file__))#獲取相對路徑轉為絕對路徑賦於變數
  6 sys.path.append(BASE_DIR)#增加環境變數
  7 
  8 select_='select'#定義關鍵字
  9 from_='from'
 10 where_='where'
 11 update_='update'
 12 delete_='delete'
 13 insert_='insert'
 14 values_='values'
 15 into_='into'
 16 set_='set'
 17 
 18 def fj(line):#分解字元串
 19     a=line.split(',')#用 , 分割為列表
 20     dict_list={}#定義一個字典
 21     dict_list[a[3]]={'id':int(a[0]),'name':a[1],'age':int(a[2]),'dept':a[4],'ennoll_date':a[5].strip()}
 22     #print(dict_list)
 23     return dict_list#
 24 
 25 def dict_info(file_name):#員工信息表提取函數
 26     user_dict={}#定義一個員工信息的字典
 27     with open(file_name,'r',encoding='utf-8') as user_info:
 28         for line in user_info:
 29             user_dict.update(fj(line))#更新員工信息的字典
 30     return user_dict
 31 
 32 
 33 def sql_parsing(sql):#sql解析函數 主入口
 34     #sql=sql.lower()
 35     print(sql)
 36     if sql.startswith('select'):#判斷語句類型
 37         _dict_=select_par(sql)#調用相關函數
 38     elif sql.startswith('update') or sql.startswith('UPDATE')  :#判斷語句類型
 39         _dict_=update_par(sql.lower())
 40     elif sql.startswith('insert'):#判斷語句類型
 41         _dict_=insert_par(sql)
 42     elif sql.startswith('delete'):
 43         _dict_=delete_par(sql)
 44     else:
 45         print('輸入有誤,請重新輸入!')
 46     return _dict_#返回解析完成的列表
 47 
 48 
 49 def select_par(sql):#select語句的解析函數
 50     list_key=parsing(sql,index_select=-1,index_from=-1,index_where=-1,select_=select_,where_=where_,from_=from_)#查詢調用
 51     return list_key
 52 def update_par(sql):#update語句的解析函數
 53     list_key=parsing(sql,index_update=-1,index_set=-1,update_=update_,set_=set_,where_=where_)#更新修改調用
 54     return list_key
 55 def insert_par(sql):#insert語句的解析函數
 56     list_key=parsing(sql,index_insert=-1,index_into=-1,index_values=-1,insert_=insert_,values_=values_)#添加調用
 57     return list_key
 58 
 59 def delete_par(sql):#delete語句的解析函數
 60     list_key=parsing(sql,index_delete=-1,index_from=-1,index_where=-1,delete_=delete_,where_=where_,from_=from_)#刪除調用
 61     return list_key
 62 
 63 
 64 
 65 
 66 def where_format(where_list):#格式化where 子句函數
 67     #print(where_list)
 68     list_format=[]
 69     key_=['and','or','like','not']
 70     str=''#字元連接變數
 71     for i in where_list:
 72         if len(i)==0:continue#如果為空就不連接
 73         if i not in key_:##如果不是關鍵字就進行連接
 74             str+=i
 75         elif i in key_ and len(str)!=0:
 76             list_format.append(str)#之前的字元串添加到列表
 77             list_format.append(i)#關鍵 字添加到列表
 78             str=''#清空變數 備用
 79         # if i in key_ and len(str)!=0:#如果迴圈到關鍵 字
 80         #     list_format.append(str)#之前的字元串添加到列表
 81         #     list_format.append(i)#關鍵 字添加到列表
 82         #     str=''#清空變數 備用
 83         # else:#如果不是關鍵字就進行連接
 84         #     str+=i#字元連接
 85         #     print(str)
 86     list_format.append(str)#最後的字元串
 87     #print(list_format)
 88     return list_format
 89 
 90 def select_format(select_list):#格式化select函數
 91     print(select_list)
 92     #str=''
 93     if select_list[0]=='*':#如果為* 就不改動
 94         pass
 95     else:
 96         # for i in select_list:#列表內容轉為字元串
 97         #     str+=i
 98         list_=str_conn(select_list).split(',')#字元串連接函數
 99         #list_=str.split(',')#
100         print(list_)
101     return list_
102 
103 #字元串連接函數
104 def str_conn(list):
105     str=''
106     for i in list:
107         str+=i
108     return str
109 
110 
111 def parsing(sql,**kwargs):#select語句的解析函數
112     list_l=sql.split(' ')#分割存為列表
113     index_from=-1#下標定義from
114     index_select=-1#select
115     index_where=-1#where
116     index_update=-1#update
117     index_set=-1#set
118     index_delete=-1#delete
119     index_insert=-1#insert
120     index_values=-1#valuse
121     list_key={'select':[],'update':[],'delete':[],'insert':[],'set':[],'from':[],'into':[],'where':[],'values':[]}#定義要處理的關鍵字字典
122     for index,i in enumerate(list_l):#獲取下標
123         if i==select_:#如果是關鍵字select字典下標
124             index_select=index
125         if i==update_:#如果是關鍵字update字典下標,全部轉為小寫
126             index_update=index
127         if i==set_:
128             index_set=index
129         if i==insert_:#如果是關鍵字insert字典下標
130             index_insert=index
131         if i==into_:
132             index_into=index
133         if i==values_:
134             index_values=index
135         if i==delete_:
136             index_delete=index
137         if i==from_:#如果是關鍵字from字典下標
138             index_from=index
139         if i==where_:#如果是關鍵字where字典下標
140             index_where=index
141 
142     for index,i in enumerate(list_l):#用下標界定,對進行關鍵字字典的添加
143         if index_select !=-1 and index>index_select and index<index_from:#在select和from中添加到select中,不為空時
144             list_key[select_].append(i)#添加當前值
145         if index_update !=-1 and index==index_update:#如果是update語句添加一個1值
146             list_key[update_].append(1)
147         if index_insert !=-1 and index==index_insert:#如果是insert語句添加一個1值
148             list_key[insert_].append(1)
149         if index_delete !=-1 and index==index_delete:#如果是delete語句添加一個1值
150             list_key[delete_].append(1)
151         if index_from!=-1 and  index>index_from and index<index_where:#添加from中的值
152             list_key[from_].append(i)
153         if index_set!=-1 and index>index_set and index<index_where:
154             list_key[set_].append(i)
155         if index_where!=-1 and index>index_where:
156             list_key[where_].append(i)
157         if index_values!=-1 and index>index_values:
158             list_key[values_].append(i)
159     if list_key.get(where_):#如果字典在的列表不為空
160         list_key[where_]=where_format(list_key.get(where_))#進行格式化,重新賦於字典,調用格式化函數
161     if list_key.get(select_):#如果字典select在的列表不為空
162         list_key[select_]=select_format(list_key.get(select_))#進行格式化,重新賦於字典
163     if list_key.get(values_):#如果字典values在的列表不為空
164         list_key[values_]=select_format(list_key.get(values_))#進行格式化,重新賦於字典
165     return list_key
166 
167 #執行部分
168 def sql_perform(sql_dict):#執行函數
169     print()
170 
171 def perform_select(sql_dict):#執行select操作的函數
172     select_dict=sql_dict
173     return select_dict#返回處理後的信息
174 
175 def perform_update(sql_dict):#執行update操作的函數
176     select_dict=sql_dict
177     return select_dict#返回處理後的信息
178 
179 def perform_insert(sql_dict):#執行insert操作的函數
180     select_dict=sql_dict
181     return select_dict#返回處理後的信息
182 
183 def perform_delete(sql_dict):#執行delete操作的函數
184     select_dict=sql_dict
185     return select_dict#返回處理後的信息
186 
187 
188 
189 
190 
191 
192 
193 print("\033[35;1m歡迎進入員工信息表查詢系統\033[0m".center(60,'='))
194 if __name__ =='__main__':
195     while True:
196         print('查詢修改示例'.center(50,'-').center(60,' '))
197         print('''
198         \033[32;1m1、 select name,age from staff_table where age>22\033[0m
199         \033[31;1m2、 UPDATE staff_table SET dept="Market" WHERE dept="IT"\033[0m
200         \033[33;1m3、 insert into staff_table values Alex Li,22,13651054608,IT,2013-04-01\033[0m
201         \033[32;1m3、 delete from staff_table where id=5 \033[0m
202         ''')
203         sql=input('sql->').strip()#定義顯示提示符
204         if sql=='exit':break#如果輸入exit退出
205         if sql==0:continue#如何沒輸入重新提示
206         sql_dict=sql_parsing(sql)#解析輸入的sql語句
207         print(sql_dict)
208         sql_action=sql_perform(sql_dict)#執行解析後的語句
209         file_name='db/staff_table'
210         #print(dict_info(file_name))#傳入要查詢的表名
211         user_info=dict_info(file_name)#傳入要查詢的表名,添加到字典
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 緩存 Laravel 給多種緩存系統提供豐富而統一的 API,緩存配置信息位於 config/cache.php,在這個文件中你可以為你的應用程式指定預設的緩存驅動,Laravel 支持當前流行的緩存系統,如非常棒的 Memcached 和 Redis 。 Memcached 1、配置 使用 Mem ...
  • 1.java概述 1. 前言 1.1 學習方法 1.2 推薦博客 當代程式員都應該養成寫博客、看博客的習慣 1.3 博客編輯神器 2. 內容:Java概述 2.1 Java語言發展史 2.1.1 電腦語言發展史 閱讀電腦語言之後回答幾個問題: 2.1.2 Java語言發展史 閱讀java語言之後 ...
  • 200 OK 請求成功。一般用於GET與POST請求 301 Moved Permanently 永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替 302 Found 臨時移動。與301類似。但資源只是臨時被移 ...
  • 分享一個VBA的一個把一個sheet中的多個table(每一個table又hyperlinks),分配在不同的sheet中的方法,做這個真的也是耗費了不少的腦細胞。 Option Explicit ’這個是一個好習慣 ’第一種方法,通過currentregion來判斷區域,但是不是很保險 Sub G ...
  • 本節探討Java中的動態代理,介紹其用法和基本實現原理,利用它實現簡單的AOP框架 ...
  • 一、從石油工程師到IT入門 本人是石油工程師,長期在中東兩伊邊境油田工作,常年漂泊在外。眾所周知,石油行業環境艱苦,長石油的地方不是在鳥不拉屎的沙漠,深山老林,就是在驚濤駭浪的海上平臺。記得第一次到伊拉克邊境的時候,里三層,外三層全是雇佣軍,警察和士兵把手,連井場都不能隨處亂走,因為聽說兩伊戰爭的時 ...
  • https://msdn.microsoft.com/en-us/library/d4cfawwc.aspx For the latest documentation on Visual Studio 2017, see Visual Studio 2017 Documentation. Resou ...
  • 最近對 newlib 中的啟動代碼 crt0 產生了興趣,於是就分析了下其代碼。crt0 的源碼位於 libgloss/arm/crt0.S,為了相容各種 ARM 架構,crt0.S 中有大量的條件判斷巨集定義,對於只關心 ARMv7e-M 的我來說很是痛苦。剛好手上有個基於 STM32F412 的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...