目录
数据库
数据库就是存储数据的的地方,现在我们生活中几乎每时每刻做的事可能都有它的作用。今天来介绍 Tinydb 数据库,它适合初学者,非常容易上手。
Tinydb
说起数据库,大家可能主要想到 mysql,mogodb 这些比较常见的,但是他们对于初学者来说有点难, Tinydb 是比较简单易入门的数据库,总共只用了 1800 行 Python 代码,不依赖外部库,储存方式主要是 json 文件,也就是 Python 中的字典类型。
Tinydb 使用
安装
cmd 输入,
pip install tinydb
按回车,等待安装完成。
导入
from tinydb import TinyDB, Query, where
后面的 TinyDB,Query ,where 都是常用的功能,一会讲。
创建数据库
这时呢,我们就要使用 TinyDB() 功能来创建数据库,并把它保存在一个变量里。
如:
db = TinyDB('db.json')
注意这里的 T 和 DB 都是需要大写的,不然会报错。
主要格式就是:
变量 = TinyDB('数据库名.json')
其中 json 是文件后缀名,变量我们后面称之为数据库变量。
创建 table
table 可以形象的理解为一个表。
创建 table 的语句示例是这样的:
login_table = login_db.table("login")
大概格式是这样的:
table变量名 = 数据库变量名("table名")
增
数据库主要的功能就是增、删、查、改,现在来学习增。
增就是添加数据,既插入数据。
插入数据使用 insert() 函数,格式为
table变量名.insert({键:值,键:值...})
比如数据库是这样的
name | age |
小明 | 25 |
李华 | 23 |
这时我们要插入一条数据,姓名是 小红 ,年龄是 24,我们可以这样写:
table变量名.insert({"name":"小红","age":22})
table变量名需要在之前定义。
删
主要使用 remove 函数。
但是,我们首先要创建一个查询变量,格式为:
查询变量名 = Quary()
还是使用上面那个数据库,比如我们要删除 年龄 是24岁及以上的数据,可以这样写:
table变量.remove(查询变量名.age>=24)
这边可能有人不明白,删除数据为什么要用查询变量呢?
因为年龄是24岁以上实质要查找age属性>=24的数据,所以用查找。
查
在 "删" 中,我们创建了查询变量,查只需 search() 函数:
数据变量名 = table变量名.search(查询变量名.属性 ...)
还是那个例子,查找24岁以上的数据,可以这样写:
data = table变量名.search(查询变量名.age >= 24)
改
其实改就是更新,更新用 update()函数,比如我们要把小红的年龄改成100,可以这样写:
table变量.update({"age":100},where("name")=="小红")
小红:你干嘛~哎哟~
其他函数
使用 all() 函数可以获取数据库里全部内容,
data = table名.all()
示例
到这里,基本的函数都讲完了,接下来可以看一下示例
这是一个简单的餐厅系统,主要用到 Tinydb 储存数据
import sys
import time
from tinydb import TinyDB, Query, where
import os
import random
flag = 0
if not os.path.exists("restaurant"):
os.makedirs("restaurant")
# ------------------------------------ #
login_db = TinyDB("restaurant/login.json") #存储登录和注册信息
login_table = login_db.table("login")
# ----------------------------------- #
dish_info_db = TinyDB("restaurant/dish_info.json") #存储菜品信息
dish_info_table = dish_info_db.table("dish_info")
# ------------------------------------ #
pingjia_db = TinyDB("restaurant/pingjia.json")
pingjia_table = pingjia_db.table("pingjia")
# ----------------------------------- #
os.system("cls")
print("""-------欢迎光临----------
1.登录
2.注册
3.管理员登录
------------------------ """)
choose = int(input("请输入:"))
if choose == 1:
name = input("请输入用户名:")
search_name = Query()
# 查询一个用户名为 name 的数据
query_data = login_table.search(search_name.name == name)
if query_data == []:
print("无此用户名!")
password = int(input("请输入密码(纯数字):"))
if password == query_data[0]["password"]:
submit_ = query_data[0]["submit"]
user_name = name
print("登录成功!")
elif password != query_data[0]["password"]:
print("密码错误!")
elif choose == 2:
name = input("请输入用户名:")
search_name_2 = Query()
query_data_2 = login_table.search(search_name_2.name == name)
if query_data_2 == []:
password = int(input("请输入密码(纯数字):"))
login_table.insert({"name":name, "password":password, "submit":0})
submit_ = 0
user_name = name
print("注册成功!")
else:
print("用户名已存在!")
elif choose == 3:
name = input("输入管理员用户名:")
password = int(input("输入管理员密码:"))
if name == "root" and password == 123456:
flag = 1
print("登录成功!")
else:
print("输入错误!")
# ------------------------------------------------------ #
if flag == 0:
while True:
os.system("cls")
print(user_name, end=' ')
if submit_ < 10:
print("普通会员")
elif submit_ >= 10 and submit_ <= 20:
print("黄金会员")
elif submit_ > 20:
print("钻石会员")
print("""-------------------
1.点餐
2.评价
3.退出
4.看评价
-------------------
""")
op = int(input("请输入:"))
if op == 1:
dish_info_query = Query()
dish_info_list = dish_info_table.all()
# print(dish_info_list)
get_dish_dic = {}
spend_dic = {}
bag = []
spend_yuan = 0
while True:
os.system("cls")
for i in range(len(dish_info_list)):
print(str(i+1)+'.'+dish_info_list[i]["dish_name"]+" "+str(dish_info_list[i]["dish_spend"])+"元")
get_dish_dic[i+1]=[dish_info_list[i]["dish_name"]]
spend_dic[i+1]=[dish_info_list[i]["dish_spend"]]
# print(get_dish_dic)
print(str(len(dish_info_list)+1)+".购物车")
print(str(len(dish_info_list)+2)+".我点好了")
print(str(len(dish_info_list)+3)+".放弃")
op3 = int(input("请选择:"))
if op3 <= (len(dish_info_list)):
spend_yuan += int(spend_dic[op3][0])
bag.append(get_dish_dic[op3])
print("成功!")
os.system("pause")
elif op3 == len(dish_info_list)+1:
print("\n购物车:")
for j in bag:
print(j)
os.system("pause")
elif op3 == len(dish_info_list)+2:
os.system("cls")
dz = random.randint(75,100)
print("你获得一个"+str(dz/100)+"折优惠↓")
dz_=dz/100
os.system("pause")
os.system("cls")
# ----------- #
print("用户名:"+user_name)
print("价格: 原价"+str(spend_yuan)+"元 折后价"+str(int(spend_yuan*dz_))+"元")
print("你点的菜品:")
for z in bag:
print(z)
_pswd = int(input("输入密码以支付(输入0则放弃支付):"))
if _pswd == password:
print("提交成功!")
login_table.update({"submit": submit_+1}, where("name")==user_name)
submit_ += 1
# ----------------- #
os.system("pause")
break
elif _pswd == 0:
os.system("pause")
break
else:
print("密码错误!")
break
os.system("pause")
elif op3 == len(dish_info_list)+3:
os.system("pause")
break
elif op == 2:
os.system("cls")
pingjia_info = input("请输入评价内容:")
pingjia_table.insert({"content":pingjia_info,"user":name, "time":time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))})
elif op == 3:
sys.exit()
elif op == 4:
pingjia_list = pingjia_table.all()
for i in pingjia_list:
print("评价人:"+str(i["user"]))
print("评价内容:"+str(i["content"]))
print("评价时间:"+str(i["time"]))
print("\n\n")
os.system('pause')
elif flag == 1:
os.system("cls")
print("管理员")
print("""-------------------
1.添加菜品
2.查看评价
3.查看用户
-------------------
""")
op1 = int(input("请输入:"))
if op1 == 1:
dish_name = input("请输入菜品名字:")
dish_spend = int(input("请输入菜品价格:"))
dish_info_table.insert({"dish_name":dish_name, "dish_spend":dish_spend})
print("添加成功!")
elif op1 == 2:
pingjia_list = pingjia_table.all()
for i in pingjia_list:
print("评价人:"+str(i["user"]))
print("评价内容:"+str(i["content"]))
print("评价时间:"+str(i["time"]))
print("\n\n")
elif op1 == 3:
login_list_ = login_table.all()
for i in login_list_:
print("用户名 密码 下单次数")
print(i["name"],end=' ')
print(str(i["password"]),end=' ')
print(str(i["submit"]))
最后
这样,整篇文章也就写完了。是不是十分简单?如有问题可以评论。
下次预告:
使用 Python 求积分。
拜拜~欢迎三连~