如何在 psycopg2 中生成无效插入条件的警告?

问题描述 投票:0回答:3

我有一个表 myuser,有两列(id 序列主要,用户名 varchar(20) 唯一不为空)。我正在尝试制作一个 Tkinter gui,它从表单中获取“用户名”并将其插入到 postgres 表 myuser 中。

我想在 gui 中的“用户名”字段留空(或任何其他无效请求)时生成警告。怎么做 ?在 psycopg 错误列表中找不到任何合适的答案。

我尝试了以下操作,但是如果我将 gui 中的用户名字段保留为空,我不会看到任何警告,并且程序运行时不会出现错误。我预计会看到此 if 条件的警告。

此外,如果存在其他类型的无效性(> 20 个字符),我的解决方案将不起作用。那么,最好的方法是什么?

name = namefield.get() 
try:
    c.execute('''INSERT INTO myuser (username)
        VALUES (%s)''', (name,)
        )
    if name == None:
       print('Please insert a valid username')
    
except psycopg2.IntegrityError:
   conn.rollback()
else:
   conn.commit()

非常感谢您的帮助!

python postgresql tkinter psycopg2
3个回答
0
投票

进行后端检查。检查用户名是否为空值并显示正确的提示。

类似这样的:

 if not name://i.e., if null
     messagebox.showwarning('Warning', 'Please insert a valid username')
 else:
     //insert to database

0
投票

只是在Python中检查2个案例,然后尝试执行sql查询。

name = namefield.get() 
if not name or len(name) > 20:
    print('Please insert a valid username')
else:
    try:
        c.execute('''INSERT INTO myuser (username) VALUES (%s)''', (name,))
    except psycopg2.IntegrityError:
        conn.rollback()
    else:
        conn.commit()

0
投票

您可以通过多种方式实现此目的,我认为最好的方法是检查字段的有效性:

if name == None or len(name)>20:
   messagebox.showwarning('Warning', 'Invalid username')

或者您可以在数据库端实现,通过创建引发特定异常的特定触发器,然后在尝试中调用查询,如下所示:

try:
        c.execute('''INSERT INTO myuser (username)
    VALUES (%s)''', (name,)
    )

    except (Exception, psycopg2.DatabaseError) as error:
        messagebox.showwarning('Warning', Error)

        return

自从您谈到警告以来,我使用了显示警告功能,但我建议您也尝试使用显示错误

© www.soinside.com 2019 - 2024. All rights reserved.