我希望将所有数据保存在字典中(或任何其他可行的方法),并将所有变量添加到myql数据库中。问题是,我不知道我会有多少变量。
看起来像这样:
cur.execute("INSERT INTO db_name(keys) VALUES (dict[key])")
我的程序中有很多东西,其中一些是布尔变量(True,False),有些是整数,有些是字符串。默认情况下,我可以添加它们:
cur.execute(""" INSERT INTO db_name(a, b, c, d) VALUES ('%s', '%s', %s, %s) """, ('abc', 123, True, 'NULL')
如您所见,对于字符串和整数'%s'以及对于布尔值,NULL必须为%s而不是''
原因是,如果找不到变量,它在数据库中必须为NULL,但我不知道如何将字符串和整数变量添加为NULL,因为它使用'%s'将它们作为字符串插入。< / p>
类似的东西:(它不是python代码,只是它的语法思想)
cur.execute("INSERT INTO db_name( data.keys() ) VALUES ( data.values() ) ")
答案 0 :(得分:1)
感谢大家的帮助,使用格式化功能解决了问题:
query = "INSERT INTO shData("
query_v = "VALUES ("
for key in q_i:
query += key + ','
if isinstance(q_i[key],str):
query_v += "'{" + key + "}',"
else:
query_v += "{" + key + "},"
query = query.rstrip(",")
query_v = query_v.rstrip(",")
query = query + ") " + query_v + ") "
cur.execute(query.format(**q_i))
答案 1 :(得分:0)
这是因为你在引号中使用了%s
占位符,并且还传递了一个字符串NULL
,而不是一个空值(python中的None
)
更正后的版本为:
cur.execute(""" INSERT INTO db_name(a, b, c, d)
VALUES
(%s, %s, %s, %s) """, ('abc', 123, True, None)
# no quotes on %s , and None instead of 'NULL'
请参阅文档here