一.查询语句功能实现

  select id,name where age > '20'

name_value = {'id':0,'name':1,'age':2,'phone':3,'job':4}
sql = 'select id,name where age > 20'#sql = input('>>>').strip() def format_sql(sql):
sql = sql.replace('select', '') # 'select name , age where age > 20' 替换select为空
sql = sql.replace(' ', '') # 'name,agewhereage>20' 去掉空格
col, con = sql.split('where') # col = 'name,age',con = 'age>20' 以where切割,得到两个参数
if '*' in col:
col_lst = name_value.keys() #'*'代表所有的key值'id,'name','age,phone,'job
else:
col_lst = col.split(',') # col_lst = ['name','age'] 得到name,age
return col_lst,con # col_lst = ['name','age'] con = 'age>20' def read_file():#遍历文件里的内容
with open('userinfo', encoding='utf-8') as f:
for line in f:
line_lst = line.strip().split(',')
yield line_lst#返回一行内容 def show(con,col_l,symbol,condition):#con = age>20 col_l = ['name' ,symbo为l条件比较符号为>,condition为'int(con_value) < int(line_lst[num])
con_name, con_value = con.split(symbol) # con_name = 'age',con_value = 20 以条件比较符号>进行切割
for line_lst in read_file():#调用read_file()生成器函数
num = name_value[con_name] #age的值是2 num = 2
if eval(condition):#eval使字符串里的代码运行 int(con_value) < int(line_lst[num]
for col in col_l: # ['name','age']
print(line_lst[name_value[col]], end=' ')
#name_value[col]为2,3,取出line_lst列表索引为2,3的值
print() def select(sql):
# sql = 'select name,age where age>20'
col_l, con = format_sql(sql) # 调用format_sql函数 col_l = ['name', 'age'],con = age>20
if '>' in con:#判断比较符号是什么
show(con,col_l,'>','int(con_value) < int(line_lst[num])')#调用show()函数,
if '<' in con:
show(con, col_l, '<', 'int(con_value) > int(line_lst[num])')
if '=' in con:
show(con, col_l, '=', 'con_value == line_lst[num]')
if 'like' in con:
show(con, col_l, 'like', 'con_value in line_lst[num]') # 先判断一下是否是查操作
if sql.startswith('select'):
# 是查找操作
select(sql)#调用select函数
else:
print('是其他操作')
class Base:
def __init__(self):
self.func()
def func(self):
print('in base') class Son(Base):
def func(self):
print('in son')#in son s = Son()

最新文章

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 用户权限树的实现 -- 权限递归树
  2. vsftpd.conf 怎么保存
  3. Unity-Animator深入系列---FAQ
  4. Liunx系统学习一,liunx系统的目录结构及含义
  5. asp.net viewstate的模拟登陆
  6. 文本溢出、垂直外边距合并、BFC、hasLayout
  7. Angular - - ngChange、ngChecked、ngClick、ngDblclick
  8. hihocoder 1015题
  9. Django框架中的视图和模板
  10. Java类型转化报错
  11. Linux:crontab组件部署linux定时任务
  12. Keras RetinaNet github项目安装
  13. SQL Server2008R2循环语句
  14. HDU 6345(子串查询 暴力)
  15. Luogu P1896 [SCOI2005]互不侵犯
  16. centos6.8下搭建编译openwrt的环境
  17. 在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
  18. AJAX的一些基础和AJAX的状态
  19. java的前缀自增自减和后缀自增自减
  20. org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause

热门文章

  1. Java判断一个字符串是否是回文
  2. flutter dio网络请求封装实现
  3. [Leetcode]585. 2016年的投资(MySQL)
  4. 我的Python自学之路-003 字符串的知识
  5. Vue Render自定义tabled单元格内容
  6. 在Winform程序中使用Spire.Pdf实现页面添加印章处理
  7. 关于KeePass实现ssh协议的自动登录
  8. Spring学习(四)--Spring的IOC
  9. django 的基础设计
  10. C面向对象: 升级版本实现:同步逻辑、少量连续失败则增补、多次连续失败则拉长同步周期