基于要插入的列数的Python + MySQL DB动态插入查询

时间:2019-05-09 16:43:30

标签: python-2.7 mysql-python

我是编程的新手(最近学习过的函数),发现自己在脚本之间重新编写了相同的“插入mysql表”功能(如下)……主要是为了修改这两个部分- (名称,insert_ts)&&&值(%s,%s)

是否有一种很好的方法来重写下面的代码以根据包含值的元组的长度以及根据“标签”列表插入列标题来接受任意数量的值? VALUES(%s,%s) 和此部分 (name,insert_ts)

    list_of_tuples = [] #list of records to be inserted.

    #take a list of dictionaries - and create a list of tuples in proper format/order
    for dict1 in output:
            one_list = []
            one_list.extend((dict1['name'],dict1['insert_ts']))
            list_of_tuples.append(tuple(one_list))
    labels = ['name', 'insert_ts']


    #db_write accepts table name as str, labels as str, and output as list of tuples
    def db_write(table,labels,output):

        local_cursor.executemany(""" INSERT INTO my_table 
        (name,insert_ts)  #this is pulled from 'labels'
          VALUES (%s, %s)   #number of %s comes from len(labels)
        """
        ,  list_of_tuples)
        local_db.commit()
        local_db.close()
        #print 'done posting!'

或者,是否有更好的方法可以使用mysqldb完成我想做的事情?

谢谢大家!

1 个答案:

答案 0 :(得分:0)

经过一段时间的经验(3个月,呵呵),我想向所有人更新似乎效果很好的解决方案!

我花了一些时间来学习如何使用 SQL Alchemy python软件包,而不是使用mysqldb,并且建议每个人都做同样的事情!

SQL Alchemy允许您:

1)在python代码中定义一个表(用于Excel以列出列名等)。

2)最重要!您可以将字典传递给SQL Alchemy,只要字典的键名与表的键名匹配,所有内容都会神奇地发布到SQL表中。如果您的sql表中有60列,但是您的字典只有两个键-BAM,则SQL Alchemy会处理所有问题并仅发布两个值,而将MySQL中的其他值保留为空白。 魔术!