Auf*_*ind 51 python mysql-python
如果我使用MySQLdb通过Python连接到MySQL-Server.我创建了connection一个cursor这样的:
connection = MySQLdb.connect(...)
cursor = connection.cursor()
# process
Run Code Online (Sandbox Code Playgroud)
当MySQL处理完成后,应该关闭connection.现在我想知道:关闭connection这样做是否足够:
connection.close()
Run Code Online (Sandbox Code Playgroud)
或者我必须关闭第cursor一个然后关闭connection?像这样:
cursor.close()
connection.close()
Run Code Online (Sandbox Code Playgroud)
Man*_*dar 14
我将在使用MySQLdb或其他任何用于连接python2 / 3的软件包的sql连接中遇到的每个人中重申最佳实践,需要了解这一点。
(下面的模拟运行假定您的sql数据库中有一个名为tablename的表。它有4个列/字段,名称分别为field1,field2,field3,field4)。如果您的连接是本地(同一台计算机),则它是127.0.0.1,也称为“本地主机”。
该过程要简单7个步骤
这是干模拟运行的简单步骤
mydb = MySQLdb.connect(host=host, user=user, passwd=passwd, db=database, charset="utf8")
cursor = mydb.cursor()
query = "INSERT INTO tablename (text_for_field1, text_for_field2, text_for_field3, text_for_field4) VALUES (%s, %s, %s, %s)"
cursor.execute(query, (field1, field2, field3, field4))
mydb.commit()
cursor.close()
mydb.close()
Run Code Online (Sandbox Code Playgroud)
连接和光标不同。连接处于SQL级别,而游标可以视为数据元素。您可以在单个连接中的同一数据上具有多个游标。具有来自同一台计算机的相同数据的多个连接是一种不寻常的情况。
此处已描述了更多信息 “游标范例并非特定于Python,而是数据库本身中经常使用的数据结构。
根据基础实现,可能会生成多个游标,它们共享与数据库的同一连接。关闭游标应该释放与查询相关的资源,包括任何从未从数据库获取(或获取但未使用)的结果,但不会消除与数据库本身的连接,因此您可以在同一数据库上获取新的游标无需再次进行身份验证。”
loh*_*r91 13
完成后关闭光标可能是最好的选择,因为你已经不再使用它了.但是,我没有看到在数据库连接后关闭它有害的任何事情.但是因为您可以将其设置为:
cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)
我建议之前关闭它,以防你不小心再次分配它并关闭数据库连接,因为这会引发错误.因此,您可能需要先将其关闭,以防止意外重新分配已关闭的连接.
(有些甚至根本没有关闭它,因为它被垃圾收集器收集(参见:在Python中使用sqlite是否需要关闭游标?))
参考: 何时使用MySQLdb关闭游标
S.L*_*ott -32
使用with,此工具允许您创建一个临时光标,一旦返回到之前的缩进级别,该临时光标将关闭。
from contextlib import closing
with closing( connection.cursor() ) as cursor:
(indented) use the cursor
(non-indented) cursor is closed.
connection.close()
Run Code Online (Sandbox Code Playgroud)