zoukankan      html  css  js  c++  java
  • day26 Pyhton select功能语句实现

    一.查询语句功能实现

      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()
  • 相关阅读:
    Java基本开发环境搭建(适合第一次使用)
    在oracle中通过链接服务器(dblink)访问sql server
    C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
    经典SQL语句大全
    程序员为何要写技术博客?
    收缩SQL数据库日志
    利用脚本设置本机IP地址
    在SQL Server 2005中连接Oracle,完成查询、插入操作
    Centos 7 下 Corosync + Pacemaker + psc + HA-proxy 实现业务高可用
    Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用
  • 原文地址:https://www.cnblogs.com/pythonz/p/9982896.html
Copyright © 2011-2022 走看看