我有一个表 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()
非常感谢您的帮助!
进行后端检查。检查用户名是否为空值并显示正确的提示。
类似这样的:
if not name://i.e., if null
messagebox.showwarning('Warning', 'Please insert a valid username')
else:
//insert to database
只是在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()
您可以通过多种方式实现此目的,我认为最好的方法是检查字段的有效性:
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
自从您谈到警告以来,我使用了显示警告功能,但我建议您也尝试使用显示错误