我使用pymssql将记录从python插入到sql服务器。数据库执行一个查询需要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()发布于 2010-04-27 20:28:07
看起来您正在为每个插入创建一个新的连接。这可能是速度减慢的主要原因:建立新的连接通常相当缓慢。在方法之外创建连接,您应该会看到很大的改进。你也可以在函数外创建一个游标并重用它,这将是另一个加速。
根据您的情况,您可能还希望将同一事务用于多个插入。这会稍微改变行为--因为事务应该是原子的,要么完全成功,要么完全失败--但提交事务通常是一个缓慢的操作,因为它必须确保整个操作成功。
发布于 2010-04-28 00:05:21
除了托马斯的伟大建议外,
我建议你去看看executemany()*,e.g.
cur.executemany("INSERT INTO persons VALUES(%d, %s)",
[ (1, 'John Doe'), (2, 'Jane Doe') ])...where executemany()的第二个参数应该是要插入的行的序列。
这就引出了另一点:
您可能希望将查询和查询参数作为单独的参数发送给execute()或executemany()。这将允许PyMSSQL模块为您处理任何报价问题。
* Python DB-API中描述的executemany()
.executemany(operation,seq_of_parameters)
准备一个数据库操作(查询或命令),然后针对序列seq_of_parameters中找到的所有参数序列或映射执行它。
https://stackoverflow.com/questions/2721063
复制相似问题