Python 如何在导入的函数上使用MySQLdb connect对象

Python 如何在导入的函数上使用MySQLdb connect对象,python,mysql-python,Python,Mysql Python,毫无疑问,这是一个很难回答的问题。我尝试将一些常用代码移动到一个单独的模块中,并将代码用作导入的函数。代码通过MySQLdb进行MySQL查询。当函数是主脚本的一部分时,它可以正常运行。当我从一个单独的模块导入函数时,函数失败,因为不再定义游标对象。有没有一种方法可以导入函数而不为导入的函数定义单独的游标对象 下面是一个编码示例。这项工作: import MySQLdb #from mod2 import lookup_value def get_db_connection(database_

毫无疑问,这是一个很难回答的问题。我尝试将一些常用代码移动到一个单独的模块中,并将代码用作导入的函数。代码通过MySQLdb进行MySQL查询。当函数是主脚本的一部分时,它可以正常运行。当我从一个单独的模块导入函数时,函数失败,因为不再定义游标对象。有没有一种方法可以导入函数而不为导入的函数定义单独的游标对象

下面是一个编码示例。这项工作:

import MySQLdb
#from mod2 import lookup_value

def get_db_connection(database_name):
    db = MySQLdb.connect('localhost', 'user', 'pswrd', database_name)
    cur = db.cursor()
    return db, cur

def lookup_value(user_name):
    query = "SELECT COUNT(*) FROM x_user_%s" % (user_name)
    cur.execute("%s" % (query))
    return cur.fetchone()

db_name = 'mg_test' # database name
user_name = 'test' # name of a specific table in the database

db, cur = get_db_connection(db_name)
value = lookup_value(user_name)

当我将查找_值的代码移动到第二个文件并导入它(“从mod2导入查找_值”)时,代码失败,因为游标对象未定义。导入的lookup_值版本只有在创建游标对象以供使用时才有效。这似乎效率很低。处理此问题的最佳方法是什么?

如果希望函数独立,则应将游标变量传递给函数。
在任何情况下,您都应该在函数中只使用局部变量和作为参数传递的变量。

如果您希望函数是独立的,您应该将游标变量传递给函数。
在任何情况下,您都应该在函数中只使用局部变量和作为参数传递的变量。

这是因为
lookup\u value
在您导入的文件中搜索
cur
。你可以把这些都放在一节课上

class DB():
    def __init__(self,database_name):
        db = MySQLdb.connect('localhost', 'user', 'pswrd', database_name)
        self.cur = db.cursor()


    def lookup_value(self,user_name):
        query = "SELECT COUNT(*) FROM x_user_%s"
        self.cur.execute(query, (user_name,))
        self.result = self.cur.fetchone()
        return self.result
现在你可以做了

....
db = DB(db_name)
value = db.lookup_value(user_name)
当您从mod2 import DB导入DB
时,最后一部分仍应工作


还要注意我是如何在
lookup\u value
中执行查询的,这确保了数据已被净化这是因为
lookup\u value
在导入数据的文件中搜索
cur
。你可以把这些都放在一节课上

class DB():
    def __init__(self,database_name):
        db = MySQLdb.connect('localhost', 'user', 'pswrd', database_name)
        self.cur = db.cursor()


    def lookup_value(self,user_name):
        query = "SELECT COUNT(*) FROM x_user_%s"
        self.cur.execute(query, (user_name,))
        self.result = self.cur.fetchone()
        return self.result
现在你可以做了

....
db = DB(db_name)
value = db.lookup_value(user_name)
当您从mod2 import DB导入DB
时,最后一部分仍应工作


还要注意我是如何在
lookup\u value
中执行查询的,这样可以确保数据被清理干净

当我为我的项目整理好代码后,我期待着真正学习python。我不太确定我是否期待着重写它,但是:)谢谢当我为我的项目一起完成代码编写时,我期待着真正学习python。我不太确定我是否期待重写它,不过:)谢谢