Python从用户输入中检查NULL值,并且不包括在sql更新中



在我的函数中,我要求用户输入不同的变量,然后更新数据库。问题是,如果他们不输入任何内容,有没有办法让我不向DB推送任何内容?当他们不为var输入值时,DB中的值将被擦除。

db_root = '/var/lib/mysql/'
db_to_create = 'students'
db_to_use = 'students'
conn = pymysql.connect(host='localhost',  user='root', passwd='dbadmin',  cursorclass=pymysql.cursors.DictCursor)
print('Connection successful!!')

def modify_student():
student_id = input("Enter the id of the student record you wish to modify: ")
student_info = input("Is this student personal information you want to modify - y or n: ")
if student_info == 'y':
firstname = input("Enter the first name: ")
lastname = input("Enter the last name: ")
email = input("Enter the email address: ")
address = input("Enter the address: ")
DOB = input("Enter the DOB in YYYY-MM-DD: ")
cur = conn.cursor()
command = "use %s; " %db_to_use
cur.execute(command)
sql = "UPDATE students_info SET firstname = %s, lastname = %s,  email = %s,  address = %s,  DOB = %s  WHERE ID = %s;"
cur.execute(sql, [firstname, lastname, email, address, DOB, student_id])
print(cur.execute)
conn.commit()
cur.close()
conn.close()
else:
print("else")
modify_student()
######## SCHEMA ##################
MariaDB [students]> DESCRIBE students_info;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| ID        | int(11)      | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(255) | YES  |     | NULL    |                |
| lastname  | varchar(255) | YES  |     | NULL    |                |
| email     | varchar(255) | YES  |     | NULL    |                |
| address   | varchar(255) | YES  |     | NULL    |                |
| DOB       | date         | YES  |     | NULL    |                |
| english   | varchar(255) | YES  |     | NULL    |                |
| maths     | varchar(255) | YES  |     | NULL    |                |
| history   | varchar(255) | YES  |     | NULL    |                |
| science   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

您可以使用以下辅助函数:

def mandatory_input(prompt):
while True:
value = input(prompt)
if value:
return value
print("You did not enter the required information.")

并用它替换所有被认为是强制性的input提示,因此:

student_id = input("Enter the id of the student record you wish to modify: ")

变为:

student_id = mandatory_input("Enter the id of the student record you wish to modify: ")

等等,这样用户将一直被提示输入一个值,直到他们输入一些东西。

此外,如果您想等待用户完成,然后在他们最后输入时进行验证:

if all([firstname, lastname, email, ...]):
cur = conn.cursor()
...
else:
print('User missed an input')

最新更新