Python,SQLAlchemy,如何仅通过一条提交指令以一种有效的方式插入查询

我正在使用SQLAlchemy,并且我的插入功能正常工作.但是,我想要并且我需要它高效,因此,由于我要插入“ for循环”内部,因此我想在程序执行结束时仅提交一次.

我不确定这种想法是否适用于SQLAlchemy,因此请以正确,有效的方式为我提供建议.

我的代码将从for循环中调用insert_query函数.我不返回在函数调用内创建的查询对象.

def insert_query(publicId, secret, keyhandle, secretobj):

    #creates the query object 
    sql = secretobj.insert().values(public_id=publicId, keyhandle=keyhandle, secret=secret)
    #insert the query
    result = connection.execute(sql)

    return result

#####################
# CALL INSERT BELOW #
#####################


#walk across the file system to do some stuff
for root, subFolders, files in os.walk(path):
    if files:

        do_some_stuff_that_produce_output_for_insert_query()

        #########################
        # here i call my insert #
        #########################
        if not insert_query(publicId, secret, keyhandle, secretobj):
            print "WARNING: could not insert %s" % publicId


#close sqlalchemy
connection.close()

解决方法:

我认为您最好使用executemany.

def make_secret(files):
    # You'd have to define how you generate the dictionary to insert.
    # These names should match your table column names.
    return {
        'public_id': None,
        'secret': None,
        'keyhandle': None,
    }
# You can make the whole list of rows to insert at once.
secrets = [make_secret(files) for root, subFolders, files in os.walk(path) if files]
# Then insert them all like this
connection.execute(secretobj.insert(), secrets)

本节的第二部分说明了executemany:

http://docs.sqlalchemy.org/en/rel_0_8/core/tutorial.html#executing-multiple-statements

上一篇:IE8 Javascript性能监控工具


下一篇:第1-5章 慕课网微信小程序开发学习笔记