使用MySQLdb库在Python中使用数据库查询作为变量

时间:2014-03-04 13:56:24

标签: python mysql mysql-python

我希望将所有数据保存在字典中(或任何其他可行的方法),并将所有变量添加到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() ) ")

2 个答案:

答案 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

相关问题