防止空白记录写入数据库是SQL3和Python



这是我第一次发帖,希望我做得正确。

有人能帮我解决一个我似乎无法解决的问题吗。我在谷歌上搜索过,但没有找到答案。我使用的是Python 3.7和SQL3

如果"f_name"字段为空,我将尝试阻止将记录写入数据库。

我试图在conn.commit((上设置一个不写的条件-不起作用我试过做一个条件,如果f-name为空,则缩进c.execute,但这没有奏效,因为我想它还没有得到输入。

如果我在c.execute后面打印出f_name,我会得到".!entry2",无论是否有输入,如果这有任何区别或提供了线索。我猜它是直接写入数据库的,并且不作为变量存在。

我使用的错误检查如下(我在其他地方成功使用过,所以应该没问题(

if f_name =="":
print("No valid Data in First name field")
return
else:
conn.commit()

我试着在conn.commit((上使用错误检查,但我猜它是自动提交的。

有人能告诉我在这种情况下如何防止空白的f_name被接受吗?

这是被称为的代码

def submit():
# Connect to database
conn = sqlite3.connect('address_book.db')
c = conn.cursor()
six_month_reminder = ("f")
annual_reminder = ("f")
six_month_reminder_sent = ("f")
annual_reminder_sent = ("f")
# Insert Into Table
c.execute("INSERT INTO addresses VALUES (:f_name, :l_name, :address, :city, :state, :zipcode, :six_month_reminder, :annual_reminder, :six_month_reminder_sent, :annual_reminder_sent)",
{
'f_name': f_name.get(),
'l_name': l_name.get(),
'address': address.get(),
'city': city.get(),
'state': state.get(),
'zipcode': zipcode.get(),
'six_month_reminder': six_month_reminder,
'annual_reminder': annual_reminder,
'six_month_reminder_sent': six_month_reminder_sent,
'annual_reminder_sent':annual_reminder_sent
})
conn.commit()
conn.close()

感谢您对SO.的贡献

在代码块中,它缺少声明f_namel_nameaddress的部分。。。

假设你已经在一个问题中声明了那些你没有写的块,我在这里假设fname是设置的,它是一个字典;最直接的方法是在执行get():时进行检查

...
annual_reminder_sent = ("f")
if f_name.get() == '' or f_name.get() is None:
return
...

EDIT:需要or的第二条语句,因为如果关键字不在字典中,get将返回None,请参阅有关的Python文档。

如果您忽略了这一点,那么字典应该使用get()。例如,如果您在Python REPL:中尝试此操作

>> d = {
"key1": 1,
"key2": 2
}
>> print(d.get("key1"))

将返回CCD_ 10。字典是键值映射。

在您的情况下,您似乎做错了什么,因为您在非字典的名称上使用get()

最新更新