python基础之实现sql增删改查
# encoding:utf-8
# Author:"richie"
# Date:2017/8/2
import re key_l = ['id', 'name', 'age', 'phone', 'job']
# 提示信息
tip_str = "示例:\n\
select name, age where age>22\n\
select * where job=IT\n\
select * where phone like 133\n\
insert employee values ('Gates', '25', '17749792796', 'Teacher')\n\
delete from employee where name=egon\n\
update person set name=richie where age=22\
" flag = True
file_name = 'data.txt' def read_file(filename):
"""
读文件
:return:
"""
l = []
with open(filename, encoding='utf-8') as f_r:
for line in f_r.readlines():
line = line.strip().split(',')
l.append(line)
return l def write_file(f_name, data_l):
"""
写文件
:return:
"""
with open(f_name, 'w', encoding='utf-8') as f_w:
for item in data_l:
# 逗号分割写入文件
l = ','.join(item)
f_w.writelines(l+'\n')
return 'write ok' def condition_raw(col, select_l):
"""
查询行
:param col:
:param select_l:
:return:
"""
r_l = [] # 返回最终结果序列
new_l = [] # 每一行的索引 for item in col:
for i in select_l:
index = key_l.index(i)
new_l.append(item[index])
r_l.append(new_l)
new_l = []
return r_l def condition_col(term_l, message_l):
"""
查询列
:param term_l:
:param message_l:
:return:
"""
_l = []
if len(term_l) == 1 and '>' in term_l[0]:
l = term_l[0].split('>')
index = key_l.index(l[0])
for item in message_l:
if int(item[index]) > int(l[1]):
_l.append(item)
elif len(term_l) == 1 and '<' in term_l[0]:
l = term_l[0].split('<')
index = key_l.index(l[0])
for item in message_l:
if int(item[index]) < int(l[1]):
_l.append(item)
elif len(term_l) == 1 and '=' in term_l[0]:
l = term_l[0].split('=')
index = key_l.index(l[0])
for item in message_l:
if item[index].lower() == l[1].lower():
_l.append(item)
elif term_l[0] in key_l: # 判断输入的索引名是否在信息列表中
index = key_l.index(term_l[0])
for item in message_l:
if term_l[2] in item[index]:
_l.append(item)
return _l def select_command(cmd, message_l):
"""
查询命令
:param cmd:
:param message_l:
:return:
"""
result_l = []
if 'where' not in cmd and '*' in cmd:
result_l = message_l
elif 'where' not in cmd:
# 选择行
select_l = cmd[1:]
result_l = condition_raw(message_l, select_l)
else:
where_index = cmd.index('where')
select_l = cmd[1:where_index]
term_l = cmd[where_index + 1:]
if len(select_l) == 1 and select_l[0] == '*':
# 选择列
result_l = condition_col(term_l, message_l)
elif set(select_l).issubset(set(key_l)):
# 选择列
col = condition_col(term_l, message_l)
# 选择行
result_l = condition_raw(col, select_l) # 打印输出结果
for item in result_l:
if isinstance(item, list):
for i in item:
print(i, end=' ')
else:
print(item, end=' ')
print()
return 'select ok' def delete_command(f_name, cmd, message_l):
"""
删除命令
:param f_name: 文件名
:param cmd: 命令
:param message_l: 员工信息列表
:return: 写入是否成功
"""
where_index = cmd.index('where')
term_l = cmd[where_index + 1:]
# 查询要删除的列
re_l = condition_col(term_l, message_l)
# 删除要删除的列
for item in re_l:
message_l.remove(item)
# 写入文件
return write_file(f_name, message_l) def insert_command(f_name, cmd, message_l):
"""
插入数据
:param f_name: 文件名
:param cmd: 输入的命令
:param message_l: 员工信息表
:return: 写入文件是否成功
"""
index = 0
for item in cmd:
# 移除cmd中的括号
if '(' == item or ')' == item:
cmd.remove(item)
index = cmd.index('values')
# 切片获取命令
insert_data = cmd[index+1:]
# 插入数据
insert_data.insert(0, '%d' % (len(message_l) + 1))
message_l.append(insert_data)
return write_file(f_name, message_l) def update_command(f_name, cmd, message_l):
"""
修改数据
:param f_name: 文件名
:param cmd: 命令
:param message_l: 员工信息
:return: 写入是否成功
"""
where_index = cmd.index('where')
before_l = cmd[where_index-1].split('=')
key_index = key_l.index(before_l[0])
term_l = cmd[where_index + 1:]
re_l = condition_col(term_l, message_l)
for item in re_l:
i = message_l.index(item)
message_l.remove(item)
item[key_index] = before_l[1]
message_l.insert(i, re_l[0])
return write_file(f_name, message_l) def user_login():
"""
用户登录
:return:
"""
name = input('plz input account>>:').strip()
pass_wd = input('plz input password>>:').strip()
if name == 'richie' and pass_wd == '':
print('login ok')
return 1
else:
print('login failed')
return 0 def wrapper(f):
def inner(*args, **kwargs):
"""
装饰器,用户登录
:param args:
:param kwargs:
:return:
"""
if user_login():
print('\n' * 150) # 伪清屏
return f(*args, **kwargs)
return inner @wrapper # 装饰登陆功能
def func(f_name, message_l):
"""
用户查询功能函数
:param message_l:
:return:
"""
print('welcome to the User management system') while True:
print("命令说明:\n\033[1;35m" + tip_str + "\033[0m")
cmd = input('please input your commend>>:')
if len(cmd) == 0:
continue
elif cmd == 'exit':
break
result = ''
cmd = [x for x in re.split(' |\'|, ', cmd) if x]
if cmd[0] == 'select':
result = select_command(cmd, message_l)
elif cmd[0] == 'insert':
result = insert_command(f_name, cmd, message_l)
elif cmd[0] == 'update':
result = update_command(f_name, cmd, message_l)
elif cmd[0] == 'delete':
result = delete_command(f_name, cmd, message_l)
print(result)
# 函数调用执行
msg_l = read_file(file_name)
func(file_name, msg_l)
文件数据
1,Alex,22,13651054608,IT
2,Egon,23,13304320533,Tearcher
3,nezha,25,1333235322,IT
4,Gates,25,17749792796,Teacher
5,Gates,25,17749792796,Teacher
# encoding:utf-8
# Author:"richie"
# Date:2017/8/2
import re key_l = ['id', 'name', 'age', 'phone', 'job']
# 提示信息
tip_str = "示例:\n\
select name, age where age>22\n\
select * where job=IT\n\
select * where phone like 133\n\
insert employee values ('Gates', '25', '17749792796', 'Teacher')\n\
delete from employee where name=egon\n\
update person set name=richie where age=22\
" flag = True
file_name = 'data.txt' def read_file(filename):
"""
读文件
:return:
"""
l = []
with open(filename, encoding='utf-8') as f_r:
for line in f_r.readlines():
line = line.strip().split(',')
l.append(line)
return l def write_file(f_name, data_l):
"""
写文件
:return:
"""
with open(f_name, 'w', encoding='utf-8') as f_w:
for item in data_l:
# 逗号分割写入文件
l = ','.join(item)
f_w.writelines(l+'\n')
return 'write ok' def condition_raw(col, select_l):
"""
查询行
:param col:
:param select_l:
:return:
"""
r_l = [] # 返回最终结果序列
new_l = [] # 每一行的索引 for item in col:
for i in select_l:
index = key_l.index(i)
new_l.append(item[index])
r_l.append(new_l)
new_l = []
return r_l def condition_col(term_l, message_l):
"""
查询列
:param term_l:
:param message_l:
:return:
"""
_l = []
if len(term_l) == 1 and '>' in term_l[]:
l = term_l[].split('>')
index = key_l.index(l[])
for item in message_l:
if int(item[index]) > int(l[]):
_l.append(item)
elif len(term_l) == 1 and '<' in term_l[]:
l = term_l[].split('<')
index = key_l.index(l[])
for item in message_l:
if int(item[index]) < int(l[]):
_l.append(item)
elif len(term_l) == 1 and '=' in term_l[]:
l = term_l[].split('=')
index = key_l.index(l[])
for item in message_l:
if item[index].lower() == l[].lower():
_l.append(item)
elif term_l[] in key_l: # 判断输入的索引名是否在信息列表中
index = key_l.index(term_l[])
for item in message_l:
if term_l[] in item[index]:
_l.append(item)
return _l def select_command(cmd, message_l):
"""
查询命令
:param cmd:
:param message_l:
:return:
"""
result_l = []
if 'where' not in cmd and '*' in cmd:
result_l = message_l
elif 'where' not in cmd:
# 选择行
select_l = cmd[:]
result_l = condition_raw(message_l, select_l)
else:
where_index = cmd.index('where')
select_l = cmd[:where_index]
term_l = cmd[where_index + :]
if len(select_l) == 1 and select_l[] == '*':
# 选择列
result_l = condition_col(term_l, message_l)
elif set(select_l).issubset(set(key_l)):
# 选择列
col = condition_col(term_l, message_l)
# 选择行
result_l = condition_raw(col, select_l) # 打印输出结果
for item in result_l:
if isinstance(item, list):
for i in item:
print(i, end=' ')
else:
print(item, end=' ')
print()
return 'select ok' def delete_command(f_name, cmd, message_l):
"""
删除命令
:param f_name: 文件名
:param cmd: 命令
:param message_l: 员工信息列表
:return: 写入是否成功
"""
where_index = cmd.index('where')
term_l = cmd[where_index + :]
# 查询要删除的列
re_l = condition_col(term_l, message_l)
# 删除要删除的列
for item in re_l:
message_l.remove(item)
# 写入文件
return write_file(f_name, message_l) def insert_command(f_name, cmd, message_l):
"""
插入数据
:param f_name: 文件名
:param cmd: 输入的命令
:param message_l: 员工信息表
:return: 写入文件是否成功
"""
index = 0
for item in cmd:
# 移除cmd中的括号
if '(' == item or ')' == item:
cmd.remove(item)
index = cmd.index('values')
# 切片获取命令
insert_data = cmd[index+:]
# 插入数据
insert_data.insert(, '%d' % (len(message_l) + ))
message_l.append(insert_data)
return write_file(f_name, message_l) def update_command(f_name, cmd, message_l):
"""
修改数据
:param f_name: 文件名
:param cmd: 命令
:param message_l: 员工信息
:return: 写入是否成功
"""
where_index = cmd.index('where')
before_l = cmd[where_index-].split('=')
key_index = key_l.index(before_l[])
term_l = cmd[where_index + :]
re_l = condition_col(term_l, message_l)
for item in re_l:
i = message_l.index(item)
message_l.remove(item)
item[key_index] = before_l[]
message_l.insert(i, re_l[])
return write_file(f_name, message_l) def user_login():
"""
用户登录
:return:
"""
name = input('plz input account>>:').strip()
pass_wd = input('plz input password>>:').strip()
if name == 'richie' and pass_wd == '123':
print('login ok')
return 1
else:
print('login failed')
return 0 def wrapper(f):
def inner(*args, **kwargs):
"""
装饰器,用户登录
:param args:
:param kwargs:
:return:
"""
if user_login():
print('\n' * ) # 伪清屏
return f(*args, **kwargs)
return inner @wrapper # 装饰登陆功能
def func(f_name, message_l):
"""
用户查询功能函数
:param message_l:
:return:
"""
print('welcome to the User management system') while True:
print("命令说明:\n\033[1;35m" + tip_str + "\033[0m")
cmd = input('please input your commend>>:')
if len(cmd) == :
continue
elif cmd == 'exit':
break
result = ''
cmd = [x for x in re.split(' |\'|, ', cmd) if x]
if cmd[] == 'select':
result = select_command(cmd, message_l)
elif cmd[] == 'insert':
result = insert_command(f_name, cmd, message_l)
elif cmd[] == 'update':
result = update_command(f_name, cmd, message_l)
elif cmd[] == 'delete':
result = delete_command(f_name, cmd, message_l)
print(result)
# 函数调用执行
msg_l = read_file(file_name)
func(file_name, msg_l)
文件数据
1,Alex,22,13651054608,IT
2,Egon,23,13304320533,Tearcher
3,nezha,25,1333235322,IT
4,Gates,25,17749792796,Teacher
5,Gates,25,17749792796,Teacher
python基础之实现sql增删改查的更多相关文章
- python基础之字典以及增删改查
字典:字典是python中唯一的一个映射类型,主要形式为 dic = {key1:value,key2:value2,....} 字典中key的值是唯一的,主要关系到HASH算法,并且key的值必须是 ...
- python 基础_ 数组的 增删改查3
数组是运用在多个数据存在一个变量中的,而在调用的时候可以调用所需要的数组. 创建数组 a = ['a','b','c','d','f'] #创建一个数组a其中有5个元素分别是abcdf 1.查询.所谓 ...
- python 基础知识 列表的 增删改查 以及迭代取值
""" python 列表 通用方法 元组.数组.字典 取值方法 [] 列表中可以存储不同类型的数据 函数 封装了独立的功能可以直接调用 函数名(参数) 方法 和函数类似 ...
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- python manage.py shell 的增删改查
python manage.py shell 的增删改查 guoguo-MacBook-Pro:myblog guoguo$ python manage.py shell Python 3.5.1 ( ...
- 记一些Python(Pymysql)建表、增删改查等基础操作(小白适用)
1.读取sql文件创建数据表 有一个形如下图的sql文件,使用python读取文件并在数据库中创建所有的表. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道 ...
- python 10min系列之实现增删改查系统
woniu-cmdb 奇技淫巧--写配置文件生成增删改查系统 视频教程 项目主页跪求github给个star, 线上demo,此页面都是一个配置文件自动生成的 详细的文章介绍和实现原理分析会发布在我的 ...
- Linq to sql 增删改查(转帖)
http://blog.csdn.net/pan_junbiao/article/details/7015633 (LINQ To SQL 语法及实例大全) 代码 Code highlightin ...
- Python之实例对象的增删改查
#实例对象的增删改查p1 = ChinesePeople('wangyue')#print (p1.__dict__) #查看实例对象的属性#print (p1.name)(p1.play_ball( ...
随机推荐
- Android Studio 提示android.support.v4不存在的解决方法
最近想学习仿QQ列表的侧滑删除功能,看完资料之后,发现有一堆错误,看了一下,说是不存在android.support.v4包不存在,浪费了一个多小时,终于是找到了解决方法,便是记录下来 打开file- ...
- 关于Sublime Text编辑器的实用技巧
本文转载至一篇博文,为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text ...
- iOS中self与_的区别
同时我们发现在我们访问我们声明的变量时,会有self. 和 以"_"开头的访问方式,那么这两种方式到底有什么样的区别呢? 我们来一起看一下: @property (retain, ...
- iOS 中Block以及Blocks的使用,闭包方法调用
OC: -(void)dataWithUrl:(NSString*)string AndId:(NSInteger)id returnName:(void(^)(NSString*name))back ...
- 为了CET-4!
Directions For tiis part,you are allowed 30 minutes to write an essay.Suppose there are two options ...
- Akka Cluster简介与基本环境搭建
akka集群是高容错.去中心化.不存在单点故障以及不存在单点瓶颈的集群.它使用gossip协议通信以及具备故障自动检测功能. Gossip收敛 集群中每一个节点被其他节点监督(默认的最大数量为 ...
- vs2015企业版密钥
专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2 企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- ArcGIS API for JavaScript 4.2学习笔记[6] goTo()地图动画
这是个很有意思的例子,不过例子给的比较复杂,需要查很多API,我会在文章最后给出关键的类和属性解释. 同样发现一个很有意思的事儿:博客园似乎有爬虫,我4号发布的blogs,5号就在百度和google搜 ...
- ArcGIS 网络分析[2.2] 服务区分析
什么是服务区? 我们先提一个很常见的社会现象:一个医院,如果要发起抢救,那么10分钟内能去多远? 时间就是生命,当结合道路网的阻力进行最短路径分析时,得到的可达的覆盖区域,这个区域就是服务区. 服务区 ...
- bzoj 4538: [Hnoi2016]网络
Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服 ...