python练习题

表内容有以下列:
id,name,age,phone,dept,enroll_date

//db1 数据库名  //emp表名 数据库表名和对应文件要关联上。

通过PYTHON脚本模拟实现以下SQL语句:

增删改查

sql>select
sql>select * from db1.emp   
sql>select * from db1.emp limit 3  // 查前3条
sql>select * from db1.emp where id > 24
sql>select * from db1.emp where name like 李
sql>select * from db1.emp where id >10 and id < 14 or name like 李
sql>select * from db1.emp where not id > 3
sql>select name from db1.emp
sql>select name from db1.emp where
查询到的信息以列表的形式显示出来

sql>insert id 递增  以phone做唯一键,phone存在即提示
sql>insert into db1.emp values ‘Tom,23,13212323276,运维,2017-05-16‘
sql>insert successful

delete
sql>delete from db1.emp where id > 25
sql>delete successful

update  update staff_table set dept=Market,phone=13566677787  where dept = 运维
sql>update db1.emp set name=‘sb‘ where id=24
sql>update db1.emp set name=‘alex‘ where name like sb
sql>update successful

sql>exit

脚本内容如下:

##################################################################

#!/usr/bin/env python
# _*_ coding:utf-8 -*-
import sys

test_db_file=‘db1/emp‘
key_word = [‘select‘, ‘insert‘, ‘delete‘, ‘update‘, ‘from‘, ‘into‘, ‘set‘, ‘values‘, ‘where‘, ‘limit‘]
where_list=[‘>‘,‘<‘,‘like‘]
logic_list=[‘and‘,‘or‘,‘not‘]

# 判断有没有where
def check_where(db_ff,sql_ii):
    #db_ff为行内容,sql_ii为SQL语句的列表
    # 判断SQL中是否有where,并提取where后面的语句。
    if ‘where‘ in sql_ii:
        sel_index = int(sql_ii.index(‘where‘)) + 1
        where_info = sql_ii[sel_index:]
        #print(where_info)
        # 判断有没有逻辑条件。
        k=0
        for key_w in logic_list:
            if key_w in where_info:
                print(key_w)
                k=1
        if k==0:
            print(where_info)
    else:
        return db_ff

def file_all():
    # 提取所有行,返回一个列表OK。
    db_f = []
    with open(test_db_file, encoding=‘utf-8‘) as db_file:
        db_f1 = db_file.readlines()
        for f in db_f1:
            f = f.strip().split(‘,‘)
            db_f.append(f)
    return db_f
def limit_row(sel_num):
    # 提取limit限制的行数, sel_num为行数,OK
    db_f=file_all()
    limit_f=[]
    # sql_num 要显示的行数
    sel_num = int(sel_num)
    # 判断显示的行数要小于等于表的总行数。
    if len(db_f) >= sel_num:
        for i in range(0, sel_num):
            limit_f.append(db_f[i])
        return limit_f
    else:
        print("Not have %s row in table! " % sel_num)
    return limit_f
def get_column(column_name,db_ff):
    # 提取某一列column_name为列名,db_ff为提取出来的行内容。OK
    column_names = file_all()[0]  ## 获取表的列名
    # print(column_names)
    if column_name in column_names:
        column_nu = column_names.index(column_name)
        for db_fff in db_ff:
            print(db_fff[column_nu])

def db_select(select,*sql_i):
    for sql_ii in sql_i:
        pass
        #print(sql_ii)
    # 取匹配行的所有内容
    if sql_ii[0] == ‘*‘:
        db_ff=file_all()
        #print(db_f)
        # 判断SQL里是否有limit限制,如果有就获取限制的行数。
        if ‘limit‘ in sql_ii:
            # 获取限制的行数
            sel_index=int(sql_ii.index(‘limit‘))+1
            sel_num=sql_ii[sel_index]
            #print(sel_num)
            db_ff=limit_row(sel_num)
            print(db_ff)
        else:
            print(db_ff)
        check_where(db_ff, sql_ii)
    # 取匹配行的某一列
    else:
        # 先判读是取所有行,还是取limit限制的行,然后从这些行中提取某一列
        if ‘limit‘ in sql_ii:
            # 获取限制的行数
            sel_index=int(sql_ii.index(‘limit‘))+1
            sel_num=sql_ii[sel_index]
            db_ff=limit_row(sel_num)
        else:
            db_ff = file_all()
        print(db_ff)
        get_column(sql_ii[0], db_ff)
        #pass

##########################################################
def db_delete():
    pass
def db_insert():
    pass
def db_update():
    pass

if __name__ == "__main__":
    #print(file_all())
    #print (limit_row(file_all(), ‘2‘))
    #a=db_select()
    #print(a)
    while True:
        sql_info=input("sql>")
        sql_info=sql_info.strip().split()
        print("sql_info:", sql_info)
        if sql_info[0].lower() == ‘quit‘ or sql_info[0].lower() == ‘exit‘:
            print(‘退出‘)
            sys.exit(0)
        elif sql_info[0].lower()==‘select‘:
            db_select(‘select‘,sql_info[1:])

时间: 2024-10-03 17:05:07

python练习题的相关文章

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自<head_first_python>~~ python列表:以中括号开始和结束"[]":列表项以逗号","分隔开,使用赋值操作符"="赋予一个标识符.如: movies=["the holy",1975,"terry jones",91,["graham",["michael","john",&qu

Python练习题 028:求3*3矩阵对角线数字之和

[Python练习题 028] 求一个3*3矩阵对角线元素之和 ----------------------------------------------------- 这题解倒是解出来了,但总觉得代码太啰嗦.矩阵这东西,应该有个很现成的方法可以直接计算才对-- 啰嗦代码如下: str = input('请输入9个数字,用空格隔开,以形成3*3矩阵:') n = [int(i) for i in str.split(' ')] #获取9个数字 mx = [] #存储矩阵 for i in ra

Python练习题 027:对10个数字进行排序

[Python练习题 027] 对10个数字进行排序 --------------------------------------------- 这题没什么好说的,用 str.split(' ') 获取输入的10个数字,然后用 lst.sort() 就完成排序了.代码如下: s = input('请输入10个数字,以空格隔开:') n = [int(x) for x in s.split(' ')] n.sort() print(n) 输出结果如下: 请输入10个数字,以空格隔开:3 23 4

Python练习题 023:比后面的人大2岁

[Python练习题 023] 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问第一个人,他说是10岁.请问第五个人多大? ----------------------------------------------------- 这题真是--用心算就能算出来好吗?好吧,应该又是要训练递归函数,最近这几题总是跟递归纠缠不清.不过,似乎慢慢理解了递归函数的写法了.本题代码如下:

Python练习题 003:完全平方数

[Python练习题 003]一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ------------------------------------------------- 所谓的“完全平方数”,就是开完根号仍然是整数. 数学渣是这么思考的:假设这个数 i 在10000以内.第一步:x = sqrt(i+100).如果 x == floor(x),则证明 x 是个整数.第二步道理也相同,但要记得把 x**2 把根号还原回来,再加上 168,然后再来

Python练习题 016:猴子吃桃

[Python练习题 016] 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下一个桃子了.求第一天共摘了多少. -------------------------------------------------- 这题得倒着推.第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 -

Python练习题 009:水仙花数

[Python练习题 009] 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方. ---------------------------------------------------------------------- 这题也是送分题,只要能把任意三位数的百位.十位.个位拆解出来就好办了.思路:将任意3位数除以100再向下取整,即可得到百位数.将这个3位数减去(百位数*10

Python练习题 025:判断回文数

[Python练习题 025] 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. ----------------------------------------------- 做题做到现在,这种题目已经很轻车熟路了.希望下一题能增加点难度啊~~~ x = input('请输入一个5位数:') if x[0] == x[4] and x[1] == x[3]: print('%s是个回文数' % x) else: print('%s不是回文数' % x) 输

Python练习题 015:一颗自由落地的球

[Python练习题 015] 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹多高? ---------------------------------------------------------- 这题其实都可以笔算出来,因为也就是落地10次.看网上给出的结果也是五花八门,也不知道自己算的对不对,请大神们赐教. 我的思路是:除了第1次从100米高度落下,其余的9次都经历了"反弹-落地"的过程,每个过程来回走过的长