Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 优化pymssql代码_Python_Optimization_Pymssql - Fatal编程技术网

Python 优化pymssql代码

Python 优化pymssql代码,python,optimization,pymssql,Python,Optimization,Pymssql,我正在使用pymssql从python向sql server插入记录。数据库执行查询需要2毫秒,但每秒插入6行。唯一的问题是在代码方面。如何优化下面的代码,或者插入记录的最快方法是什么 def save(self): conn = pymssql.connect(host=dbHost, user=dbUser, password=dbPassword, database=dbName, as_dict=True) cur

我正在使用pymssql从python向sql server插入记录。数据库执行查询需要2毫秒,但每秒插入6行。唯一的问题是在代码方面。如何优化下面的代码,或者插入记录的最快方法是什么

def save(self):
    conn = pymssql.connect(host=dbHost, user=dbUser, 
                           password=dbPassword, database=dbName, as_dict=True)
    cur = conn.cursor()

    self.pageURL = self.pageURL.replace("'","''")

    query = "my query is there"               
    cur.execute(query)

    conn.commit() 
    conn.close()

看起来您正在为每个插入创建一个新连接。这可能是经济放缓的主要原因:建立新的连接通常相当缓慢。在方法之外创建连接,您应该会看到很大的改进。您还可以在函数外部创建一个游标并重新使用它,这将是另一个加速


根据您的情况,您可能还希望将同一事务用于多个插入。这稍微改变了行为——因为事务应该是原子的,要么完全成功,要么完全失败——但提交事务通常是一个缓慢的操作,因为它必须确保整个操作成功。

除了Thomas的伟大建议之外,
我建议您研究一下
executemany()
*,:

…其中,
executemany()
的第二个参数应该是要插入的行序列

这引出了另一点:
您可能希望将查询和查询参数作为单独的参数发送到
execute()
executemany()
。这将允许PyMSSQL模块为您处理任何报价问题

*
executemany()
如中所述:

.executemany(操作,参数顺序)

准备数据库操作(查询或 命令),然后针对 所有参数序列或映射 在序列中找到 参数的顺序


@托马斯:谢谢,这很有效。我已经尝试了连接对象外部的方法,但速度仍然很低。将“自动提交”属性设置为True时,速度会提高。
cur.executemany("INSERT INTO persons VALUES(%d, %s)", 
    [ (1, 'John Doe'), (2, 'Jane Doe') ])