如果返回的组合框值为空,则Python,mySQL编译失败

yi0zb3m4  于 2023-11-16  发布在  Mysql
关注(0)|答案(1)|浏览(104)

Python新手
我正在创建一个表单(使用TKinter)填充一个mySQL表。该表单具有组合框,可查找DB中的引用表。当用户选择组合框值时,从查找表中选择的值的主键将作为外键插入到目标表中(下面代码中的字段1和3)。表单还包含短文本(tk Entry)和长文本(tk Text)字段(字段2和4)。所有字段都是可选的。
如果组合框字段没有返回空值,则sql语句正常工作,但如果一个或多个组合框字段为空值,则sql插入失败。如果文本字段中有空值,则它正常工作。我希望能够用空值填充DB中的外键字段。

# -- 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语句能够正常工作。我已经检查了DB中的相关字段都可以为空。
我没有从Python或SQL得到任何错误消息-记录根本没有插入。
有没有人知道为什么?是因为代码试图截断NULL吗?但是如果是这样的话,如果我注解掉SQL,print语句仍然可以正常工作。似乎是mySQL有问题。
顺便说一句,我知道截断从组合框返回的数据可能不是最优雅的解决方案:我想在表单中显示组合框中的值,但我只想在目标表中将ID填充为FK。如果有更好的方法,我也希望得到建议。
最新消息:找到了一个更好的解决方案,可以从返回的组合框值中剥离ID,这些组合框值具有ID和值,其中我只想使用ID用外键填充目标表,这适用于长度超过1个字符的ID字符串:

f1 = int(field1.split(" ")[0])

ee7vknir

ee7vknir1#

为了在SQL中获取NULL值,需要将组合框中的空字符串替换为None

val = (field1[0:1] or None, field2 or None, field3[0:1] or None, field4 or None)

字符串

相关问题