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()
day26 Pyhton select功能语句实现的更多相关文章
- Oracle【select from 语句】
Oracle[select from 语句] 1.select基本功能介绍1)投影操作:结果集是源表中的部分“列”2)选择操作:结果集是源表中的部分“行”3)选择操作+投影操作:结果集是源表中的部分 ...
- SQL UNION 和 UNION ALL 操作符\SQL SELECT INTO 语句\SQL CREATE DATABASE 语句
SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每 ...
- SQL SELECT INTO 语句
SQL SELECT INTO 语句可用于创建表的备份复件. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用 ...
- mysql下的SELECT INTO语句
在mysql下使用SELECT INTO语句会产生ERROR 1327 (42000): Undeclared variable:new_tablename 此时要使用: CREATE TABLE C ...
- 【转载】 Sqlserver中通过Select Into语句快速单表备份
在Sqlserver数据库中,备份数据的方式有很多种,可以使用整个数据库备份,也可使用导出包含数据和架构的脚本文件的方式来进行单表或多表数据的备份,其实还有一种Select Into的方式可以快速备份 ...
- SQL SELECT DISTINCT 语句
SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法 ...
- 翻译:SELECT INTO语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:SELECT INTO的译文. 原文:https://mariadb.com/kb/en/selectinto/我提交到MariaDB官方手册的译文:https://ma ...
- create table 使用select查询语句创建表的方法分享
转自:http://www.maomao365.com/?p=6642 摘要:下文讲述使用select查询语句建立新的数据表的方法分享 ---1 mysql create table `新数据表名` ...
- MySQL存储过程中使用SELECT …INTO语句为变量赋值
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...
随机推荐
- vue3剖析:响应式原理——effect
响应式原理 源码目录:https://github.com/vuejs/vue-next/tree/master/packages/reactivity 模块 ref: reactive: compu ...
- composer 三大组成部分
composer 三大组成部分:1. 仓库 2. 命令行下载器 3. 自动加载. 1. 仓库 公有仓库 https://packagist.org 私有仓库 https://packagist.com ...
- 单应用模式 - Layuiadmin单页版放入TP6.0的部署方案
thinkphp6.0.3单应用模式.layuiadmin1.4.0单页版,不需要tp的视图驱动 1. 复制 src.start 两个文件夹 2. 粘贴到 thinkphp 的 public 目录下 ...
- 图解并发与并行-分别从CPU和线程的角度理解
本文作为图解java并发编程的第三篇,前2篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 8成以上的java线程状态图都画错了--图解java并发第二篇 一.CPU角度的并发与 ...
- (超详细)动手编写-链表(Java实现)
目录 前言 概念 链表的设计 完整代码 List接口 抽象父类设计 链表-LinkedList 虚拟头结点 概念 结构设计 方法变动 双向链表 概念 双向链表设计 方法变动 循环链表 单向循环链表 双 ...
- python3 变量
python 3变量名不能以数字开头但能数字结尾 变量名大小写敏感 在多个单词组成的变量名中以下划线间隔
- JavaScript 异步编程
博客地址:https://ainyi.com/96 众所周知,JavaScript 是单线程的,但异步在 js 中很常见,那么简单来介绍一下异步编程 同步编程和异步编程 同步编程,计算机一行一行按顺序 ...
- Azure Cosmos DB介绍及演示
Azure Cosmos DB 是 Microsoft 提供的全球分布式多模型数据库服务.Cosmos DB是一种NoSql数据库,但是它兼容多种API.它支持SQL, MongoDB.Cassand ...
- vue2.5开发去哪儿了流程
初始化项目 在 src/assets 中添加样式初始化文件 reset.css ; border.css 本地引入取消延迟300毫秒的控件 cnpm i fastclick -S 在mian.js中引 ...
- JVM学习(一)什么是JVM
一.初识JVM(虚拟机) JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功 ...