ross_liu 2019-06-04 07:53 采纳率: 20%
浏览 1356

python用pymssl连接数据的时候,怎么判断是否连接成功.如果连接不成功,是否可以在窗口上显示错误信息

我用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()

  • 写回答

1条回答

  • 憧憬blog 2023-03-15 07:37
    关注

    对于判断数据库连接是否成功的问题,可以使用以下方法:

    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,则说明数据库服务没有开启,可以在程序中进行处理。

    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型