通过python中的函数:
execute( )
将sql sever里的操作移植到pycharm中,从而达到用pycharm作为媒介对sql sever进行增,删,改,查,设置日志,建立主键,建立外键,删除主键,删除外键,设置指针,删除指针,创建表格,删除表格等等操作。
目录
登录函数的定义
触发式日志
学号作为主键,注册时账号作为外键
1.查询信息
2.插入信息
3.删除信息
4.更改信息
输入:000000进入隐藏管理员系统
1.查询日志
2.重置日志
3.一键初始化部署
注册函数的定义
如果打开这篇小文章目的是Ctrl C 的请直接翻到文章结尾,有源码和操作各个接口(有讲解如何接入)。
注意
cur = connect.cursor() sqlstr = f"select * from soft2110 where id = '123456'" cur.execute(sqlstr) acc = cur.fetchall()
不改动数据信息用的是.fetchall()
cur = connect.cursor() sqlstr = f"delete from soft2110 where id = '123456'" cur.execute(sqlstr) connect.commit()
改动数据信息用的是.commit()
本文的操作案例是pycharm建立sql sever登录注册:
import sys
import time
import tkinter as tk
from tkinter import ttk, messagebox
import pymssql
def Register():
pass
def login():
root.destroy()
pass
def on_closing():
if tk.messagebox.askokcancel("Quit", "你想退出程序吗?"):
root.destroy()
exit()
def login_with_enter(event):
login()
root = tk.Tk()
root.title("登录系统")
root.geometry("320x240")
root.configure(bg='#F5F5F5')
label_username = tk.Label(root, text="用户:", bg='#F5F5F5', font=('Helvetica', 15))
label_username.pack(pady=10)
var_username = tk.StringVar()
entry_username = tk.Entry(root, textvariable=var_username, font=('Helvetica', 12))
entry_username.pack(pady=5)
label_password = tk.Label(root, text="密码:", bg='#F5F5F5', font=('Helvetica', 15))
label_password.pack()
var_password = tk.StringVar()
entry_password = tk.Entry(root, show="*", textvariable=var_password, font=('Helvetica', 12))
entry_password.pack(pady=5)
frame = tk.Frame(root, bg='#F5F5F5')
frame.pack(pady=10)
button_login = ttk.Button(frame, text="登录", command=login, style='TButton')
button_login.pack(side=tk.LEFT, padx=5)
button_register = ttk.Button(frame, text="注册", command=Register, style='TButton')
button_register.pack(side=tk.LEFT, padx=5)
style = ttk.Style()
style.configure('TButton', background='#4CAF50', foreground='#FFFFFF', font=('Helvetica', 12))
entry_password.bind('', login_with_enter) # 绑定回车事件
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
通过kintert函数调出一个显示页面和传参接口:
显示了一个简易的框架,通过回车键的绑定,当输入完账号密码后可以通过点击enter等价于点击登录键。点击登录后会经过root.destroy()将窗口关闭,
str(var_username.get())
传递登录时的账号的数据
str(var_password.get())
传递了登录时的密码数据
登录用try函数,尝试用定义的账号密码连接,或者用注册的账号和密码登录。
点击登陆后会执行login的操作,登录成功会调用denglu(connect)函数可以将函数中的pass换成一个函数的形式。
def denglu(connect):
pass
def login():
root.destroy()
try:
connect = pymssql.connect(host='localhost', server='你的服务器名称', port='1433', user=str(var_username.get()),
password=str(var_password.get()), database='你的数据库名称')
if connect:
print("数据库连接成功")
else:
print("连接失败")
try:
options = str(var_username.get())
denglu(connect, options)
except:
print("操作有错误")
return
except:
try:
connect = pymssql.connect(host='localhost', server='你的服务器名称', port='1433', user="你的账号",
password="你的密码", database='你的数据库名称')
except:
print('数据库连接失败,请重新运行')
exit()
options = str(var_username.get())
cur = connect.cursor()
sqlstr = f"select * from soft2130 where id = '{str(var_username.get())}'"
cur.execute(sqlstr)
acc = cur.fetchall()
sqlstr = f"select * from soft2130 where ps = '{str(var_password.get())}'"
cur.execute(sqlstr)
acd = cur.fetchall()
if not acc:
print("用户不存在")
time.sleep(3)
exit()
else:
if not acd:
print("密码错误")
time.sleep(3)
exit()
cur.close()
denglu(connect, options)
你的服务器名称是上一篇文章提及的,你的数据库名称是上一篇文章建立的,如果不知道是什么请查看下面链接的步骤二:
Pycharm连接SQL Sever(详细教程)
数据库连接成功的前提下才可以进行下面的操作,进入登录模块的函数
登录函数的定义
def denglu(connect):
pass
在进入登录页面前我们需要根据操作定义出函数。
触发式日志
在定义触发式日志前需要我们在SQL Sever里执行
create table soft2120(user_name1 nchar(20),log_time datetime,log_op nchar(20))
创立一个用来接收日志信息的表格 soft2120
表格里包含了,谁在操作,操作时间,进行了什么操作(增、删、改)
def ri(connect, options):
cur = connect.cursor()
sqlstr = '''
if exists(select name from sys.objects where name = 'log_nana')
drop trigger log_nana
'''
cur.execute(sqlstr)
connect.commit()
try:
sqlstr = f'''create trigger log_nana on soft2110
after update,insert,delete
as
begin
declare @op nchar(20)
if exists(select 1 from deleted) and exists(select 1 from inserted)
set @op = '进行update操作'
if exists(select 1 from deleted) and not exists(select 1 from inserted)
set @op = '进行delete操作'
if not exists(select 1 from deleted) and exists(select 1 from inserted)
set @op = '进行insert操作'
insert into soft2120 values('{options}',getdate(),@op)
end'''
cur.execute(sqlstr)
connect.commit()
print("日志启动")
except Exception as e:
print(f"Error: {e}")
cur.close()
日志通过 connect 传递已经连接好的数据库,options 用来传递登录人员是谁(用来记录操作人员的信息)
建立游标 log_nana 前先进行判断,名为log_nana游标存在则删除,防止游标冲突。
通过try函数返回错误信息。执行完毕之后cur.close()用于关闭打开的connect.cursor()
学号作为主键,注册时账号作为外键
--drop table soft2110
create table soft2110(xh int,dp nchar(20),pr nchar(20),id nchar(30)constraint id_pr primary key,
nm nchar(20))
--加上id_pr便于删除主键
bulk insert soft2110 --txt text
from 'd:2104.txt'
with(fieldterminator = '\t',rowterminator = '\n')--\t是空格
--导入数据
--drop table soft2130
create table soft2130(id nchar(30)constraint fk_name foreign key references soft2110(id),ps nchar(20))
--注册人员的信息
---------------------------------------------------------------------------------
alter table soft2130 drop constraint fk_name;
alter table soft2110 drop constraint id_pr;
--删除外键,删除主键(次序不能变)
alter table soft2110 add constraint id_pr primary key (id);
alter table soft2130 add constraint fk_name foreign key(id) references soft2110(id);
--创建主键,创建外键
--更改数据后会动用学号,构成的主键需要删除,
--删除更改学号需要判断密码注册表soft2130里有没有,有的话需要删除
执行横杠前的代码就可以创建
# soft2110 是学生数据 # soft2130 是注册数据
横杠下方的代码是删除外键和主键,创建外键和主键的操作,本例中是依照学号作为主键,注册表中的账号是对应的外键。只要改动学号的数据应该,执行如下的步骤
删除外键和主键
改动学号的数据
创建主键和外键
所以在删除,更改,添加学号操作中,对主键和外键的删增是常态。
1.查询信息
首先根据需要,定义出查询用的select函数:
def select(connect):
cur = connect.cursor()
sqlstr = "select * from soft2110"
cur.execute(sqlstr)
data = cur.fetchall()
cur.close()
for i in range(len(data)):
for t in range(len(data[i])):
print(str(data[i][t]).strip(), end=' ')
print('\r')
原表soft2110里的数据是下列形式的:
1 软件学院 软件2204 31212121212 云梦泽
2 软件学院 软件2204 31313131313 上林赋
注意其中data是列表里套用元组的形式,以上两个for循环是打开列表和元组的过程:
[(1,软件学院,软件2204,31212121212,云梦泽),(2,软件学院,软件2204,31313131313,上林赋)]
2.插入信息
首先根据需要,定义出查询用的insert函数:
# 软件学院 软件2104 312120030432 云梦泽
# 插入学生数据,包括外键主键的删除和重新添加
def insert(connect, add):
cur = connect.cursor()
sqlstr = "select * from soft2110"
cur.execute(sqlstr)
data = cur.fetchall()
sqlstr = f"select * from soft2110 where id = '{add[2]}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
print("学号重复,请重新插入")
return
try:
sqlstr = '''alter table soft2130 drop constraint fk_name;
alter table soft2110 drop constraint id_pr;'''
# 释放主键
cur.execute(sqlstr)
connect.commit()
sqlstr = f"insert into soft2110 values ({len(data) + 1},'{add[0]}','{add[1]}','{add[2]}','{add[3]}')"
# print(sqlstr)
cur.execute(sqlstr)
connect.commit()
sqlstr = '''alter table soft2110 add constraint id_pr primary key (id);
alter table soft2130 add constraint fk_name foreign key(id) references soft2110(id);'''
# 生成新主键
cur.execute(sqlstr)
connect.commit()
print("插入成功")
except:
print("插入失败请重试")
cur.close()
函数通过 connect 传递已经连接好的数据库,add 列表用来传递
学院 专业 学号 姓名
函数会先搜索数据库表soft2110中的学号判断有没有重复,再根据返回的值决策是否进入插入操作
因为前有序号,序号的操作在该案例中是错误的:
1 软件学院 软件2204 31212121212 云梦泽
通过execute( )实现pycharm对SQL Sever函数的调用
3.删除信息
根据需要,定义出查询用的delete函数:
# 根据学号删除所有数据,包括关联的密码表,重置主键外键
def delete(connect, de):
cur = connect.cursor()
sqlstr = f"select * from soft2110 where id = '{de}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
try:
sqlstr = '''alter table soft2130 drop constraint fk_name;
alter table soft2110 drop constraint id_pr;'''
# 释放主键
cur.execute(sqlstr)
connect.commit()
except:
print("主键释放失败")
sqlstr = f"delete from soft2110 where id = '{de}'"
cur.execute(sqlstr)
connect.commit()
sqlstr = f"select * from soft2110 where id = '{de}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
print("注意密码库中该数据已被删除")
sqlstr = f"delete from soft2130 where id = '{de}'"
cur.execute(sqlstr) # 删除账号密码
connect.commit()
sqlstr = '''alter table soft2110 add constraint id_pr primary key (id);
alter table soft2130 add constraint fk_name foreign key(id) references soft2110(id);'''
# 生成新主键
cur.execute(sqlstr)
connect.commit()
cur.close()
print("删除成功")
else:
print("学号不存在")
cur.close()
return
先根据学号查询有没有这个学号,如果存在删除外键主键,然后再删除表soft2110的该学号的信息,再经过判断,查看注册表中有没有该成员,如果有的话会执行删除该账号密码的操作。
4.更改信息
在 def denglu(connect)函数中添加了如下信息,一旦输入正确的学号就必须操作,除非是更改学号,而且更改的学号与数据库表soft2110的学号有重复才能撤销更改操作,其余操作一律是必须执行才能继续操作。
elif choice == "4":
abc = input('请输入你的学号:')
acc = change(connect, abc)
if acc:
print('''
1.更改学院
2.更改专业
3.更改学号
4.更改姓名
0.退出
''')
aaa = input('请选择:')
try:
while aaa != "0":
if aaa == "1":
ddd = input(f"将学院:{acc[0][1].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "2":
ddd = input(f"将专业:{acc[0][2].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "3":
ddd = input(f"将学号:{acc[0][3].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "4":
ddd = input(f"将姓名{acc[0][4].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
else:
print('''
1.更改学院
2.更改专业
3.更改学号
4.更改姓名
0.退出
''')
aaa = input("请选择:")
except:
print("函数有误")
else:
print("学号不存在")
更改操作定义了两个函数。
def change(connect, abc):
cur = connect.cursor()
sqlstr = f"select * from soft2110 where id = '{abc}'"
cur.execute(sqlstr)
acc = cur.fetchall()
cur.close()
return acc
def change1(connect, ddd, aaa, abc):
cur = connect.cursor()
try:
if aaa == '1':
sqlstr = f"update soft2110 set dp='{ddd}' where id='{abc}'"
cur.execute(sqlstr)
connect.commit()
elif aaa == '2':
sqlstr = f"update soft2110 set pr='{ddd}' where id='{abc}'"
cur.execute(sqlstr)
connect.commit()
elif aaa == '3':
sqlstr = f"select * from soft2110 where id = '{ddd}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
print("学号重复,请重新输入")
return "3"
sqlstr = '''alter table soft2130 drop constraint fk_name;
alter table soft2110 drop constraint id_pr;'''
# 释放主键
cur.execute(sqlstr)
connect.commit()
sqlstr = f"update soft2110 set id='{ddd}' where id='{abc}'"
cur.execute(sqlstr)
connect.commit()
sqlstr = f"select * from soft2110 where id = '{abc}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
print("注意密码库中该数据已被删除")
sqlstr = f"delete from soft2130 where id = '{abc}'"
cur.execute(sqlstr) # 删除账号密码
connect.commit()
sqlstr = '''alter table soft2110 add constraint id_pr primary key (id);
alter table soft2130 add constraint fk_name foreign key(id) references soft2110(id);'''
# 生成新主键
cur.execute(sqlstr)
connect.commit()
elif aaa == '4':
sqlstr = f"update soft2110 set nm='{ddd}' where id='{abc}'"
cur.execute(sqlstr)
connect.commit()
cur.close()
return "0"
except:
print('更改失败')
cur.close()
return "0"
change是判断有没有该学号,如果有可以进行更改操作,而且更改时会有提示,根据该函数会提示,将x改成y,前边的x是调用数据库读取到的,后边的y是需要你输入的。
change1是进行更改的过程。
更改的学号必须是全新的(否则报错执行重新选择的操作,再次选择,选择0时,会退出更改信息的窗口)
更改:学院、专业 、姓名的过程是不可终止的。
输入:000000进入隐藏管理员系统
在主函数中定义一个接口:
elif choice == "000000": # 这里修改隐藏账号
dd = input("请输入密码:")
if dd == "123456":
print("欢迎管理员!")
rizhi(connect, options)
else:
print("密码输入失败,请重试")
接口对应的如下函数:
def rizhi(connect, options):
def pr1():
print('''请输入你的操作:
1.查询日志
2.重置日志
3.一键初始化部署
0.退出操作''')
pr1()
choicee = input('输入操作选项:')
while choicee != "0":
if choicee == "1":
selectt(connect)
elif choicee == "2":
aaaaa = input("请输入二级密码:")
if aaaaa == "666666":
dri(connect)
dro(connect)
ri(connect, options)
else:
yujing(str(options))
sys.exit()
elif choicee == "3":
bushu(connect, options)
else:
print("请输入正确的操作数")
pr1()
choicee = input('输入操作选项:')
print("退出成功")
pass
1.查询日志
定义了查询日志函数:
def selectt(connect):
cur = connect.cursor()
sqlstr = "select * from soft2120"
cur.execute(sqlstr)
data = cur.fetchall()
cur.close()
for i in range(len(data)):
for t in range(len(data[i])):
print(str(data[i][t]).strip(), end=' ')
print('\r')
pass
2.重置日志
在重置日志前,设置了二级密码:
如果输入错误会执行预警操作:
yujing(str(options))
sys.exit()
定义预警函数:yujing(str(options))之后执行sys.exit()退出总程序。
yujing(str(options))函数可以连接微信,找到自建的公众号,输错之后会执行如下操作:
执行该预警请期待下期的文章,本文暂时用一个输出语句代替:
def yujing(options):
print("预警发送成功")
pass
如果输入二级密码正确会执行如下操作:
重置日志前定义了关闭日志的函数:
def dri(connect):
cur = connect.cursor()
sqlstr = '''
if exists(select name from sys.objects where name = 'log_nana')
drop trigger log_nana
'''
cur.execute(sqlstr)
connect.commit()
cur.close()
print("日志关闭")
pass
之后定义了删除表格的函数:
def dro(connect):
cur = connect.cursor()
sqlstr = '''drop table soft2120
create table soft2120(user_name1 nchar(20),log_time datetime,log_op nchar(20))'''
print("日志删除成功")
cur.execute(sqlstr)
connect.commit()
cur.close()
pass
在删除日志之后,又重新打开隐藏的日志调用
ri(connect, options)
函数,重新打开日志。
3.一键初始化部署
该一键部署会让所有数据进行初始化,学生信息,日志表,注册表回归到最初的状态。
def bushu(connect, options):
cur = connect.cursor()
try:
sqlstr = '''alter table soft2130 drop constraint fk_name;
alter table soft2110 drop constraint id_pr;'''
print("主键删除成功")
cur.execute(sqlstr)
connect.commit()
except:
print("主键初始化成功")
try:
sqlstr = "drop table soft2110"
print("学生信息删除成功")
cur.execute(sqlstr)
connect.commit()
except:
print("学生信息初始化成功")
sqlstr = '''create table soft2110(xh int,dp nchar(20),pr nchar(20),id nchar(30)constraint id_pr primary key,
nm nchar(20))
bulk insert soft2110 --txt text
from 'd:2104.txt'
with(fieldterminator = '\t',rowterminator = '\n')--\t是空格'''
print("学生信息创建成功")
cur.execute(sqlstr)
connect.commit()
try:
sqlstr = "drop table soft2130"
print("注册信息删除成功")
cur.execute(sqlstr)
connect.commit()
except:
print("注册信息初始化成功")
sqlstr = "create table soft2130(id nchar(30)constraint fk_name foreign key references soft2110(id),ps nchar(20))"
cur.execute(sqlstr)
connect.commit()
print("注册表格创建成功")
try:
sqlstr = '''
if exists(select name from sys.objects where name = 'log_nana')
drop trigger log_nana
'''
cur.execute(sqlstr)
connect.commit()
sqlstr = "drop table soft2120"
cur.execute(sqlstr)
connect.commit()
print("日志表格删除成功")
except:
print("日志初始化成功")
sqlstr = '''
if exists(select name from sys.objects where name = 'log_nana')
drop trigger log_nana
'''
cur.execute(sqlstr)
connect.commit()
sqlstr = 'create table soft2120(user_name1 nchar(20),log_time datetime,log_op nchar(20))'
cur.execute(sqlstr)
connect.commit()
print("日志表格创建成功")
try:
sqlstr = f'''create trigger log_nana on soft2110
after update,insert,delete
as
begin
declare @op nchar(20)
if exists(select 1 from deleted) and exists(select 1 from inserted)
set @op = '进行update操作'
if exists(select 1 from deleted) and not exists(select 1 from inserted)
set @op = '进行delete操作'
if not exists(select 1 from deleted) and exists(select 1 from inserted)
set @op = '进行insert操作'
insert into soft2120 values('{options}',getdate(),@op)
end'''
cur.execute(sqlstr)
connect.commit()
print("日志启动")
except Exception as e:
print(f"Error: {e}")
cur.close()
cur.close()
该代码用了大量的try函数,即使在没创建任何表格,没有任何数据,也可以达到初始化的效果。
试图删外键主键
试图删学生信息
创建学生信息表
试图删注册信息
创建注册信息表
关闭日志
试图删日志信息
创建日志信息表
打开日志
登录的轮廓如下:
# soft2110 是学生数据
# soft2120 是日志数据
# soft2130 是注册数据
def yujing(options):
pass
# 查学生信息
def select(connect):
pass
# 软件学院 软件2104 312120030432 云梦泽
# 插入学生数据,包括外键主键的删除和重新添加
def insert(connect, add):
pass
# 根据学号删除所有数据,包括关联的密码表,重置主键外键
def delete(connect, de):
pass
# 查日志
def selectt(connect):
pass
# 删除日志
def dro(connect):
pass
# 一键初始化所有数据包括日志,学生信息,注册账号
def bushu(connect, options):
pass
# 隐藏管理员的函数
def rizhi(connect, options):
def pr1():
print('''请输入你的操作:
1.查询日志
2.重置日志
3.一键初始化部署
0.退出操作''')
pr1()
choicee = input('输入操作选项:')
while choicee != "0":
if choicee == "1":
selectt(connect)
elif choicee == "2":
aaaaa = input("请输入二级密码:")
if aaaaa == "666666":
dri(connect)
dro(connect)
ri(connect, options)
else:
yujing(str(options))
sys.exit()
elif choicee == "3":
bushu(connect, options)
else:
print("请输入正确的操作数")
pr1()
choicee = input('输入操作选项:')
print("退出成功")
pass
# 启动日志
def ri(connect, options):
pass
# 改学生信息数据前判断有没有这个学号对应的人
def change(connect, abc):
pass
# 更改学生的学院,专业,学号,姓名………………改学号需要重置主键外键,并且删除密码表里的学号
def change1(connect, ddd, aaa, abc):
pass
# 关闭日志
def dri(connect):
pass
# 打印
def pr():
print('''请输入你的操作:
1.查询信息
2.插入信息
3.删除信息
4.更改信息
0.退出操作''')
# 登录以及关联各个函数
def denglu(connect, options):
ri(connect, options)
pr()
choice = input('输入操作选项:')
while choice != "0":
if choice == "1":
try:
select(connect)
except:
print("查询失败")
elif choice == "2":
print("输入案例:“医学院 临床2204 349849848 岳阳城”")
add = input('请输入‘学院 专业 学号 姓名’:')
# print(add.split())
try:
insert(connect, add.split())
except:
print("插入失败")
elif choice == "3":
de = input('请输入删除的学号:')
try:
delete(connect, de)
except:
print("删除失败")
elif choice == "4":
abc = input('请输入你的学号:')
acc = change(connect, abc)
if acc:
print('''
1.更改学院
2.更改专业
3.更改学号
4.更改姓名
0.退出
''')
aaa = input('请选择:')
try:
while aaa != "0":
if aaa == "1":
ddd = input(f"将学院:{acc[0][1].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "2":
ddd = input(f"将专业:{acc[0][2].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "3":
ddd = input(f"将学号:{acc[0][3].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
elif aaa == "4":
ddd = input(f"将姓名{acc[0][4].strip()}更改为:")
aaa = change1(connect, ddd, aaa, abc)
else:
print('''
1.更改学院
2.更改专业
3.更改学号
4.更改姓名
0.退出
''')
aaa = input("请选择:")
except:
print("函数有误")
else:
print("学号不存在")
elif choice == "000000": # 这里修改隐藏账号
dd = input("请输入密码:")
if dd == "123456":
print("欢迎管理员!")
rizhi(connect, options)
else:
print("密码输入失败,请重试")
else:
print("请输入正确的操作数")
pr()
choice = input('输入操作选项:')
dri(connect)
connect.close()
print("退出成功")
注册函数的定义
# 注册用户
def Register():
try:
root.destroy()
except:
print("请重试")
try:
connect = pymssql.connect(host='localhost', server='你的服务器名称', port='1433', user="你的账号",
password="你的密码", database='你的数据库名称')
ansid = input("请输入注册账号:")
ansps = input("请输入注册密码:")
cur = connect.cursor()
sqlstr = f"select * from soft2130 where id = '{ansid}'"
cur.execute(sqlstr)
acc = cur.fetchall()
if acc:
print("学号重复,请重新插入")
print('''
1.重试
0.退出
''')
aniii = input("请输入你的操作:")
if aniii == '1':
Register()
if aniii == '0':
print('退出成功')
else: # 绑定主键
try:
sqlstr = f"insert into soft2130 values ('{ansid}','{ansps}')"
cur.execute(sqlstr)
connect.commit()
print("注册成功")
except:
print("学号不在数据库内")
connect.close()
except:
print("连接失败请联系管理员")
pass
函数先判断该账号有没有被注册过,之后再经过注册环节,如果该账号可以对应该数据库中的主外键关系,而且不存在已经被注册的情况会导入账号密码的数据库。
待更新。。。。。。