0

我正在使用 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()
4

2 回答 2

4

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

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

于 2010-04-27T12:28:07.263 回答
3

除了 Thomas 的好建议之外,
我建议您查看executemany()*,例如

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

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

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

*executemany()Python DB-API中所述:

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

于 2010-04-27T16:05:21.417 回答