好了,废话不多说,下面步入正题。
这两天突然突(闲)发(着)奇(没)想(事),想自己做一个数据库。
众所周知,JSON是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。所以,JSON就是我们储存数据的主要方式了。
但是呢,JSON中的数据不能直接读、写,所以我们先来写两个函数:
import json#json解析
import os#数据读写,文件操作
import sys#控制退出
import time#控制暂停
import shutil#文件夹操作
def saveToJSON(dicObject,file):
flag=False
'''#这一段注释掉了,因为后面发现这样不能完全满足使用需求。
if type(dicObject)!=dict:
print('dict')
return flag
'''
try:
j_file=open("./PyDB/"+file,'a')#打开文件,PyDB是储存数据的文件夹,后面会说到
json.dump(dicObject,j_file,ensure_ascii=False)#以JSON格式储存数据
flag=True
except:
print('写数据出错!')
finally:
if flag:
j_file.close()
return flag
#=========================
def GetFromJSON(filename):
flag=False
dicObject={}
try:
way="./PyDB/"+filename#文件路径
j_file=open(way,'r')#以只读方式打开文件
dicObject=json.load(j_file)#使用json的load方法解析数据
flag=True
except:
flag=False
finally:
if flag:
j_file.close()
elif flag==False:
return False
return dicObject
写的不是很好啊,大佬轻点喷QAQ
这样,我们就可以进行json文件的读写操作了。不过这样子有一个很大的弊端,那就是当json文件中有多个字典数据时,就无法正常的读写了。那将所有字典数据放在一个表格呢?这下可以存放多个字典数据了,但当json文件中有多个表格时,还是无法正常读出。
所以,我们把GetFromJSON换成这个:
def turn(file):
with open(file,mode='r',encoding='utf-8') as f:#用with语句打开文件
a=f.readline()#将文件以字符串形式读出
a=a.split('","')#以“,”为间隔,将字符串分割成表格
b=[]#返回的列表
for i in range(len(a)):
if i <= len(a)-2:#a的结尾会有一个‘“,”’,需要把它去掉
b.append(json.loads(a[i]))#用json解析字符串并添加到列表中
return b
这下可以比较方便的读写数据了。所以,刚才才要把判断数据是否为字典类型去掉。再写入完数据后可以在后面写入一个“,”,方便读取。
接下来就是主程序了,我的大致想法是用两个大循环,一个控制登陆,一个控制数据操作。
接下来,上代码!
if __name__ == '__main__':
print("| Welcome to PyDB Monitor.")#一些简要信息
print("| Server version: 1.0.0 PyDB Server.")
print("| Add '@' at the beginning of the statement.")
print("| Type '@help' or '@h' for help.Type '@continue' or '@c' to clear the current input statement.n")
print("PyDB>Welcome to PyDB!"+"n")#欢迎语句
folder=''#判断是否存在数据库文件夹
for i in range(len(os.listdir())):
a=os.listdir()
if a[i]=='PyDB':
folder='PyDB'
if folder!='PyDB':#如果没有,则创建数据库文件夹
os.makedirs('./PyDB'+'./user')
os.makedirs('./PyDB'+'./Database')
开头的判断十分重要,不然会影响到后面所有的数据操作!
接下来是第一个大循环:
#----------------------------------------------------登录
while True:
if len(os.listdir('./PyDB/user'))==0:#判断是否存在用户,如果没有,则创建一个超级管理员
print("PyDB> There are no users yet :( ... Let's create one! :) n")
admin=input("PyDB> Please enter your User Name!nAdministrator>")
Pass=input("PyDB> Please enter your password!nPassword>")
RePass=input("PyDB> Please enter your password again!nPassword>")
if Pass==RePass:#判断两次输入的密码是否一致
#用户信息
info={
'Name':admin,'Password':Pass,'Jurisdiction':'Root'
}
saveToJSON(info,'user/'+admin+'.json')#储存信息
print("nSuccess>Congratulations, account creation succeeded!n")
host=GetFromJSON("user/"+admin+".json")#为后面的一些判断做准备
os.makedirs('./PyDB'+'./Database'+'./'+admin)#在数据库文件夹下创建用户文件夹
break#跳出循环,进行数据操作
else:#不一致则进入另一个循环
while True:
print('PyDB>The two passwords you entered are different. Please try again.')
Pass=input("PyDB> Please enter your password!nPassword>")
RePass=input("PyDB> Please enter your password again!nPassword>")
if Pass==RePass:
info={
'User':admin,'Password':Pass,'Jurisdiction':'Root'
}
saveToJSON(info,'user/'+admin+'.json')
print("nSuccess>Congratulations, account creation succeeded!n")
host=GetFromJSON("user/"+admin+".json")
os.makedirs('./PyDB'+'./Database'+'./'+admin)
break
break
else:#如果存在用户,则进行登录操作
while True:
admin=input('User name>')
if admin=="@exit":#若需退出,则可以在此退出
print("PyDB>Thank you for your use~ :) Bye!")
time.sleep(3)
sys.exit()
if GetFromJSON("user/"+admin+".json")==False:#判断该用户是否存在
print("Error>Sorry, there is no such user.Please try again.")
else:
host=GetFromJSON("user/"+admin+".json")#获取用户信息
break
Pass=input('Password>')#用户密码
if Pass=="@exit":#若需退出,则可以在此退出
print("PyDB>Thank you for your use~ :) Bye!")
time.sleep(3)
sys.exit()
if host["Password"]!=Pass:#若三次密码错误,则退出程序
print("Error>Password error, please try again!")
Pass=input('Password>')
host=GetFromJSON("user/"+admin+".json")
if host["Password"]!=Pass:
print("Error>Password error, please try again!")
Pass=input('Password>')
host=GetFromJSON("user/"+admin+".json")
if host['Password']!=Pass:
print("Error>You have made three consecutive errors. Please try again later.")
time.sleep(3)
sys.exit()
else:
print("n"+"PyDB>Welcome,"+admin+'!n')
break
else:
print("n"+"PyDB>Welcome,"+admin+'!n')
break
else:
print("n"+"PyDB>Welcome,"+admin+'!n')
break#进入操作界面
好了,到此为止,数据库的登陆系统已经制作完成了。后面的功能……下期更新!
第一次写文章,写的不是很好啊,大佬轻点喷QAQ ……谢谢QwQ
如果大家有建议,可以在评论区告诉我哈,谢谢!
Bye~


![小白向大佬迈进的第一天![自制Json数据库 | 01] 小白向大佬迈进的第一天![自制Json数据库 | 01]](http://www.mshxw.com/aiimages/31/269709.png)
