From 8bd92e6b914a1ec9479d234f5e4b6c7fa80bb039 Mon Sep 17 00:00:00 2001 From: ColsonZhang <784278850@qq.com> Date: Sat, 3 Apr 2021 13:09:19 +0800 Subject: [PATCH] fix the mysqldb connection --- README.md | 7 +- handler/MysqlDB.py | 146 ++++++++++++--------- handler/MysqlDB_backup.py | 79 +++++++++++ handler/__pycache__/MysqlDB.cpython-36.pyc | Bin 1655 -> 2926 bytes handler/__pycache__/account.cpython-36.pyc | Bin 1046 -> 1071 bytes handler/__pycache__/main.cpython-36.pyc | Bin 2873 -> 2858 bytes handler/account.py | 8 +- 7 files changed, 173 insertions(+), 67 deletions(-) create mode 100644 handler/MysqlDB_backup.py diff --git a/README.md b/README.md index 5303358..c1ce738 100644 --- a/README.md +++ b/README.md @@ -60,20 +60,23 @@ app.py ----服务器的主程序 ## 更新日志 +* 2021年4月2日 + + * fix:当Mysql数据库连接失败时,系统自动重新连接 * 2021年4月1日 * bug:系统运行一天后mysql异常 * ~~bug:schematic中能够进行绘图的区域有限~~ * bug:移动整体电路时,电路连线无法一起移动 * bug:PIN POUT暂时无作用 - * to do:主页面取消跳转,采用判定是否登录的方法改写login logou + * ~~to do:主页面取消跳转,采用判定是否登录的方法改写login logou~~ * fix:当仿真失败时,会提醒用户Fail * new: 代码新增DEBUG宏变量,为False时,关闭print * 2021年3月31日,前后端更新 * 新增:在服务器上成功部署;后端代码为适配centos服务器而做了一些修改。 * 新增:对schematic的Help弹窗做了修改,对login和register界面做了修改。 - * bug:处理注册信息时需要对用户名和邮箱是否重复进行判定。 + * ~~bug:处理注册信息时需要对用户名和邮箱是否重复进行判定。~~ * bug:Datetime非北京时间 * 2021年3月30日,前后端更新 diff --git a/handler/MysqlDB.py b/handler/MysqlDB.py index a0738ec..b0fa234 100644 --- a/handler/MysqlDB.py +++ b/handler/MysqlDB.py @@ -9,71 +9,95 @@ table_name = "user_info" DEBUG = False -# 打开数据库连接 -db = pymysql.connect(host=database_ip, user=database_user, password=database_passwd, database=database_name ) -print('open mysql success !!!') -# 使用cursor()方法获取操作游标 -cursor = db.cursor() -def DB_Check_byName(user_name): - sql = "SELECT * FROM %s WHERE user_name='%s' " % (table_name,user_name) - try: - # 执行SQL语句 - cursor.execute(sql) - # 获取所有记录列表 - results = cursor.fetchall() - passwd = results[0][2] - return passwd - except: - if DEBUG: - print("There is no the user's info !") - return False +class Mysql_DB(): + def __init__(self, host, user, password, database): + self.host = host + self.user = user + self.password = password + self.database = database + self.connect() + + def connect(self): + self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.database ) + print('connect mysql success !!!') -def DB_Check_byEmail(email): - sql = "SELECT * FROM %s WHERE user_email='%s' " % (table_name,email) - try: - # 执行SQL语句 - cursor.execute(sql) - # 获取所有记录列表 - results = cursor.fetchall() - passwd = results[0][2] - return passwd - except: - if DEBUG: - print("There is no the user's info !") - return False + def query(self, sql): + try: + cursor = self.conn.cursor() + cursor.execute(sql) + except pymysql.OperationalError: + self.connect() + cursor = self.conn.cursor() + cursor.execute(sql) + return cursor + + def __commit(self): + try: + self.conn.commit() + except pymysql.OperationalError: + self.connect() + self.conn.commit() + + def __rollback(self): + try: + self.conn.rollback() + except pymysql.OperationalError: + self.connect() + self.conn.rollback() + + def DB_Check_byName(self,user_name): + sql = "SELECT * FROM %s WHERE user_name='%s' " % (table_name,user_name) + try: + # 执行SQL语句 + cursor = self.query(sql) + # 获取所有记录列表 + results = cursor.fetchall() + if(results != tuple()): + passwd = results[0][2] + return passwd + else: + return False + except: + print("MYSQL ERROR 01 !") + return False + def DB_Check_byEmail(self,email): + sql = "SELECT * FROM %s WHERE user_email='%s' " % (table_name,email) + try: + # 执行SQL语句 + cursor = self.query(sql) + # 获取所有记录列表 + results = cursor.fetchall() + if(results != tuple()): + passwd = results[0][2] + return passwd + else: + return False + except: + print("MYSQL ERROR 02 !") + return False -def DB_Insert_User(user_info): - user_name = user_info["username"] - user_passwd = user_info["password"] - user_email = user_info["email"] - user_date = user_info["date"] - sql = "INSERT INTO user_info(user_name,user_passwd,user_email,user_register_date) VALUES('%s', '%s', '%s', '%s' )"% (user_name, user_passwd, user_email, user_date) - try: - # 执行sql语句 - cursor.execute(sql) - # 执行sql语句 - db.commit() - if DEBUG: - print("Insert user_info successfully!") - return True - except: - # 发生错误时回滚 - db.rollback() - if DEBUG: - print("Insert user_info error!") - return False + def DB_Insert_User(self,user_info): + user_name = user_info["username"] + user_passwd = user_info["password"] + user_email = user_info["email"] + user_date = user_info["date"] + sql = "INSERT INTO user_info(user_name,user_passwd,user_email,user_register_date) VALUES('%s', '%s', '%s', '%s' )"% (user_name, user_passwd, user_email, user_date) + try: + # 执行sql语句 + cursor = self.query(sql) + # 执行sql语句 + self.__commit() + if DEBUG: + print("Insert %s successfully!"%(user_name)) + return True + except: + # 发生错误时回滚 + self.__rollback() + print("Mysql ERROR 03") + return False - -# if __name__ == "__main__": -# res = authenticate('user5','1234') -# print("authenticate result: ",res) -# for i in range(10): -# s = str(i) -# res = add_user('user'+s,'1234','user'+s+'@qq.com') -# print("add user", s ," res: ",res) -# res = authenticate('user5','1234') -# print("authenticate result: ",res) \ No newline at end of file +Mysql = Mysql_DB(host=database_ip,user=database_user, password=database_passwd, database=database_name ) diff --git a/handler/MysqlDB_backup.py b/handler/MysqlDB_backup.py new file mode 100644 index 0000000..a0738ec --- /dev/null +++ b/handler/MysqlDB_backup.py @@ -0,0 +1,79 @@ +import pymysql + +# 数据库定义参数 +database_ip = "localhost" +database_user = "guest" +database_passwd = "guest1234" +database_name = "GUESTDB" +table_name = "user_info" + +DEBUG = False + +# 打开数据库连接 +db = pymysql.connect(host=database_ip, user=database_user, password=database_passwd, database=database_name ) +print('open mysql success !!!') +# 使用cursor()方法获取操作游标 +cursor = db.cursor() + +def DB_Check_byName(user_name): + sql = "SELECT * FROM %s WHERE user_name='%s' " % (table_name,user_name) + try: + # 执行SQL语句 + cursor.execute(sql) + # 获取所有记录列表 + results = cursor.fetchall() + passwd = results[0][2] + return passwd + except: + if DEBUG: + print("There is no the user's info !") + return False + + +def DB_Check_byEmail(email): + sql = "SELECT * FROM %s WHERE user_email='%s' " % (table_name,email) + try: + # 执行SQL语句 + cursor.execute(sql) + # 获取所有记录列表 + results = cursor.fetchall() + passwd = results[0][2] + return passwd + except: + if DEBUG: + print("There is no the user's info !") + return False + + + +def DB_Insert_User(user_info): + user_name = user_info["username"] + user_passwd = user_info["password"] + user_email = user_info["email"] + user_date = user_info["date"] + sql = "INSERT INTO user_info(user_name,user_passwd,user_email,user_register_date) VALUES('%s', '%s', '%s', '%s' )"% (user_name, user_passwd, user_email, user_date) + try: + # 执行sql语句 + cursor.execute(sql) + # 执行sql语句 + db.commit() + if DEBUG: + print("Insert user_info successfully!") + return True + except: + # 发生错误时回滚 + db.rollback() + if DEBUG: + print("Insert user_info error!") + return False + + +# if __name__ == "__main__": +# res = authenticate('user5','1234') +# print("authenticate result: ",res) +# for i in range(10): +# s = str(i) +# res = add_user('user'+s,'1234','user'+s+'@qq.com') +# print("add user", s ," res: ",res) +# res = authenticate('user5','1234') +# print("authenticate result: ",res) \ No newline at end of file diff --git a/handler/__pycache__/MysqlDB.cpython-36.pyc b/handler/__pycache__/MysqlDB.cpython-36.pyc index 6a0ba717ee26b48dca4e2592139c3ed8b972ec11..301dd905cbe86c8904f7e0d2c72c8b07f003e35a 100644 GIT binary patch literal 2926 zcmc&$TXWM!6yB9q7dtlxS|BZLm9{|KG7JQ!4-D-<5|h#i4vkF#O=eV~-4HwSg_Yda z9`O`j`5m49rG4!a|De;Sp0lzQlkqTp=~Nz{v(jF4zHh&CRyP+G%JyF`e*S%)kUz=P zWkdTe{F4nZoNyWwpK!yc-1H63e3M%~c$G5i$cX{bG;iY54cZ4ITFoY=>FTY{F z%V~pD=ib6Pq^?SFFAC$sUXuFOi-7=F((cCk&0D^+{kYa>Zf&U2AQ3WXbq{*Y21SB)S(#!;FWDG2{+U%H6;0acu^{S;9 zB2)}vD7POb$*(=hmCM64d>$r3IZ?0M6;X;q6A>Rse3wMhrGv%=^9PZ0;Qqe1b$kDj z?6qNduzr30`hKI;8N^}Qlfh<7MuS$mzv&0NebH_7Tanm547)rQa$n=w+PKyqDmMT! zTWJt1!GcK{459Y;H(H(mzcv{aQ5*pmdJIZ4um+8kw1I;*FwoYh!CRcZK^E-P;l?o? zvtZV%Y!;}|${4xVLAt$U5Je(Myw%m!s;iv-P(PL>c-O4yis5u+^<}G@R;ffNnx)); ziiw_k4jKsqL+C|1suT#vFOP6r@iO6$Bx`_=pfS7vkO1T{d1Yh<0Hp}&3F)pglA3LH zRF*$b;Dr)|j+;Jf{4>%uo`O(vIoJ|uS9UazNlz+A{3fD7D&!(Qt-!{~Fm3g^VO*24 zCw2T)Q$tfGa3q&u+$oUCdN~ks_!0CZ6)=Pvv`iOig}UG?bhKDN)&t+!(E{)tm^fUV z0MIbk0H)D40p>RaOs(ycQ8~Cm>l&PIN4-v`m1<1#EUcTun7Knf$T1&|Ni~+EF^>Kn zIp(AO^Wa_Ci{s~EboB4SF9*S7!q+nZoGqw78CM7nvkAqm1@{yhoTgA$4vcdkxZy2e znP!khuguJB8z4fKvD7>!N2a`;F>b67Zmy75R%SH_XAKnQnS7s8sCzp5;HlmlyFR+y zsO{7?o8DL6{k`3X-lfEQ@_lWu=IQF%4Ljo7E0>Zhp2ReNiz#s*Qsr6W#~rV>x3|0J zUBBV2LWL?r(TYWY6Xb_5O1TFjjSj;&R#rObL#;sxR_$D}dF|GNKY+(ty~>dy8N_L# zY+VfbX*n-#Z3LT#B037559{!rb(oo85)(R44Wn$Jtmi2MZ-c}~7YdF~P5gg|zVbez zMJH^X`+lcqkRx{RM6^$|3+r!IPMKT-o z?V!@Je5QtMrY5&D$N;Thr=iQMF08upK(DKNN@Hc0>&it5YmMpS@>2*#F*set=;%Sc zQQK>J59-a`TI?7ex7?6{FFvcDPs|ok%t{ThTt2pV1oP+$gBKU8D|{BjH5Q> z9Aw=2N!-`oonNoc;pYYJMGz<`jh!AJK(z?ed=R`GgmK;@7vK%~v5q{*&(UD{m!F{d z49z7pC(-JbKGE?Y$NBoGa}C#VnOg?yxXW%uV(;vajcQ33bboI0-4(R@{z7qs#Q96b rZLSG*(y#TUQ}PRp4Bw+HO~b4xm3t?L{vDRnJXDhbf%<1KbJ70?#`tw! literal 1655 zcmcgsU2o$=6rJ&R(xwRubXgF{K`Py#7256cgaEPm=u)(su9}pUM$rb>Gub$G>@Z^k ziQK31$`9c$%_~p)7kJ{%I87rV;0;?o^J)9ubI+N_wOSRW?1zI2LVuvG%Yptk@Q7Cc z6j2-_f~Y|-HHkqjVp5w})FC!?iNny$WtbVvWES;)vxvtkv~rCxV&1HJjYySN>CUf+ z?9g3WgLaqh(K@s>iU+9Gcmw}HeOZaqFo>tA$cX(qXV6r1^XTaD=fr(_-Wv?NZCS|$ zcAtu1E4rV1)3Q9=n5}C&hX4Au*w8_<~6!93WFN=5H;_iE3+^M2oCa|$?QXAq z{#4ov9wiwtRr03aGJy^0awhUP6VlPN(cck&8v^+AN%xD<3!ctcn2nDf9z7flqIn(% zS<1(qh=+NUjXGp}3bYOuQOHKqAfYkiqvwj_Zu_&vQr5feac9cH%kjms4`JSc?}~Q- z5Z=XxQ8hehE$qPKVg4@6|6lbu{I`0rc@V{01>qh<_TL5JNrv4UuC1dFHz zV~g4aE{wt~tce9ew?XJ=h6`H@-B3aY!CU+VNZQeob~i#dX3lywfmKhhR@Q>A_NAwk ztwhFEP<$UiTHr>ux;*I*dS^rbq(3|@^{*s-f8&G)x>stk>}%S}E@!VJk%8~kr&|8^ zPoBYPa9?@nfnVaf(ROOBJ~~Mtj_me7H|C$@alC8}S9kxmfpMO4FqnH=N@>sw;)LmZ z9%Z)`B_2=X_#y}|TMjo>mURHKvlTz7>VZyxl*Utmml9Ae+baAX6ut~*d=4=`f>q%I zAn- IyY4mq0*&2{S^xk5 diff --git a/handler/__pycache__/account.cpython-36.pyc b/handler/__pycache__/account.cpython-36.pyc index 7e4241bbcc72b1389fa4b0170d3b608977e44133..92ab566a8eb71d52f48a96307505101055c6f810 100644 GIT binary patch delta 523 zcmYjOu}T9$5Z&3`i<`T|LSl>&0;$Xuf}nOH5~C8qG-?x&7;=XsUKHofLULk}UI+{R zgoWT2_zBk6S@;Xq&R!(s;Juxh-Fdv3dsXi$yOqz|t>5dbuSs^aSz(MtYydGE!xN7= zmSc$d4V@mGF^``ySG3NLT%K5`kKuhVdD{Us`R>>@NKgc{^$Dz%YEvCj8nXfSfYd}J z22zh;qm-dbTp&s;f7tB@iS)XW?^^m3R*zBAMSHPP?=){iAEV9%v1{S133KLw(?g${ zI#GY>T(T)65gWT!EIhao zSTjS%GL5%AL9sS5Z>9{q-kRnrG+XY3eplpD2O)?QftA3y;Lu~#M%TcZT*?VgBbB3crO88 z!;1&sL41L{fj)#d6KYA|n{P6ioy_;`oAqktcZ$Wr#f^XVG08vFR)r9uh{Q8I%1B}* zf=CXDJ?IEec7&taCoKmi@4Jwj{J2#MG%zqv2NTg(MEn>8lW;%?s_`|H;}_Vja2dIt z82-377$w^4g}$TXPgrhr=bH`p=qm6rbWbTd2G07?rbAu3k3RLg;b811Ci=nMD8wAk zOoJ6~$(5%iz(p#}R^i`CLb}R6B~yJWByFTqhcW_UBT^m=6>hT5NT+$-QzSX1j$v@jDGH8G(YMPzw=%$*P^%JN}h5JG*0Dt(7b?&65A-5lbw`=j!m1m(42T v*Aj&dLckvd%yBo@9KZsTiAADr?)W~q9W@*2RiqYRnd)h4X5`eV1-*$FohO%a$V~pqY079YS({6C^J@-!Mn)?jGn&z2 Kay!>XMlJx#PY=xi delta 111 zcmZ1_wo{DLn3tF9R&i>A;zmwI4jm%~28J4jEQV%=TILeQ8s=t3Mur;Z6ozc3A{C%G zQwk$UB##Tkp6thA&B0v61JqI^H@SzyoSh5EWMJgje1apGkmXj;E IHZpPp0AU#zJpcdz diff --git a/handler/account.py b/handler/account.py index 2f4bc9a..7d5c708 100644 --- a/handler/account.py +++ b/handler/account.py @@ -3,7 +3,7 @@ from .MysqlDB import * #用户密码匹配判断函数 def authenticate(username,password): - passwd_db = DB_Check_byName(username) + passwd_db = Mysql.DB_Check_byName(username) if passwd_db: if password == passwd_db: return True @@ -12,12 +12,12 @@ def authenticate(username,password): # 数据库中增加新用户 def add_user(username,password,email=''): create_time=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - result = DB_Insert_User({'username':username,'password':password,'email':email,'date':create_time}) + result = Mysql.DB_Insert_User({'username':username,'password':password,'email':email,'date':create_time}) return result def check_register(username,password,email): - check_name = DB_Check_byName(username) - check_email = DB_Check_byEmail(email) + check_name = Mysql.DB_Check_byName(username) + check_email = Mysql.DB_Check_byEmail(email) check_pw = check_password(password) if check_name != False: