非常类似于这个问题MySQL Dynamic Query Statement in Python
然而,我想要做的不是两个列表,而是使用字典
假设我有这本词典
instance_insert = {
# sql column variable value
'instance_id' : 'instnace.id',
'customer_id' : 'customer.id',
'os' : 'instance.platform',
}
我想用一个insert语句填充一个mysql数据库,使用sql列作为sql列名,使用变量名作为变量,用于保存要插入mysql表的值。
有点丢失,因为我不完全理解这句话的作用,但是从我发布的问题中被拉出来,他在那里使用两个列表来做他想做的事情。
sql = "INSERT INTO instance_info_test VALUES (%s);" % ', '.join('?' for _ in instance_insert)
cur.execute (sql, instance_insert)
此外,我希望它是动态的,我可以在字典中添加/删除列
答案 0 :(得分:0)
发布之前,您可能想尝试搜索更具体问题的内容。例如,当我用Google搜索“python mysqldb insert dictionary”时,我在第一页http://mail.python.org/pipermail/tutor/2010-December/080701.html找到了一个很好的答案。相关部分:
这是我在尝试制作通用版本时想出的 上述内容:
def add_row(cursor, tablename, rowdict): # XXX tablename not sanitized # XXX test for allowed keys is case-sensitive # filter out keys that are not column names cursor.execute("describe %s" % tablename) allowed_keys = set(row[0] for row in cursor.fetchall()) keys = allowed_keys.intersection(rowdict) if len(rowdict) > len(keys): unknown_keys = set(rowdict) - allowed_keys print >> sys.stderr, "skipping keys:", ", ".join(unknown_keys) columns = ", ".join(keys) values_template = ", ".join(["%s"] * len(keys)) sql = "insert into %s (%s) values (%s)" % ( tablename, columns, values_template) values = tuple(rowdict[key] for key in keys) cursor.execute(sql, values) filename = ... tablename = ... db = MySQLdb.connect(...) cursor = db.cursor() with open(filename) as instream: row = json.load(instream) add_row(cursor, tablename, row)
彼得
如果您知道您的输入始终有效(表名有效,表中存在列),并且您没有像示例那样从JSON文件导入,则可以简化此功能。但它会完成你想要完成的任务。虽然最初看起来像DictCursor会有所帮助,但看起来DictCursor对于返回值的字典很有用,但它无法从字典执行。