Python实现SQL模拟功能
来源:互联网 发布:乌鲁木齐网页seo 编辑:程序博客网 时间:2024/06/05 15:34
博客核心内容:
- Python实现insert插入功能
- Python实现delete删除功能(remove、rename)
- Python实现update更新功能(remove、rename)
- Python实现:将列表中的内容对号入座的放到相应的字典当中(警报场景1)
- Python实现:where列表中的内容进行再处理(警报场景2)
- Python实现:用where条件去过滤单行记录
- Python实现:如何获取单行记录中指定的字段数据(select id,name)
- Python实现select查询功能
- Python实现select查询功能(我自己实现的:带截图)
1、Python实现insert插入功能
插入之前db1.emp文件中的内容示例:
1,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-285,董七,25,18556267967,运维6,2014-5-276,李张明,26,18122677967,测试,2017-5-217,赵四,28,18523267967,运维6,2014-5-228,董七,25,18556267967,运维6,2014-5-27
核心代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-def insert(sql): """ function:该函数的功能是进行文本插入操作 :param sql: 用户传进来的sql语句 :return: 无 """ sql_list = sql.split() db_name,table_name = sql_list[2].split(".") #获取最后一行代码的ID last_id = "" with open("%s/%s"%(db_name,table_name),mode="r",encoding="utf-8") as fr: content_list = fr.readlines() last_record = content_list[-1] last_id = last_record.split(",")[0] #拼出最后一行记录,在操作的过程中注意insert的返回值是None record_list = sql_list[-1].split(",") record_list.insert(0,str(int(last_id)+1)) record_line = ",".join(record_list) #向列表中写入记录 with open("%s/%s"%(db_name, table_name), mode="a", encoding="utf-8") as fw: fw.write("\n"+record_line) #记住要刷新纪录 fw.flush()if __name__ == '__main__': while True: sql = input("sql> ").strip() insert(sql)
运行代码:
sql> insert into db1.emp values 张东,25,18556267367,运维6,2014-5-28sql> insert into db1.emp values 刘恩,25,18556227967,运维6,2014-4-27
插入之后db1.emp文件的内容示例:
1,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-285,董七,25,18556267967,运维6,2014-5-276,李张明,26,18122677967,测试,2017-5-217,赵四,28,18523267967,运维6,2014-5-228,董七,25,18556267967,运维6,2014-5-279,张东,25,18556267367,运维6,2014-5-2810,刘恩,25,18556227967,运维6,2014-4-27
后续可以在拼接最后一行记录的时候进行优化,从而替换掉21/22/23三行代码.
#拼出最后一条记录 last_record = last_id+","+sql_list[-1]
2、Python实现delete删除功能文件修改的思路:
1、读源文件的内容,然后一行一行的向新文件中写.
2、通过os模块将源文件给删除.
3、将新文件重命名为源文件的名字.
源文件删除之前的情况:
1,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-285,董七,25,18556267967,运维6,2014-5-276,李张明,26,18122677967,测试,2017-5-217,赵四,28,18523267967,运维6,2014-5-228,董七,25,18556267967,运维6,2014-5-27
代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-import osdef delete(sql): """ function:该函数的功能是删除表中指定的行,此处我的where条件就是=号的方式 :param sql:用户传进来的SQL语句 :return: 返回值是删除的记录条数和删除是否成功 """ sql_list = sql.split() db_name,table_name = sql_list[2].split(".") #生成备份文件的名字 back_name = table_name+"_bak" #获取判断字段 field,value = sql_list[4],sql_list[6] title = "id,name,age,phone,dept,enroll_date" del_count = 0 with open("%s/%s"%(db_name,table_name),"r",encoding="utf-8") as fr,\ open("%s/%s"%(db_name,back_name),"w",encoding="utf-8") as fw: #只有在第一次打开文件的时候才会清空整个文件的内容 for line in fr.readlines(): user_dict = dict(zip(title.split(","),line.strip().split(","))) if user_dict.get(field) == value: del_count += 1 else: fw.write(line) fw.flush() #在整个操作结束之后,删除源文件,并对新文件进行重命名 os.remove("%s/%s"%(db_name,table_name)) os.rename("%s/%s"%(db_name,back_name),"%s/%s"%(db_name,table_name)) return [[del_count],["delete successful"]]if __name__ == '__main__': while True: sql = input(">").strip() log_list = delete(sql) print(log_list)
运行示例:
>delete from db1.emp where id = 2[[1], ['delete successful']]>delete from db1.emp where name = 李四[[0], ['delete successful']]>delete from db1.emp where name = 赵四[[1], ['delete successful']]
删除文件之后的文件内容:
1,张德,25,18330267967,IT,2017-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-285,董七,25,18556267967,运维6,2014-5-276,李张明,26,18122677967,测试,2017-5-218,董七,25,18556267967,运维6,2014-5-27
3、Python实现update更新功能update更新之前文件中的内容:
1,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-286,李张明,26,18122677967,测试,2017-5-217,赵六,28,18523267967,运维6,2014-5-228,Alex,25,18556267967,运维6,2014-5-27
代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-import osdef update(sql): """ function:用于进行记录插入操作 :param sql: 用户传进来的sql语句 :return: 日志列表 """ sql_list = sql.split() db_name,table_name = sql_list[1].split(".") #创建备份文件的名字 back_name = table_name+"_bak" print("sql_list is \033[41;1m%s\033[0m"%sql_list) change_field = sql_list[3] change_value = sql_list[5] where_field = sql.partition("where")[2].split("=")[0].strip() where_value = sql.partition("where")[2].split("=")[1].strip() title = "id,name,age,phone,dept,enroll_date" update_count = 0 with open("%s/%s"%(db_name,table_name),"r",encoding="utf-8") as fr, \ open("%s/%s"%(db_name,back_name),"w",encoding="utf-8") as fw: for line in fr.readlines(): #拼出用户的相关信息 user_info = dict(zip(title.split(","),line.strip().split(","))) if user_info[where_field] == where_value: user_info[change_field] = change_value.strip("'") #构建插入的记录 line_list = [] #下面这一步骤值得学习:先转化成list,在拼接成字符串 for i in title.split(","): line_list.append(user_info.get(i)) line_record = ",".join(line_list) fw.write(line_record+"\n") update_count += 1 else: fw.write(line) #所有操作完之后之后再刷新一下缓冲区 fw.flush() os.remove("%s/%s" % (db_name, table_name)) os.rename("%s/%s" % (db_name, back_name), "%s/%s" % (db_name, table_name)) return [[update_count], ["update successful"]]if __name__ == '__main__': sql = input(">").strip() log_list = update(sql) print(log_list)
运行代码:
>update db1.emp set name = 'sb' where name = Alexsql_list is ['update', 'db1.emp', 'set', 'name', '=', "'sb'", 'where', 'name', '=', 'Alex'][[0], ['update successful']]
运行后文件的内容:
1,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-286,李张明,26,18122677967,测试,2017-5-217,赵六,28,18523267967,运维6,2014-5-228,sb,25,18556267967,运维6,2014-5-27
4、Python实现:将列表中的内容对号入座的放到相应的字典当中(警报场景1)代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-def handle_parse(sql_list): """ function:该函数的功能是将列表中的内容对号入座的放到相应的字典当中 :param sql: 用户传进来的列表形式的数据 :return: sql_dict数据 """ print("sql_list is %s"%sql_list) sql_dict = { "select":[], "from":[], "where":[], "limit":[] } tag = False key = "" for item in sql_list: if tag and item in sql_dict: tag = False if not tag and item in sql_dict: tag = True key = item continue if tag: sql_dict[key].append(item) return sql_dictif __name__ == '__main__': sql_list = input(">").strip().split() sql_dict = handle_parse(sql_list) print("sql_dict is %s"%sql_dict)
运行结果:
>select id,name from db1.emp where not id >= 3 limit 2sql_list is ['select', 'id,name', 'from', 'db1.emp', 'where', 'not', 'id', '>=', '3', 'limit', '2']sql_dict is {'from': ['db1.emp'], 'where': ['not', 'id', '>=', '3'], 'limit': ['2'], 'select': ['id,name']}Process finished with exit code 0
除了select之外,insert、update、delete等操作都可以使用这种方式对号入座。
5、Python实现:where列表中的内容进行再处理(警报场景2)代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-def handle_parse(where_list): """ function:本函数的功能是对sql_list中的数据进行进一步的处理 :param sql_list: ['id', '>', '10', 'and', 'id', '<', '14', 'or', 'name', 'like', '李'] :return: [['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] """ sens_list = ['and','or','not'] where_result = [] temp = [] tag = False sens_word = "" for item in where_list: if item in sens_list: tag = True if temp:where_result.append(temp) temp = [] sens_word = item if not tag and item not in sens_list: temp.append(item) if tag and item not in sens_list: tag = False where_result.append(sens_word) sens_word = "" temp.append(item) else: where_result.append(temp) return where_resultif __name__ == '__main__': where_list = ['id', '>', '10', 'and', 'id', '<', '14', 'or', 'name', 'like', '李'] print(where_list) where_list = handle_parse(where_list) print("%s"%where_list)
运行结果:
['id', '>', '10', 'and', 'id', '<', '14', 'or', 'name', 'like', '李'][['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']]
问题注意:temp = []不要写成list.clear(temp)
6、Python实现用where条件去过滤单行记录#!/usr/bin/python# -*- coding:utf-8 -*-def logic_action(user_dict,where_list): """ function:通过where列表中的条件对文本进行过滤操作 :param user_dict: 用户的记录字典形式:单行文本 :param where_list: where条件列表形式[['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] :return: 返回逻辑值真或假 """ logic_result = [] for item in where_list: if (type(item) == list): field,label,value = item line_value = user_dict[field] if label == "=": label = "==" if value.isdigit(): value = int(value) line_value = int(line_value) if label != 'like': item = str(eval("%s%s%s" %(line_value,label,value))) else: if value in line_value: item = 'True' else: item = 'False' logic_result.append(item) logic_str = ' '.join(logic_result) print(logic_str) logic_res = eval("%s"%logic_str) return logic_resif __name__ == '__main__': user_dict = {'enroll_date': '2014-5-27', 'dept': '运维6', 'name': '张明', 'age': '25', 'id': '1', 'phone': '18556267967'} where_list = [['age', '=', '24'], 'and', ['id', '<', '14'], 'and', ['name', 'like', '张']] logic_res = logic_action(user_dict, where_list) print("logic_res is %s"%logic_res)
运行结果:
False and True and Truelogic_res is FalseProcess finished with exit code
7、如何获取当行记录中指定的字段数据代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-"""function:获取文本当中指定的字段数值"""if __name__ == '__main__': db_name = "db1" table_name = "emp" title = "id,name,age,phone,dept,enroll_data" fields_list = ["age","phone","dept"] final_result = [] with open("%s/%s"%(db_name,table_name),"r",encoding="utf-8") as fr: for line in fr.readlines(): #通过zip形式处理单行记录 user_info = dict(zip(title.split(","),line.strip().split(","))) temp = [] for field in fields_list: temp.append(user_info[field]) final_result.append(temp) for record in final_result: print(record)
运行结果:
['25', '18330267967', 'IT']['25', '19230267967', '运维']['35', '15673026796', 'IT']['29', '18122263467', '测试']['25', '18556267967', '运维6']['26', '18122677967', '测试']['28', '18523267967', '运维6']['25', '18556267967', '运维6']Process finished with exit code 0
8、Python实现select查询功能代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-import osdef select_parse(sql): """ function:该函数的功能是进行select查询操作 :param sql: 用户传进来的sql语句 :return: 返回操作日志 """ #定义一个存储结构,以字典的形式进行存储 sql_list = sql.split() #用一个字典结构去存储相应的数据,方便处理数据 sql_dict = handle_parse(sql_list) return sql_dictdef handle_parse(sql_list): """ function:用字典的形式去存储数据 :param sql_list: 用户传进来的sql_list列表 :return: 返回字典形式的数据 """ sql_dict = { "select":[], "from":[], "where":[], "limit":[] } # 接下来就是如何将列表中的内容对号入座的放到相应的字典当中,利用到了警报 tag = False key = "" for item in sql_list: if tag and item in sql_dict: tag = False if not tag and item in sql_dict: tag = True key = item continue if tag: sql_dict[key].append(item) #此时我们需要对where中的条件进行一步的清洗处理 #现在的where条件:['id', '>', '10', 'and', 'id', '<', '14', 'or', 'name', 'like', '李'] #需要处理成的形式:[['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] #需要处理成的形式:['not', ['id', '>=', '3']] if sql_dict['where']: sql_dict['where'] = where_parse(sql_dict['where']) return sql_dictdef where_parse(where_list): """ function:该函数的作用是对where中的条件进行进一步的处理 :param sql_dict: ['id', '>', '10', 'and', 'id', '<', '14', 'or', 'name', 'like', '李'] :return: ['not', ['id', '>=', '3']] """ sens_list = ['and','or','not'] where_result = [] temp = [] opt = "" tag = False for item in where_list: if item in sens_list: tag = True #通过if条件来限制not这种情况 if temp: where_result.append(temp) temp = [] #注意:此处不能用list.clear(temp) opt = item if not tag and item not in sens_list: temp.append(item) if tag and item not in sens_list: tag = False where_result.append(opt) opt = "" temp.append(item) else: where_result.append(temp) return where_resultdef select(sql_dict): """ function:进一步实现查询功能 :param sql_dict: 用户传进来的字典形式的数据 :return: 日志列表 """ #1、先通过from获取对应的库名和表名 db_name,table_name = sql_dict["from"][0].split(".") fr = open("%s/%s"%(db_name,table_name),"r",encoding="utf-8") #2、我们去解析where语句中的内容,(这是重点) where_list = where_action(fr,sql_dict["where"]) #3、获取指定个数的行文本 limit_list = limit_action(where_list,sql_dict.get("limit")) #4、获取指定字段个数的信息 final_result = search_action(limit_list,sql_dict.get("select")) return final_resultdef search_action(limit_list,select_list): """ function:本函数的功能是获取指定字段个数的数据 :param limit_list: list列表 :param select_list: [id,name] :return: 返回一个指定字段的集合 """ #final_result用来存放最终的结果集合 final_result = [] title = "id,name,age,phone,dept,enroll_data" #先考虑*的情况 if select_list[0] == "*": final_result = limit_list else: fields_list = select_list[0].split(",") for line in limit_list: user_info = dict(zip(title.split(","),line.split(","))) #用一个临时列表去存放中间数据 r_l = [] for field in fields_list: r_l.append(user_info[field]) final_result.append(r_l) return final_resultdef limit_action(where_list,limit_list): """ function:获取指定个数的行文本: :param where_list: ['2,李四,25,19230267967,运维,2016-5-27\n', '6,李张明,26,18122677967,测试,2017-5-21\n'] :param limit_num: 数值 :return: """ limit_res = [] if limit_list: where_list = where_list[0:int(limit_list[0])] return where_listdef where_action(fr,where_list): """ function:通过where中的条件对文件中的内容进行过滤 :param fr: 文件的句柄 :param where_list: where列表中的内容 :return: 返回一个列表的内容 """ #res_list用于存放结果集 res_list = [] #先考虑是否含有where条件 if where_list: title = "id,name,age,phone,dept,enroll_date" for line in fr.readlines(): user_dict = dict(zip(title.split(","),line.strip().split(","))) #用logic_action logic_res = logic_action(user_dict,where_list) if logic_res: res_list.append(line) #在考虑无where条件 else: res_list = fr.readlines() return res_listdef logic_action(user_dict,where_list): """ function:通过where列表中的条件对文本进行过滤操作 :param user_dict: 用户的记录字典形式:单行文本 :param where_list: where条件列表形式[['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] :return: 返回逻辑值真或假 """ logic_result = [] for item in where_list: if (type(item) == list): field,label,value = item line_value = user_dict[field] if label == "=": label = "==" if value.isdigit(): value = int(value) line_value = int(line_value) if label != 'like': item = str(eval("%s%s%s" %(line_value,label,value))) else: if value in line_value: item = 'True' else: item = 'False' #如果不是列表类型,就是敏感词汇,此时直接加入到logic_result当中 logic_result.append(item) logic_str = ' '.join(logic_result) logic_res = eval("%s"%logic_str) return logic_resif __name__ == '__main__': while True: sql = input(">").strip() #此时的sql语句已经被解析成字典形式 sql_dict = select_parse(sql) final_result = select(sql_dict) for line in final_result: print(line)
运行结果示例:
>select * from db1.emp where id > 56,李张明,26,18122677967,测试,2017-5-217,赵四,28,18523267967,运维6,2014-5-228,董七,25,18556267967,运维6,2014-5-27>select id,name from db1.emp where id > 5['6', '李张明']['7', '赵四']['8', '董七']
9、Python实现select查询功能主要功能模块:
代码示例:
#!/usr/bin/python# -*- coding:utf-8 -*-import osdef select_parse(sql): """ function:解析成字典形式 :param sql: :return: """ sql_dict = { "select":[], "from":[], "where":[], "limit":[], } sql_list = sql.split() sens_list = ["select","from","where","limit"] tag = False key_word = "" for item in sql_list: if tag and item in sens_list: tag = False key_word = "" if not tag and item in sens_list: tag = True key_word = item continue if tag: sql_dict[key_word].append(item) return sql_dictdef select(sql_dict): """ function:本函数的功能是对实现select解析功能 :param sql_dict: {'select': ['*'], 'where': ['id', '>', '5'], 'from': ['db1.emp'], 'limit': ['2']} :return: 返回最终的结果集合 """ #1、获取数据库名和表名 db_name,table_name = sql_dict["from"][0].split(".") #2、获取整个文件的内容 content_list =[] with open("%s/%s"%(db_name,table_name),"r",encoding="utf-8") as fr: content_list = fr.readlines() #3、对where中的条件进行进一步的处理: [['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] sql_dict["where"] = where_parse(sql_dict["where"]) #4、通过where条件对content_list表中的内容进行第一次过滤 where_result = handle_where(content_list,sql_dict["where"]) #5、通过limit条件对where_result中的条件进行进一步的过滤 limit_result = limit_parse(where_result,sql_dict["limit"]) #6、输出select函数中指定的字段信息 final_result = select_handle(limit_result,sql_dict['select']) return final_resultdef select_handle(limit_result,select_list): """ function:获取指定的字段信息 :param limit_result: limit中的列表 :param select_list: 指定字段或者* :return: 返回一个列表 """ #先考虑*的情况 final_result = [] title = "id,name,age,phone,dept,enroll_date" if select_list[0] == "*": return limit_result else: for item in limit_result: temp = [] user_info = dict(zip(title.split(","),item.split(","))) for item in select_list[0].split(","): temp.append(user_info[item]) final_result.append(temp) return final_resultdef limit_parse(where_result,limit_list): """ function:通过limit过滤功能对where中的条件进行进一步的过滤 :param where_result: where过滤后产生的结果 :param limit_list: limit列表中的条件 :return: 返回limit过滤之后的列表 """ limit_result = [] if limit_list: limit_list = where_result[0:int(limit_list[0])] return limit_list else: #如果列表中的内容为空,则进行进一步的处理 return where_resultdef handle_where(content_list,where_list): """ function:通过where列表中的内容对content_list中的行文本进行进一步的过滤 :param content_list: 列表内容 :param where_list: where条件列表 :return: 返回一个过滤之后的列表 """ where_result = [] title = "id,name,age,phone,dept,enroll_date" if where_list: for line in content_list: #以字典的形式去封装相应的信息 user_info = dict(zip(title.split(","),line.split(","))) logic_result = logic_action(user_info,where_list) if logic_result: where_result.append(line) return where_result #如果where列表中内容为空,则直接返回整个列表内容 else: where_result = content_list return where_resultdef logic_action(user_dict,where_list): """ function:通过where列表中的条件对文本进行过滤操作 :param user_dict: 用户的记录字典形式:单行文本 :param where_list: where条件列表形式[['id', '>', '10'], 'and', ['id', '<', '14'], 'or', ['name', 'like', '李']] :return: 返回逻辑值真或假 """ logic_result = [] for item in where_list: if (type(item) == list): field,label,value = item line_value = user_dict[field] if label == "=": label = "==" if value.isdigit(): value = int(value) line_value = int(line_value) if label != 'like': item = str(eval("%s%s%s" %(line_value,label,value))) else: if value in line_value: item = 'True' else: item = 'False' logic_result.append(item) logic_str = ' '.join(logic_result) logic_res = eval("%s"%logic_str) return logic_resdef where_parse(where_list): """ function:对where中的条件进行进一步的处理 :param where_list: :return: """ where_result = [] sens_list = ["and","or","not"] key_word = "" temp = [] if where_list: tag = False for item in where_list: if item in sens_list: tag = True key_word = item if temp:where_result.append(temp) temp = [] if not tag and item not in sens_list: temp.append(item) if tag and item not in sens_list: tag = False where_result.append(key_word) key_word = "" temp.append(item) else: where_result.append(temp) return where_resultif __name__ == '__main__': while True: sql = input(">").strip() print("\033[50;1m%s\033[0m"%sql) sql_dict = select_parse(sql) final_result = select(sql_dict) for line in final_result: print(line)
运行结果示例:
>select * from db1.emp limit 3select * from db1.emp limit 31,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-27>select * from db1.emp where not id >= 3select * from db1.emp where not id >= 31,张德,25,18330267967,IT,2017-5-272,李四,25,19230267967,运维,2016-5-27>select * from db1.emp where id > 2 and id < 10 or name like 李select * from db1.emp where id > 2 and id < 10 or name like 李2,李四,25,19230267967,运维,2016-5-273,王五,35,15673026796,IT,2017-6-274,赵六,29,18122263467,测试,2017-5-285,董七,25,18556267967,运维6,2014-5-276,李张明,26,18122677967,测试,2017-5-217,赵四,28,18523267967,运维6,2014-5-228,董七,25,18556267967,运维6,2014-5-27>select id,phone from db1.emp where name like 李select id,phone from db1.emp where name like 李['2', '19230267967']['6', '18122677967']
阅读全文
1 0
- Python实现SQL模拟功能
- Python实现SQL查询功能示例
- Python模拟登陆新浪微博并实现投票功能
- Python模拟登陆5:实现图书馆预约功能
- SQL 模拟C# Split 功能
- C++模拟Python功能【一】
- C++模拟Python功能【二】
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- python实现模拟登录
- Java实现模拟路由功能
- 模拟实现Spring IoC功能
- opensns评论功能模拟实现
- java日期Date与Timestamp的equals差异
- Map的基本用法,增删查,排序
- Redis与Memcached的区别-都属于分布式缓冲架构产品
- 基于PHP+redis的秒杀系统
- 一小时包教会 —— webpack 入门指南
- Python实现SQL模拟功能
- 多个内容面板添加到内容面板的多个方向
- 利用pytorch实现的斗图机器人接口
- Androi布局以及基本button
- 一小时包教会 —— webpack 入门指南
- Redis 初次尝试
- MFC单文档分割窗口
- 项目实训——第三周(2)
- linux进程基础知识