gpt4 book ai didi

类中的 python 和 mysql 连接,数据库打开和关闭奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 02:52:25 25 4
gpt4 key购买 nike

我写了一个小应用程序,它使用 mysql 来获取我们 magento 网站上需要更新的产品列表。

然后 Python 执行这些更新并将数据库中的产品标记为已完成。

我的原代码(伪展示概览)

class Mysqltools:
def get_products():
db = pymysql.connect(host= .... )
mysqlcursor = db.cursor(pymysql.cursors.DictCursor)
sql = select * from x where y = z
mysqlcursor.execute(sql % (z))
rows = mysqlcursor.fetchall()
mysqlcursor.close()
db.close
return rows

def write_products(sku, name, id):
db = pymysql.connect(host= .... )
mysqlcursor = db.cursor(pymysql.cursors.DictCursor)
sql = update table set sku = sku, name = name, id = id.....
mysqlcursor.execute(sql % (sku, name, id))
mysqlcursor.close()
db.close

这工作正常,但在每个数据库连接字符串上我们都会暂停。

我做了一些研究并做了以下事情:

class Mysqltools:
def __init__():
self.db = pymysql.connect(host= .... )

def get_products():

mysqlcursor = self.db.cursor(pymysql.cursors.DictCursor)
sql = select * from x where y = z
mysqlcursor.execute(sql % (z))
rows = mysqlcursor.fetchall()
mysqlcursor.close()

def write_products(sku, name, id):
mysqlcursor = self.db.cursor(pymysql.cursors.DictCursor)
sql = update table set sku = sku, name = name, id = id.....
mysqlcursor.execute(sql % (sku, name, id))
mysqlcursor.close()
db.commit()

这有一个巨大的速度提升。然而,它只会在第一次迭代时成功执行 get_products,一旦它被第二次调用,它就会找到 0 个要更新的产品,即使在数据库上执行相同的 SQL 会显示返回的行数。

我是不是连接有问题?我也尝试将 db = 移到类之外并引用它,但这仍然会产生同样的问题。

更新

做一些测试,如果我从游标中删除 DictCursor 我每次都可以返回正确的行(我刚刚创建了一个快速循环来继续检查记录)

DictCursor 是否在做我不知道的事情?

** 更新 2 **

我删除了 DictCursor,并尝试了以下操作。

  1. 创建 while True 循环来调用我的 get_product 方法。
  2. 在 MySQL 中更改一些行以便找到它们。

如果我从 0 个可能的行开始寻找,然后更改一些以便找到它们,我的代码只显示找到 0 个,并循环说明这一点。

如果我从有 x 个可能的行中找到,然后在 mysql 中将其更改为 0,我的代码将继续循环显示 x 个可能的行。

最佳答案

好的,这个问题的答案如下:

db = pymysql.connect(host=.... user=... )

class MySqlTools:
def get_products():

mysqlcursor = db.cursor(pymysql.cursors.DictCursor)
sql = select * from x where y = z
mysqlcursor.execute(sql % (z))
rows = mysqlcursor.fetchall()
mysqlcursor.close()
db.commit()

这允许您重新使用数据库连接并消除每次创建和关闭连接的开销。

在测试中,从我们的网站下载 500 个订单并将它们写入数据库的时间从 16 分钟缩短到 <3 分钟。

关于类中的 python 和 mysql 连接,数据库打开和关闭奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com