Python 新手。
我正在创建一个表单(使用 TKinter)来填充 mySQL 表。 该表单具有组合框,可查找数据库中的引用表。当用户选择组合框值时,查找表中所选值的主键将作为外键插入到目标表中(下面代码中的字段 1 和 3)。 该表单还包含短文本(tk Entry)和长文本(tk Text)字段(字段 2 和 4)。 所有字段都是可选的。
如果组合框字段没有返回空值,则 sql 语句可以正常工作,但如果一个或多个组合框字段为空,则 sql 插入将失败。如果文本字段中有空值,它会正常工作。我希望也能够用空值填充数据库中的外键字段。
# -- Parse data to prepare for sql insert -- #
def parse_data():
field1 = field1_combobox.get()
field2 = field2_entry.get()
field3 = field3_combobox.get()
field4 = field4_textbox.get(1.0, 'end')
# -- truncate combobox values to retain only the primary keys -- Pipes for delimiters in debugging --#
print (field1[0:1], "|",
field2, "|",
field3[0:1], "|",
field4)
sql = """INSERT INTO mytable (field1, field2, field3, field4) VALUES (%s, %s, %s, %s)"""
val = (field1[0:1], field2, field3[0:1], field4)
try:
cursor.execute(sql, val)
conn.commit()
print("record inserted")
except:
conn.rollback
print("update failed")
conn.close
如果组合框中存在 NULL 值,我希望 SQL 语句能够工作。我已经检查过数据库中的相关字段都是可以为空的。
我没有从 Python 或 SQL 收到任何错误消息 - 记录根本没有插入。
有人知道为什么吗?是因为代码试图截断 NULL 吗?但如果是这种情况,如果我注释掉 SQL,打印语句仍然可以正常工作。看来是mySQL有问题。
顺便说一句,我知道截断从组合框返回的数据可能不是最优雅的解决方案:我想在表单中显示组合框中的值,但我只想将 ID 填充为目标表中的 FK。如果有更好的方法,我也很感激。
为了在 SQL 中获取
NULL
值,您需要将组合框中的空字符串替换为 None
。
val = (field1[0:1] or None, field2 or None, field3[0:1] or None, field4 or None)