Python mysql - cursor.close() db.close() 函数

标签 python mysql database mysql-python

我在我的应用程序的各种类和线程中打开、访问、写入等数据库。我有一个数据库 self.run_params["db"] 我在整个应用程序中都使用它来访问。

问题 1:我是否应该在每次访问后关闭光标?

问题 2:我的应用程序不断运行并在不同的不同点访问数据库,那么我应该在每次访问后关闭数据库,还是只在应用程序退出时关闭数据库?

import MySQLdb
import warnings
warnings.filterwarnings('ignore')

self.run_params = {}
self.run_params["databaseName"] = "transporterDatabase"
self.run_params["tableName"] = "transporterTable"

## Create databse if not already exist ##
db = MySQLdb.connect(host="localhost",
                     user="root",
                     passwd="password")
cur = db.cursor()
cur.execute("CREATE DATABASE IF NOT EXISTS " + self.run_params["databaseName"])
db.close()

## Create table if not already exist ##
self.run_params["db"] = MySQLdb.connect(host="localhost",
                     user="root",
                     passwd="password",
                     db=self.run_params["databaseName"])

cur = self.run_params["db"].cursor()
cur.execute("CREATE TABLE IF NOT EXISTS " + self.run_params["tableName"] + "(jobID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(jobID), location VARCHAR(5000), mode VARCHAR(50), process VARCHAR(10), status VARCHAR(30), title VARCHAR(500), vendorID VARCHAR(100), provider VARCHAR(100), packageType VARCHAR(50), assetUpdate VARCHAR(5), folderSubmission VARCHAR(5), submitTime VARCHAR(50), priority VARCHAR(5));")
cur.close()

######################

## Use database info ##
cur = self.params["db"].cursor()
cur.execute("SELECT * FROM %s order by %s" % (self.params["tableName"], 'priority'))                 

for row in cur.fetchall() :
    jobID = row[0]
    indir1 = row[1]
    runningMode = row[2]
    process = row[3]
    status = row[4]
    title = row[5]
    vendorID = row[6]
    provider = row[7]
    packageType = row[8]
    assetUpdate = row[9]
    folderSubmission = row[10]

cur.close()

最佳答案

Should I be closing the cursor each time after each individual access?

一般不需要关闭MySQLdb游标;它是 Python 中的一个对象,其行为类似于游标,但不由 MySQL 服务器实现或管理。您可能更喜欢关闭光标,这样做没有错;也许您觉得它使您的代码更容易理解,或者在某些情况下您想要捕获并处理与尝试使用不应该可用的游标相关的错误。但是,在使用 MySQLdb 模块时,您无需担心太多。

My Application runs constantly and accesses the database at various different points, so should I close the database after each access, or only close the database on exit of the application?

同样,这取决于您的具体需求和偏好。如果您使用 user-defined variables ,这些仅在定义它们的连接保持打开时才可用。如果您遇到连接超时问题,仅在事件高峰期保持连接打开可能更方便。一般来说,如果您确实需要持续、频繁的访问,则无限期地打开连接并没有错。

至于什么是“持续、频繁的访问”,这可能与您是否遇到服务器超时问题有关。我有一个进程需要比每秒一次更频繁地访问服务器,它已经在一个开放的连接上运行了一周的大部分时间;我将其称为“持续、频繁的访问”。

关于Python mysql - cursor.close() db.close() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456717/

相关文章:

database - 电厂数据的数据压缩技术

python - flask 请求调试

python Pandas : How to sum up columns that also include missing values?

php - 寻找基本的 PHP/MySQL 搜索类

mysql - 如何在MySQL中查询与简单子(monad)字符串匹配的所有结果?

sql - 为 PostgreSQL 模拟 CREATE DATABASE IF NOT EXISTS?

mysql - iOS 和 Mac OSX 与 MySQL 数据库通信

python - 如何计算每日用户差异并 reshape pandas 数据框?

python - 使用 Fluidsynth 和 mingus 时没有声音(外壳除外)

mysql - 从 MSSQL 转换为 MySQL