我用python连接数据库,当数据库的服务关闭的时候,程序会卡死。怎么提前判定数据是否开启?如果没有开启就返回值。
试过用try except,但是好像没有用,login_timeout也用了感觉也不对。照样卡死
import winsound
import xlwt
import pymssql
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('300x300')
e = tk.Entry(window, show=None)
e.pack()
def set_style(name, height, bold=False):
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
return style
def write_excel(d):
f = xlwt.Workbook()
sheet1 = f.add_sheet('学生',cell_overwrite_ok=True)
row0 = ["id","username","age"]
#写第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
#从第二行开始写从数据库里面捞出来的数据
for i in range(0,len(d)):
for m in range(0, len(d[i])):
sheet1.write(i + 1, m, d[i][m], set_style('Times New Roman', 220, True))
f.save('F:/'+tt+'.xls',)
global Mes1
Mes1 = None
def insert_point():
conn = pymssql.connect(host="localhost", user='sa', password='www', database='master',login_timeout=10)
try:
cur = conn.cursor()
global tt
tt=e.get()
if e.get()=='':
show_eff(False)
else:
cur.execute('select * from temp_ross where id=%s', (e.get()))
data = cur.fetchall()
if len(data) !=0:
t = []
d = []
for i in range(len(data)):
t.append(data[i][0])
t.append(data[i][1].rstrip())
t.append(data[i][2])
d.append(t)
t = []
write_excel(d)
cur.close()
show_eff(True)
else:
show_eff(False)
except pymssql.OperationalError:
show_eff(False)
def show_eff(e):
global Mes1
if Mes1 is None:
Mes1 = tk.Message(text = 'OK' if e else 'Fail', width = 60)
Mes1.pack()
else:
Mes1.pack_forget()
Mes1 = tk.Message(text = 'OK' if e else 'Fail', width = 60)
Mes1.pack()
if e==False:
winsound.Beep(900, 1000)
def windowset():
b1 = tk.Button(window, text='insert point', width=15,
height=2, command=insert_point)
b1.pack()
window.mainloop()
windowset()
对于判断数据库连接是否成功的问题,可以使用以下方法:
import pymssql
try:
conn = pymssql.connect(host='localhost', user='sa', password='www', database='master')
print("数据库连接成功!")
except pymssql.Error as e:
print(f"数据库连接失败:{str(e)}")
使用try/except语句,在try块中尝试连接数据库,如果连接成功则打印“数据库连接成功!”;如果连接失败,则会通过except块捕获pymssql.Error异常,并打印“数据库连接失败”以及具体错误信息。
对于开启数据库服务的判断问题,可以通过ping测试实现。在Windows系统中,可以使用以下代码实现:
import os
def is_database_running():
host = 'localhost' # 数据库所在的主机地址
response = os.system("ping -n 1 " + host) # 发送一个ping测试包
if response == 0:
print(f"{host} is up!")
return True
else:
print(f"{host} is down!")
return False
这个函数会通过发送一个ping测试包来检测数据库主机的运行状态,如果ping测试成功,则表明数据库已经打开,返回True;否则返回False。在连接数据库之前,可以先调用这个函数来检测数据库服务是否已经开启。如果返回False,则说明数据库服务没有开启,可以在程序中进行处理。