优化pymssql代码

时间:2010-04-27 12:22:40

标签: 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 = conn.cursor()

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

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

    conn.commit() 
    conn.close()

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

除了托马斯的伟大建议, 我建议您查看executemany() *,e.g.

cur.executemany("INSERT INTO persons VALUES(%d, %s)", 
    [ (1, 'John Doe'), (2, 'Jane Doe') ])

... executemany()的第二个参数应该是要插入的行序列。

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

* executemany(),如Python DB-API

中所述
  

.executemany(operation,seq_of_parameters)
  准备数据库操作(查询或   命令)然后执行它   所有参数序列或映射   在序列中找到   seq_of_parameters。