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
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...