pycharm对SQL Sever各种操作(包括日志)

通过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('<Return>', 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

函数先判断该账号有没有被注册过,之后再经过注册环节,如果该账号可以对应该数据库中的主外键关系,而且不存在已经被注册的情况会导入账号密码的数据库。

待更新。。。。。。

猜你喜欢

转载自blog.csdn.net/m0_66722981/article/details/129966667