这是我第一次发帖,希望我做得正确。
有人能帮我解决一个我似乎无法解决的问题吗。我在谷歌上搜索过,但没有找到答案。我使用的是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_name
、l_name
、address
的部分。。。
假设你已经在一个问题中声明了那些你没有写的块,我在这里假设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()
。