优化 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 个回答
3
除了托马斯的好建议之外,
我建议你看看 executemany()
,比如说:
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
中找到的所有参数序列或映射执行它。
4
看起来你在每次插入数据的时候都在创建一个新的连接。这可能是导致速度变慢的主要原因,因为建立新的连接通常是比较慢的。你可以把连接放在方法外面创建,这样你会看到明显的速度提升。你还可以在函数外面创建一个游标(cursor),然后重复使用它,这样也能加快速度。
根据你的具体情况,你可能还想在进行多次插入时使用同一个事务。这样做会稍微改变一些行为,因为一个事务应该是原子的,要么完全成功,要么完全失败。不过,提交一个事务通常是比较慢的操作,因为系统需要确保整个操作都成功了。