首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化pymssql代码

优化pymssql代码
EN

Stack Overflow用户
提问于 2010-04-27 20:22:40
回答 2查看 4.1K关注 0票数 0

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

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-27 20:28:07

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

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

票数 4
EN

Stack Overflow用户

发布于 2010-04-28 00:05:21

除了托马斯的伟大建议外,

我建议你去看看executemany()*,e.g.

代码语言:javascript
复制
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中找到的所有参数序列或映射执行它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2721063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档