草庐IT

Python MySQLdb : connection. close() VS。光标.close()

coder 2023-05-21 原文

如果我使用 MySQLdb 通过 Python 连接到 MySQL-Server。我创建一个 connection 和一个 cursor 像这样:

connection = MySQLdb.connect(...)
cursor = connection.cursor()
# process

当 MySQL 处理完成后,应该关闭 连接。现在我想知道:通过以下方式关闭 connection 是否足够:

connection.close()

还是我必须先关闭 cursor 再关闭 connection?像这样:

cursor.close()
connection.close()

最佳答案

我再重申一下最佳实践,遇到使用MySQLdb或任何其他包连接python2/3的sql连接的每个人都需要知道这一点

(在模拟运行之后假设您的 sql 数据库中有一个名为 tablename 的表。它有 4 个列/字段,名称分别为 field1、field2、field3、field4)。 如果您的连接是本地连接(同一台机器),则它是 127.0.0.1,也称为“localhost”。

过程很简单,7步

  1. 创建连接
  2. 创建光标
  3. 创建查询字符串
  4. 执行查询
  5. 提交查询
  6. 关闭光标
  7. 关闭连接

这是一个简单的stem mock run步骤

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()

连接和光标不同。 连接是在 SQL 级别,而游标可以被视为数据元素。您可以在单个连接中的同一数据上有多个游标。从同一台计算机对相同数据进行多个连接是一种不寻常的情况。

更多已被描述here “游标范式并非特定于 Python,而是数据库本身中常见的数据结构。

根据底层实现,可能会生成多个共享同一个数据库连接的游标。关闭游标应该释放与查询关联的资源,包括从未从数据库中获取(或已获取但未使用)的任何结果,但不会消除与数据库本身的连接,因此您将能够在同一数据库上获取新游标无需再次验证。”

关于Python MySQLdb : connection. close() VS。光标.close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5504340/

有关Python MySQLdb : connection. close() VS。光标.close()的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  3. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  4. Ruby#index 方法 VS 二进制搜索 - 2

    给定一个元素和一个数组,Ruby#index方法返回元素在数组中的位置。我使用二进制搜索实现了我自己的索引方法,期望我的方法会优于内置方法。令我惊讶的是,内置的在实验中的运行速度大约是我的三倍。有Rubyist知道原因吗? 最佳答案 内置#indexisnotabinarysearch,这只是一个简单的迭代搜索。但是,它是用C而不是Ruby实现的,因此自然可以快几个数量级。 关于Ruby#index方法VS二进制搜索,我们在StackOverflow上找到一个类似的问题:

  5. ruby HTTPClient : How to use persistent connections? - 2

    如何通过HTTPClient使用持久HTTP连接?发送HTTP请求时是否只是设置KeepAlive的问题?文档指出支持持久连接,但没有告诉我们如何使用它们。 最佳答案 是availableinNet::HTTP如文档中所写,Net::HTTP.startimmediatelycreatesaconnectiontoanHTTPserverwhichiskeptopenforthedurationoftheblock.Theconnectionwillremainopenformultiplerequestsintheblockift

  6. ruby-on-rails - lovdbyless VS 社区引擎……哪个最好? - 2

    随着ruby​​被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail

  7. ruby - 提前返回 vs if 在 ruby​​ 代码中 - 2

    我看到有两种写作风格:deffind_nest(animal)returnunlessanimal.bird?GPS.find_nest(animal.do_crazy_stuff)end对比deffind_nest(animal)ifanimal.bird?GPS.find_nest(animal.do_crazy_stuff)endend哪个更正确/更可取/遵循最佳实践?还是无所谓? 最佳答案 根据Rubystyleguide,Preferaguardclausewhenyoucanassertinvaliddata.Aguar

  8. ruby - 使用 watir-webdriver 打开多个线程导致 'Connection refused' 错误 - 2

    我有这个简单的例子:require'watir-webdriver'arr=[]sites=["www.google.com","www.bbc.com","www.cnn.com","www.gmail.com"]sites.eachdo|site|arr每次我运行这个脚本,我都会得到ruby/2.1.0/net/http.rb:879:in`initialize':Connectionrefused-connect(2)for"127.0.0.1"port9517(Errno::ECONNREFUSED)或者其中一个浏览器在至少一个线程上意外关闭。另一方面,如果我在每个循环周期结束

  9. ruby-on-rails - connect() 到 unix :/var/run/unicorn. 连接到上游时 sock 失败(111:连接被拒绝) - 2

    我遵循ruby​​onrails一个应用程序点击部署。数据库做得很好,即使我检查Rails控制台一切正常017/02/2615:34:17[error]18564#0:*31connect()tounix:/var/run/unicorn.sockfailed(111:Connectionrefused)whileconnectingtoupstream,client:121.52.156.57,server:_,request:"GET/HTTP/1.1",upstream:"http://unix:/var/run/unicorn.sock:/",host:"188.166.157

  10. ruby-on-rails - Rails 和 I18n : localized templates vs localized string - 2

    您可能知道,从Rails2.2开始,Rails附带了一个简单的本地化和国际化后端。默认情况下,您可以将需要翻译的字符串存储在config文件夹中的本地化文件中。config/locales/en.ymlconfig/locales/it.yml但是Rails也提供了本地化模板和局部的能力。例如,MainController#index操作可以根据模板文件名和当前区域设置选择本地化模板。apps/views/main/index.it.html.erbapps/views/main/index.en.html.erb当您需要翻译单个字符串或短段落时,第一个功能很有用。当同一Action根

随机推荐