首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在导入的函数上使用MySQLdb连接对象

问如何在导入的函数上使用MySQLdb连接对象
EN

Stack Overflow用户
提问于 2012-02-09 00:59:29
回答 2查看 2.3K关注 0票数 1

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

下面是一个编码示例。这是可行的:

代码语言:javascript
复制
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)

当我将lookup_value的代码移动到第二个文件,并将其导入('from mod2 import lookup_value')时,代码失败,因为游标对象未定义。只有在创建要使用的游标对象时,导入的lookup_value版本才起作用。这似乎非常低效。处理此问题的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-09 01:41:59

这是因为lookup_value会在您导入的文件中搜索cur。你可以把这些都放在一个类中。

代码语言:javascript
复制
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

现在你可以做

代码语言:javascript
复制
....
db = DB(db_name)
value = db.lookup_value(user_name)

当您导入DB from mod2 import DB时,最后一部分应该仍然有效。

还要注意我是如何在lookup_value中执行查询的,这确保了数据的完整性

票数 3
EN

Stack Overflow用户

发布于 2012-02-09 01:02:10

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9197936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档